@oss-autopilot/core 0.44.2 → 0.44.15
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/cli-registry.js +61 -0
- package/dist/cli.bundle.cjs +101 -127
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/commands/daily.d.ts +6 -1
- package/dist/commands/daily.js +29 -64
- package/dist/commands/dashboard-data.d.ts +22 -1
- package/dist/commands/dashboard-data.js +85 -62
- package/dist/commands/dashboard-lifecycle.js +39 -2
- package/dist/commands/dashboard-scripts.d.ts +1 -1
- package/dist/commands/dashboard-scripts.js +2 -1
- package/dist/commands/dashboard-server.d.ts +2 -1
- package/dist/commands/dashboard-server.js +120 -81
- package/dist/commands/dashboard-templates.js +15 -69
- package/dist/commands/override.d.ts +21 -0
- package/dist/commands/override.js +35 -0
- package/dist/core/checklist-analysis.js +3 -1
- package/dist/core/daily-logic.d.ts +13 -10
- package/dist/core/daily-logic.js +79 -166
- package/dist/core/display-utils.d.ts +4 -0
- package/dist/core/display-utils.js +53 -54
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.js +26 -0
- package/dist/core/github-stats.d.ts +3 -3
- package/dist/core/github-stats.js +15 -7
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +2 -2
- package/dist/core/issue-conversation.js +2 -2
- package/dist/core/issue-discovery.d.ts +0 -5
- package/dist/core/issue-discovery.js +4 -11
- package/dist/core/issue-vetting.d.ts +0 -2
- package/dist/core/issue-vetting.js +31 -45
- package/dist/core/pr-monitor.d.ts +26 -3
- package/dist/core/pr-monitor.js +106 -93
- package/dist/core/state.d.ts +22 -1
- package/dist/core/state.js +50 -1
- package/dist/core/test-utils.js +6 -16
- package/dist/core/types.d.ts +51 -38
- package/dist/core/types.js +8 -0
- package/dist/core/utils.d.ts +2 -0
- package/dist/core/utils.js +5 -1
- package/dist/formatters/json.d.ts +1 -13
- package/dist/formatters/json.js +1 -13
- package/package.json +2 -2
package/dist/cli.bundle.cjs
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`)}displayWidth(e){return
|
|
4
|
-
`+" ".repeat(t+c)),i+a+" ".repeat(c)+
|
|
5
|
-
${i}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let s=e.split(/\r\n|\n/),o=/[\s]*[^\s]+/g,n=[];return s.forEach(i=>{let a=i.match(o);if(a===null){n.push("");return}let c=[a.shift()],l=this.displayWidth(c[0]);a.forEach(
|
|
6
|
-
`)}};function
|
|
2
|
+
"use strict";var wc=Object.create;var fr=Object.defineProperty;var Ec=Object.getOwnPropertyDescriptor;var Rc=Object.getOwnPropertyNames;var Tc=Object.getPrototypeOf,Sc=Object.prototype.hasOwnProperty;var O=(r,e)=>()=>(r&&(e=r(r=0)),e);var Je=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ne=(r,e)=>{for(var t in e)fr(r,t,{get:e[t],enumerable:!0})},Cc=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Rc(e))!Sc.call(r,o)&&o!==t&&fr(r,o,{get:()=>e[o],enumerable:!(s=Ec(e,o))||s.enumerable});return r};var K=(r,e,t)=>(t=r!=null?wc(Tc(r)):{},Cc(e||!r||!r.__esModule?fr(t,"default",{value:r,enumerable:!0}):t,r));var Ut=Je(yr=>{var ds=class extends Error{constructor(e,t,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},br=class extends ds{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};yr.CommanderError=ds;yr.InvalidArgumentError=br});var ps=Je(_r=>{var{InvalidArgumentError:Pc}=Ut(),vr=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,s)=>{if(!this.argChoices.includes(t))throw new Pc(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(t,s):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function kc(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}_r.Argument=vr;_r.humanReadableArgName=kc});var Rr=Je(Er=>{var{humanReadableArgName:Ac}=ps(),wr=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter(o=>!o._hidden),s=e._getHelpCommand();return s&&!s._hidden&&t.push(s),this.sortSubcommands&&t.sort((o,n)=>o.name().localeCompare(n.name())),t}compareOptions(e,t){let s=o=>o.short?o.short.replace(/^-/,""):o.long.replace(/^--/,"");return s(e).localeCompare(s(t))}visibleOptions(e){let t=e.options.filter(o=>!o.hidden),s=e._getHelpOption();if(s&&!s.hidden){let o=s.short&&e._findOption(s.short),n=s.long&&e._findOption(s.long);!o&&!n?t.push(s):s.long&&!n?t.push(e.createOption(s.long,s.description)):s.short&&!o&&t.push(e.createOption(s.short,s.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let s=e.parent;s;s=s.parent){let o=s.options.filter(n=>!n.hidden);t.push(...o)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(s=>Ac(s)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(o)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleOptionTerm(t.optionTerm(o)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleOptionTerm(t.optionTerm(o)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(o)))),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let s="";for(let o=e.parent;o;o=o.parent)s=o.name()+" "+s;return s+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0){let s=`(${t.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let s=`(${t.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}formatItemList(e,t,s){return t.length===0?[]:[s.styleTitle(e),...t,""]}groupItems(e,t,s){let o=new Map;return e.forEach(n=>{let i=s(n);o.has(i)||o.set(i,[])}),t.forEach(n=>{let i=s(n);o.has(i)||o.set(i,[]),o.get(i).push(n)}),o}formatHelp(e,t){let s=t.padWidth(e,t),o=t.helpWidth??80;function n(p,m){return t.formatItem(p,s,m,t)}let i=[`${t.styleTitle("Usage:")} ${t.styleUsage(t.commandUsage(e))}`,""],a=t.commandDescription(e);a.length>0&&(i=i.concat([t.boxWrap(t.styleCommandDescription(a),o),""]));let c=t.visibleArguments(e).map(p=>n(t.styleArgumentTerm(t.argumentTerm(p)),t.styleArgumentDescription(t.argumentDescription(p))));if(i=i.concat(this.formatItemList("Arguments:",c,t)),this.groupItems(e.options,t.visibleOptions(e),p=>p.helpGroupHeading??"Options:").forEach((p,m)=>{let w=p.map(g=>n(t.styleOptionTerm(t.optionTerm(g)),t.styleOptionDescription(t.optionDescription(g))));i=i.concat(this.formatItemList(m,w,t))}),t.showGlobalOptions){let p=t.visibleGlobalOptions(e).map(m=>n(t.styleOptionTerm(t.optionTerm(m)),t.styleOptionDescription(t.optionDescription(m))));i=i.concat(this.formatItemList("Global Options:",p,t))}return this.groupItems(e.commands,t.visibleCommands(e),p=>p.helpGroup()||"Commands:").forEach((p,m)=>{let w=p.map(g=>n(t.styleSubcommandTerm(t.subcommandTerm(g)),t.styleSubcommandDescription(t.subcommandDescription(g))));i=i.concat(this.formatItemList(m,w,t))}),i.join(`
|
|
3
|
+
`)}displayWidth(e){return en(e).length}styleTitle(e){return e}styleUsage(e){return e.split(" ").map(t=>t==="[options]"?this.styleOptionText(t):t==="[command]"?this.styleSubcommandText(t):t[0]==="["||t[0]==="<"?this.styleArgumentText(t):this.styleCommandText(t)).join(" ")}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(" ").map(t=>t==="[options]"?this.styleOptionText(t):t[0]==="["||t[0]==="<"?this.styleArgumentText(t):this.styleSubcommandText(t)).join(" ")}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,t,s,o){let i=" ".repeat(2);if(!s)return i+e;let a=e.padEnd(t+e.length-o.displayWidth(e)),c=2,d=(this.helpWidth??80)-t-c-2,p;return d<this.minWidthToWrap||o.preformatted(s)?p=s:p=o.boxWrap(s,d).replace(/\n/g,`
|
|
4
|
+
`+" ".repeat(t+c)),i+a+" ".repeat(c)+p.replace(/\n/g,`
|
|
5
|
+
${i}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let s=e.split(/\r\n|\n/),o=/[\s]*[^\s]+/g,n=[];return s.forEach(i=>{let a=i.match(o);if(a===null){n.push("");return}let c=[a.shift()],l=this.displayWidth(c[0]);a.forEach(d=>{let p=this.displayWidth(d);if(l+p<=t){c.push(d),l+=p;return}n.push(c.join(""));let m=d.trimStart();c=[m],l=this.displayWidth(m)}),n.push(c.join(""))}),n.join(`
|
|
6
|
+
`)}};function en(r){let e=/\x1b\[\d*(;\d*)*m/g;return r.replace(e,"")}Er.Help=wr;Er.stripColor=en});var Pr=Je(Cr=>{var{InvalidArgumentError:Oc}=Ut(),Tr=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let s=Gc(e);this.short=s.shortFlag,this.long=s.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,s)=>{if(!this.argChoices.includes(t))throw new Oc(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(t,s):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?tn(this.name().replace(/^no-/,"")):tn(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Sr=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,s)=>{this.positiveOptions.has(s)&&this.dualOptions.add(s)})}valueFromOption(e,t){let s=t.attributeName();if(!this.dualOptions.has(s))return!0;let o=this.negativeOptions.get(s).presetArg,n=o!==void 0?o:!1;return t.negate===(n===e)}};function tn(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Gc(r){let e,t,s=/^-[^-]$/,o=/^--[^-]/,n=r.split(/[ |,]+/).concat("guard");if(s.test(n[0])&&(e=n.shift()),o.test(n[0])&&(t=n.shift()),!e&&s.test(n[0])&&(e=n.shift()),!e&&o.test(n[0])&&(e=t,t=n.shift()),n[0].startsWith("-")){let i=n[0],a=`option creation failed due to '${i}' in option flags '${r}'`;throw/^-[^-][^-]/.test(i)?new Error(`${a}
|
|
7
7
|
- a short flag is a single dash and a single character
|
|
8
8
|
- either use a single dash and a single character (for a short flag)
|
|
9
9
|
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):s.test(i)?new Error(`${a}
|
|
10
10
|
- too many short flags`):o.test(i)?new Error(`${a}
|
|
11
11
|
- too many long flags`):new Error(`${a}
|
|
12
|
-
- unrecognised flag format`)}if(e===void 0&&t===void 0)throw new Error(`option creation failed due to no flags found in '${r}'.`);return{shortFlag:e,longFlag:t}}
|
|
12
|
+
- unrecognised flag format`)}if(e===void 0&&t===void 0)throw new Error(`option creation failed due to no flags found in '${r}'.`);return{shortFlag:e,longFlag:t}}Cr.Option=Tr;Cr.DualOptions=Sr});var rn=Je(sn=>{function xc(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let s=0;s<=r.length;s++)t[s]=[s];for(let s=0;s<=e.length;s++)t[0][s]=s;for(let s=1;s<=e.length;s++)for(let o=1;o<=r.length;o++){let n=1;r[o-1]===e[s-1]?n=0:n=1,t[o][s]=Math.min(t[o-1][s]+1,t[o][s-1]+1,t[o-1][s-1]+n),o>1&&s>1&&r[o-1]===e[s-2]&&r[o-2]===e[s-1]&&(t[o][s]=Math.min(t[o][s],t[o-2][s-2]+1))}return t[r.length][e.length]}function $c(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.slice(2),e=e.map(i=>i.slice(2)));let s=[],o=3,n=.4;return e.forEach(i=>{if(i.length<=1)return;let a=xc(r,i),c=Math.max(r.length,i.length);(c-a)/c>n&&(a<o?(o=a,s=[i]):a===o&&s.push(i))}),s.sort((i,a)=>i.localeCompare(a)),t&&(s=s.map(i=>`--${i}`)),s.length>1?`
|
|
13
13
|
(Did you mean one of ${s.join(", ")}?)`:s.length===1?`
|
|
14
|
-
(Did you mean ${s[0]}?)`:""}
|
|
15
|
-
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new
|
|
16
|
-
Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,s){this._exitCallback&&this._exitCallback(new
|
|
17
|
-
- already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),s=t(e).find(o=>this._findCommand(o));if(s){let o=t(this._findCommand(s)).join("|"),n=t(e).join("|");throw new Error(`cannot add command '${n}' as already have command '${o}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),s=e.attributeName();if(e.negate){let n=e.long.replace(/^--no-/,"--");this._findOption(n)||this.setOptionValueWithSource(s,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(s,e.defaultValue,"default");let o=(n,i,a)=>{n==null&&e.presetArg!==void 0&&(n=e.presetArg);let c=this.getOptionValue(s);n!==null&&e.parseArg?n=this._callParseArg(e,n,c,i):n!==null&&e.variadic&&(n=e._collectValue(n,c)),n==null&&(e.negate?n=!1:e.isBoolean()||e.optional?n=!0:n=""),this.setOptionValueWithSource(s,n,a)};return this.on("option:"+t,n=>{let i=`error: option '${e.flags}' argument '${n}' is invalid.`;o(n,i,"cli")}),e.envVar&&this.on("optionEnv:"+t,n=>{let i=`error: option '${e.flags}' value '${n}' from env '${e.envVar}' is invalid.`;o(n,i,"env")}),this}_optionEx(e,t,s,o,n){if(typeof t=="object"&&t instanceof
|
|
18
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,s){if(
|
|
14
|
+
(Did you mean ${s[0]}?)`:""}sn.suggestSimilar=$c});var cn=Je(xr=>{var Dc=require("node:events").EventEmitter,kr=require("node:child_process"),Ke=require("node:path"),gs=require("node:fs"),V=require("node:process"),{Argument:Ic,humanReadableArgName:Fc}=ps(),{CommanderError:Ar}=Ut(),{Help:Uc,stripColor:Mc}=Rr(),{Option:on,DualOptions:Lc}=Pr(),{suggestSimilar:nn}=rn(),Or=class r extends Dc{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:t=>V.stdout.write(t),writeErr:t=>V.stderr.write(t),outputError:(t,s)=>s(t),getOutHelpWidth:()=>V.stdout.isTTY?V.stdout.columns:void 0,getErrHelpWidth:()=>V.stderr.isTTY?V.stderr.columns:void 0,getOutHasColors:()=>Gr()??(V.stdout.isTTY&&V.stdout.hasColors?.()),getErrHasColors:()=>Gr()??(V.stderr.isTTY&&V.stderr.hasColors?.()),stripColor:t=>Mc(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,s){let o=t,n=s;typeof o=="object"&&o!==null&&(n=o,o=null),n=n||{};let[,i,a]=e.match(/([^ ]+) *(.*)/),c=this.createCommand(i);return o&&(c.description(o),c._executableHandler=!0),n.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(n.noHelp||n.hidden),c._executableFile=n.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),o?this:c}createCommand(e){return new r(e)}createHelp(){return Object.assign(new Uc,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...e},this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
15
|
+
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new Ic(e,t)}argument(e,t,s,o){let n=this.createArgument(e,t);return typeof s=="function"?n.default(o).argParser(s):n.default(s),this.addArgument(n),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t?.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let s=e??"help [command]",[,o,n]=s.match(/([^ ]+) *(.*)/),i=t??"display help for command",a=this.createCommand(o);return a.helpOption(!1),n&&a.arguments(n),i&&a.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=a,(e||t)&&this._initCommandGroup(a),this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let s=["preSubcommand","preAction","postAction"];if(!s.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
16
|
+
Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,s){this._exitCallback&&this._exitCallback(new Ar(e,t,s)),V.exit(e)}action(e){let t=s=>{let o=this.registeredArguments.length,n=s.slice(0,o);return this._storeOptionsAsProperties?n[o]=this:n[o]=this.opts(),n.push(this),e.apply(this,n)};return this._actionHandler=t,this}createOption(e,t){return new on(e,t)}_callParseArg(e,t,s,o){try{return e.parseArg(t,s)}catch(n){if(n.code==="commander.invalidArgument"){let i=`${o} ${n.message}`;this.error(i,{exitCode:n.exitCode,code:n.code})}throw n}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let s=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${s}'
|
|
17
|
+
- already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),s=t(e).find(o=>this._findCommand(o));if(s){let o=t(this._findCommand(s)).join("|"),n=t(e).join("|");throw new Error(`cannot add command '${n}' as already have command '${o}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),s=e.attributeName();if(e.negate){let n=e.long.replace(/^--no-/,"--");this._findOption(n)||this.setOptionValueWithSource(s,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(s,e.defaultValue,"default");let o=(n,i,a)=>{n==null&&e.presetArg!==void 0&&(n=e.presetArg);let c=this.getOptionValue(s);n!==null&&e.parseArg?n=this._callParseArg(e,n,c,i):n!==null&&e.variadic&&(n=e._collectValue(n,c)),n==null&&(e.negate?n=!1:e.isBoolean()||e.optional?n=!0:n=""),this.setOptionValueWithSource(s,n,a)};return this.on("option:"+t,n=>{let i=`error: option '${e.flags}' argument '${n}' is invalid.`;o(n,i,"cli")}),e.envVar&&this.on("optionEnv:"+t,n=>{let i=`error: option '${e.flags}' value '${n}' from env '${e.envVar}' is invalid.`;o(n,i,"env")}),this}_optionEx(e,t,s,o,n){if(typeof t=="object"&&t instanceof on)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let i=this.createOption(t,s);if(i.makeOptionMandatory(!!e.mandatory),typeof o=="function")i.default(n).argParser(o);else if(o instanceof RegExp){let a=o;o=(c,l)=>{let d=a.exec(c);return d?d[0]:l},i.default(n).argParser(o)}else i.default(o);return this.addOption(i)}option(e,t,s,o){return this._optionEx({},e,t,s,o)}requiredOption(e,t,s,o){return this._optionEx({mandatory:!0},e,t,s,o)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,s){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=s,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(s=>{s.getOptionValueSource(e)!==void 0&&(t=s.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){V.versions?.electron&&(t.from="electron");let o=V.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(t.from="eval")}e===void 0&&(e=V.argv),this.rawArgs=e.slice();let s;switch(t.from){case void 0:case"node":this._scriptPath=e[1],s=e.slice(2);break;case"electron":V.defaultApp?(this._scriptPath=e[1],s=e.slice(2)):s=e.slice(1);break;case"user":s=e.slice(0);break;case"eval":s=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",s}parse(e,t){this._prepareForParse();let s=this._prepareUserArgs(e,t);return this._parseCommand([],s),this}async parseAsync(e,t){this._prepareForParse();let s=this._prepareUserArgs(e,t);return await this._parseCommand([],s),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
18
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,s){if(gs.existsSync(e))return;let o=t?`searched for local subcommand relative to directory '${t}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",n=`'${e}' does not exist
|
|
19
19
|
- if '${s}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
20
20
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
21
|
-
- ${o}`;throw new Error(n)}_executeSubCommand(e,t){t=t.slice();let s=!1,o=[".js",".ts",".tsx",".mjs",".cjs"];function n(p
|
|
21
|
+
- ${o}`;throw new Error(n)}_executeSubCommand(e,t){t=t.slice();let s=!1,o=[".js",".ts",".tsx",".mjs",".cjs"];function n(d,p){let m=Ke.resolve(d,p);if(gs.existsSync(m))return m;if(o.includes(Ke.extname(p)))return;let w=o.find(g=>gs.existsSync(`${m}${g}`));if(w)return`${m}${w}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let d;try{d=gs.realpathSync(this._scriptPath)}catch{d=this._scriptPath}a=Ke.resolve(Ke.dirname(d),a)}if(a){let d=n(a,i);if(!d&&!e._executableFile&&this._scriptPath){let p=Ke.basename(this._scriptPath,Ke.extname(this._scriptPath));p!==this._name&&(d=n(a,`${p}-${e._name}`))}i=d||i}s=o.includes(Ke.extname(i));let c;V.platform!=="win32"?s?(t.unshift(i),t=an(V.execArgv).concat(t),c=kr.spawn(V.argv[0],t,{stdio:"inherit"})):c=kr.spawn(i,t,{stdio:"inherit"}):(this._checkForMissingExecutable(i,a,e._name),t.unshift(i),t=an(V.execArgv).concat(t),c=kr.spawn(V.execPath,t,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{V.on(p,()=>{c.killed===!1&&c.exitCode===null&&c.kill(p)})});let l=this._exitCallback;c.on("close",d=>{d=d??1,l?l(new Ar(d,"commander.executeSubCommandAsync","(close)")):V.exit(d)}),c.on("error",d=>{if(d.code==="ENOENT")this._checkForMissingExecutable(i,a,e._name);else if(d.code==="EACCES")throw new Error(`'${i}' not executable`);if(!l)V.exit(1);else{let p=new Ar(1,"commander.executeSubCommandAsync","(error)");p.nestedError=d,l(p)}}),this.runningCommand=c}_dispatchSubcommand(e,t,s){let o=this._findCommand(e);o||this.help({error:!0}),o._prepareForParse();let n;return n=this._chainOrCallSubCommandHook(n,o,"preSubcommand"),n=this._chainOrCall(n,()=>{if(o._executableHandler)this._executeSubCommand(o,t.concat(s));else return o._parseCommand(t,s)}),n}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(s,o,n)=>{let i=o;if(o!==null&&s.parseArg){let a=`error: command-argument value '${o}' is invalid for argument '${s.name()}'.`;i=this._callParseArg(s,o,n,a)}return i};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((s,o)=>{let n=s.defaultValue;s.variadic?o<this.args.length?(n=this.args.slice(o),s.parseArg&&(n=n.reduce((i,a)=>e(s,a,i),s.defaultValue))):n===void 0&&(n=[]):o<this.args.length&&(n=this.args[o],s.parseArg&&(n=e(s,n,s.defaultValue))),t[o]=n}),this.processedArgs=t}_chainOrCall(e,t){return e?.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let s=e,o=[];return this._getCommandAndAncestors().reverse().filter(n=>n._lifeCycleHooks[t]!==void 0).forEach(n=>{n._lifeCycleHooks[t].forEach(i=>{o.push({hookedCommand:n,callback:i})})}),t==="postAction"&&o.reverse(),o.forEach(n=>{s=this._chainOrCall(s,()=>n.callback(n.hookedCommand,this))}),s}_chainOrCallSubCommandHook(e,t,s){let o=e;return this._lifeCycleHooks[s]!==void 0&&this._lifeCycleHooks[s].forEach(n=>{o=this._chainOrCall(o,()=>n(this,t))}),o}_parseCommand(e,t){let s=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(s.operands),t=s.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(s.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=()=>{s.unknown.length>0&&this.unknownOption(s.unknown[0])},n=`command:${this.name()}`;if(this._actionHandler){o(),this._processArguments();let i;return i=this._chainOrCallHooks(i,"preAction"),i=this._chainOrCall(i,()=>this._actionHandler(this.processedArgs)),this.parent&&(i=this._chainOrCall(i,()=>{this.parent.emit(n,e,t)})),i=this._chainOrCallHooks(i,"postAction"),i}if(this.parent?.listenerCount(n))o(),this._processArguments(),this.parent.emit(n,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(o(),this._processArguments())}else this.commands.length?(o(),this.help({error:!0})):(o(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(s=>{let o=s.attributeName();return this.getOptionValue(o)===void 0?!1:this.getOptionValueSource(o)!=="default"});e.filter(s=>s.conflictsWith.length>0).forEach(s=>{let o=e.find(n=>s.conflictsWith.includes(n.attributeName()));o&&this._conflictingOption(s,o)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],s=[],o=t;function n(d){return d.length>1&&d[0]==="-"}let i=d=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(d)?!this._getCommandAndAncestors().some(p=>p.options.map(m=>m.short).some(m=>/^-\d$/.test(m))):!1,a=null,c=null,l=0;for(;l<e.length||c;){let d=c??e[l++];if(c=null,d==="--"){o===s&&o.push(d),o.push(...e.slice(l));break}if(a&&(!n(d)||i(d))){this.emit(`option:${a.name()}`,d);continue}if(a=null,n(d)){let p=this._findOption(d);if(p){if(p.required){let m=e[l++];m===void 0&&this.optionMissingArgument(p),this.emit(`option:${p.name()}`,m)}else if(p.optional){let m=null;l<e.length&&(!n(e[l])||i(e[l]))&&(m=e[l++]),this.emit(`option:${p.name()}`,m)}else this.emit(`option:${p.name()}`);a=p.variadic?p:null;continue}}if(d.length>2&&d[0]==="-"&&d[1]!=="-"){let p=this._findOption(`-${d[1]}`);if(p){p.required||p.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${p.name()}`,d.slice(2)):(this.emit(`option:${p.name()}`),c=`-${d.slice(2)}`);continue}}if(/^--[^=]+=/.test(d)){let p=d.indexOf("="),m=this._findOption(d.slice(0,p));if(m&&(m.required||m.optional)){this.emit(`option:${m.name()}`,d.slice(p+1));continue}}if(o===t&&n(d)&&!(this.commands.length===0&&i(d))&&(o=s),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&s.length===0){if(this._findCommand(d)){t.push(d),s.push(...e.slice(l));break}else if(this._getHelpCommand()&&d===this._getHelpCommand().name()){t.push(d,...e.slice(l));break}else if(this._defaultCommandName){s.push(d,...e.slice(l));break}}if(this._passThroughOptions){o.push(d,...e.slice(l));break}o.push(d)}return{operands:t,unknown:s}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let s=0;s<t;s++){let o=this.options[s].attributeName();e[o]=o===this._versionOptionName?this._version:this[o]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
|
|
22
22
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
23
23
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
24
|
-
`),this.outputHelp({error:!0}));let s=t||{},o=s.exitCode||1,n=s.code||"commander.error";this._exit(o,n,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in V.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,V.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new
|
|
25
|
-
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(e);if(s){let o=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(s=>
|
|
24
|
+
`),this.outputHelp({error:!0}));let s=t||{},o=s.exitCode||1,n=s.code||"commander.error";this._exit(o,n,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in V.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,V.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Lc(this.options),t=s=>this.getOptionValue(s)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(s));this.options.filter(s=>s.implied!==void 0&&t(s.attributeName())&&e.valueFromOption(this.getOptionValue(s.attributeName()),s)).forEach(s=>{Object.keys(s.implied).filter(o=>!t(o)).forEach(o=>{this.setOptionValueWithSource(o,s.implied[o],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let s=i=>{let a=i.attributeName(),c=this.getOptionValue(a),l=this.options.find(p=>p.negate&&a===p.attributeName()),d=this.options.find(p=>!p.negate&&a===p.attributeName());return l&&(l.presetArg===void 0&&c===!1||l.presetArg!==void 0&&c===l.presetArg)?l:d||i},o=i=>{let a=s(i),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},n=`error: ${o(e)} cannot be used with ${o(t)}`;this.error(n,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let o=[],n=this;do{let i=n.createHelp().visibleOptions(n).filter(a=>a.long).map(a=>a.long);o=o.concat(i),n=n.parent}while(n&&!n._enablePositionalOptions);t=nn(e,o)}let s=`error: unknown option '${e}'${t}`;this.error(s,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,s=t===1?"":"s",n=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${s} but got ${e.length}.`;this.error(n,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let o=[];this.createHelp().visibleCommands(this).forEach(n=>{o.push(n.name()),n.alias()&&o.push(n.alias())}),t=nn(e,o)}let s=`error: unknown command '${e}'${t}`;this.error(s,{code:"commander.unknownCommand"})}version(e,t,s){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",s=s||"output the version number";let o=this.createOption(t,s);return this._versionOptionName=o.attributeName(),this._registerOption(o),this.on("option:"+o.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
25
|
+
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(e);if(s){let o=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(s=>Fc(s));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=Ke.basename(e,Ke.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),s=this._getOutputContext(e);t.prepareContext({error:s.error,helpWidth:s.helpWidth,outputHasColors:s.hasColors});let o=t.formatHelp(this,t);return s.hasColors?o:this._outputConfiguration.stripColor(o)}_getOutputContext(e){e=e||{};let t=!!e.error,s,o,n;return t?(s=a=>this._outputConfiguration.writeErr(a),o=this._outputConfiguration.getErrHasColors(),n=this._outputConfiguration.getErrHelpWidth()):(s=a=>this._outputConfiguration.writeOut(a),o=this._outputConfiguration.getOutHasColors(),n=this._outputConfiguration.getOutHelpWidth()),{error:t,write:a=>(o||(a=this._outputConfiguration.stripColor(a)),s(a)),hasColors:o,helpWidth:n}}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let s=this._getOutputContext(e),o={error:s.error,write:s.write,command:this};this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",o)),this.emit("beforeHelp",o);let n=this.helpInformation({error:s.error});if(t&&(n=t(n),typeof n!="string"&&!Buffer.isBuffer(n)))throw new Error("outputHelp callback must return a string or a Buffer");s.write(n),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",o),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",o))}helpOption(e,t){return typeof e=="boolean"?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??"-h, --help",t??"display help for command"),(e||t)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(V.exitCode??0);t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let s=["beforeAll","before","after","afterAll"];if(!s.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
26
26
|
Expecting one of '${s.join("', '")}'`);let o=`${e}Help`;return this.on(o,n=>{let i;typeof t=="function"?i=t({error:n.error,command:n.command}):i=t,i&&n.write(`${i}
|
|
27
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function
|
|
27
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function an(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,s="127.0.0.1",o="9229",n;return(n=e.match(/^(--inspect(-brk)?)$/))!==null?t=n[1]:(n=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=n[1],/^\d+$/.test(n[3])?o=n[3]:s=n[3]):(n=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=n[1],s=n[3],o=n[4]),t&&o!=="0"?`${t}=${s}:${parseInt(o)+1}`:e})}function Gr(){if(V.env.NO_COLOR||V.env.FORCE_COLOR==="0"||V.env.FORCE_COLOR==="false")return!1;if(V.env.FORCE_COLOR||V.env.CLICOLOR_FORCE!==void 0)return!0}xr.Command=Or;xr.useColor=Gr});var pn=Je(Oe=>{var{Argument:ln}=ps(),{Command:$r}=cn(),{CommanderError:jc,InvalidArgumentError:un}=Ut(),{Help:Nc}=Rr(),{Option:dn}=Pr();Oe.program=new $r;Oe.createCommand=r=>new $r(r);Oe.createOption=(r,e)=>new dn(r,e);Oe.createArgument=(r,e)=>new ln(r,e);Oe.Command=$r;Oe.Option=dn;Oe.Argument=ln;Oe.Help=Nc;Oe.CommanderError=jc;Oe.InvalidArgumentError=un;Oe.InvalidOptionArgumentError=un});function nt(r,e){return r!==void 0&&r<e}var dt,ms,pt=O(()=>{"use strict";dt={setupComplete:!1,maxActivePRs:10,dormantThresholdDays:30,approachingDormantDays:25,maxIssueAgeDays:90,languages:["typescript","javascript"],labels:["good first issue","help wanted"],excludeRepos:[],trustedProjects:[],githubUsername:"",minRepoScoreThreshold:4,starredRepos:[],squashByDefault:!0,minStars:50,includeDocIssues:!0,aiPolicyBlocklist:["matplotlib/matplotlib"],shelvedPRUrls:[],dismissedIssues:{},snoozedPRs:{}},ms={version:2,activeIssues:[],repoScores:{},config:dt,events:[],lastRunAt:new Date().toISOString()}});function A(r){return r instanceof Error?r.message:String(r)}function Ge(r){if(r&&typeof r=="object"&&"status"in r){let e=r.status;return typeof e=="number"&&Number.isFinite(e)?e:void 0}}function gt(r){let e=Ge(r);return e===429?!0:e===403?A(r).toLowerCase().includes("rate limit"):!1}function Ee(r){let e=Ge(r);if(e===401||e===429)return!0;if(e===403){let t=A(r).toLowerCase();return t.includes("rate limit")||t.includes("abuse detection")}return!1}var Mt,Ye,Y,ie=O(()=>{"use strict";Mt=class extends Error{constructor(t,s){super(t);this.code=s;this.name="OssAutopilotError"}},Ye=class extends Mt{constructor(e){super(e,"CONFIGURATION_ERROR"),this.name="ConfigurationError"}},Y=class extends Mt{constructor(e){super(e,"VALIDATION_ERROR"),this.name="ValidationError"}}});function Ir(){Dr=!0}function P(r,e,...t){if(!Dr)return;let s=new Date().toISOString();console.error(`[${s}] [DEBUG] [${r}] ${e}`,...t)}function ue(r,e,...t){let s=new Date().toISOString();console.error(`[${s}] [INFO] [${r}] ${e}`,...t)}function v(r,e,...t){let s=new Date().toISOString();console.error(`[${s}] [WARN] [${r}] ${e}`,...t)}async function Fr(r,e,t){if(!Dr)return t();let s=performance.now();try{let o=await t(),n=(performance.now()-s).toFixed(0);return P(r,`${e} completed in ${n}ms`),o}catch(o){let n=(performance.now()-s).toFixed(0);throw P(r,`${e} failed after ${n}ms`),o}}var Dr,me=O(()=>{"use strict";Dr=!1});var yn={};ne(yn,{DEFAULT_CONCURRENCY:()=>it,byDateDescending:()=>fn,daysBetween:()=>$e,extractOwnerRepo:()=>ht,formatRelativeTime:()=>_s,getBackupDir:()=>mt,getCLIVersion:()=>Be,getCacheDir:()=>bs,getDashboardPath:()=>ys,getDataDir:()=>xe,getGitHubToken:()=>Xe,getGitHubTokenAsync:()=>ws,getStatePath:()=>at,isOwnRepo:()=>ft,parseGitHubUrl:()=>ye,requireGitHubToken:()=>fe,resetGitHubTokenCache:()=>bn,splitRepo:()=>vs});function xe(){let r=Qe.join(hn.homedir(),".oss-autopilot");return qe.existsSync(r)||qe.mkdirSync(r,{recursive:!0,mode:448}),r}function at(){return Qe.join(xe(),"state.json")}function mt(){let r=Qe.join(xe(),"backups");return qe.existsSync(r)||qe.mkdirSync(r,{recursive:!0,mode:448}),r}function bs(){let r=Qe.join(xe(),"cache");return qe.existsSync(r)||qe.mkdirSync(r,{recursive:!0,mode:448}),r}function ys(){return Qe.join(xe(),"dashboard.html")}function Ur(r,e){return Hc.test(r)&&qc.test(e)}function ye(r){if(!r.startsWith("https://github.com/"))return null;let e=r.match(/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);if(e){let s=e[1],o=e[2];return Ur(s,o)?{owner:s,repo:o,number:parseInt(e[3],10),type:"pull"}:null}let t=r.match(/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)/);if(t){let s=t[1],o=t[2];return Ur(s,o)?{owner:s,repo:o,number:parseInt(t[3],10),type:"issues"}:null}return null}function ht(r){if(!r.startsWith("https://github.com/"))return null;let e=r.match(/github\.com\/([^/]+)\/([^/]+)/);if(!e)return null;let t=e[1],s=e[2];return Ur(t,s)?{owner:t,repo:s}:null}function $e(r,e=new Date){return Math.max(0,Math.floor((e.getTime()-r.getTime())/(1e3*60*60*24)))}function vs(r){let[e,t]=r.split("/");if(!e||!t)throw new Error(`Invalid repo format: expected "owner/repo", got "${r}"`);return{owner:e,repo:t}}function ft(r,e){return r.toLowerCase()===e.toLowerCase()}function Be(){try{let r=Qe.join(Qe.dirname(process.argv[1]),"..","package.json");return JSON.parse(qe.readFileSync(r,"utf-8")).version}catch{return"0.0.0"}}function _s(r){let e=new Date(r),t=Date.now()-e.getTime();if(t<0)return"just now";let s=Math.floor(t/6e4),o=Math.floor(t/36e5),n=Math.floor(t/864e5);return s<60?`${s}m ago`:o<24?`${o}h ago`:n<30?`${n}d ago`:e.toLocaleDateString()}function fn(r){return(e,t)=>{let s=new Date(r(e)||0).getTime();return new Date(r(t)||0).getTime()-s}}function Xe(){if(Re)return Re;if(Lt)return null;if(Lt=!0,process.env.GITHUB_TOKEN)return Re=process.env.GITHUB_TOKEN,Re;try{let r=(0,fs.execFileSync)("gh",["auth","token"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],timeout:2e3}).trim();if(r&&r.length>0)return Re=r,P(hs,"Using GitHub token from gh CLI"),Re}catch(r){P(hs,"gh auth token failed (CLI unavailable or not authenticated)",r)}return null}function fe(){let r=Xe();if(!r)throw new Ye(`GitHub authentication required.
|
|
28
28
|
|
|
29
29
|
Options:
|
|
30
30
|
1. Use gh CLI: gh auth login
|
|
31
31
|
2. Set GITHUB_TOKEN environment variable
|
|
32
32
|
|
|
33
|
-
The gh CLI is recommended - install from https://cli.github.com`);return r}function un(){Te=null,Ut=!1}async function bs(){if(Te)return Te;if(Ut)return null;if(Ut=!0,process.env.GITHUB_TOKEN)return Te=process.env.GITHUB_TOKEN,Te;try{let r=await new Promise((e,t)=>{(0,ds.execFile)("gh",["auth","token"],{encoding:"utf-8",timeout:2e3},(s,o)=>{s?t(s):e(o.trim())})});if(r&&r.length>0)return Te=r,P(ps,"Using GitHub token from gh CLI (async)"),Te}catch(r){P(ps,"gh auth token failed (CLI unavailable or not authenticated)",r)}return null}var He,Ke,cn,ds,ps,Te,Ut,Oc,$c,Ce=O(()=>{"use strict";He=Q(require("fs"),1),Ke=Q(require("path"),1),cn=Q(require("os"),1),ds=require("child_process");ie();ye();ps="utils",Te=null,Ut=!1;Oc=/^[a-zA-Z0-9_-]+$/,$c=/^[a-zA-Z0-9_.-]+$/});function Ic(r){try{let e=JSON.parse(M.readFileSync(r,"utf-8"));return Date.now()-e.timestamp>Dc}catch(e){return P(F,"Lock file unreadable or invalid JSON, treating as stale",e),!0}}function Fc(r){let e=JSON.stringify({pid:process.pid,timestamp:Date.now()});try{M.writeFileSync(r,e,{flag:"wx"});return}catch(t){P(F,"Lock file already exists, checking staleness",t)}if(!Ic(r))throw new Error("State file is locked by another process");try{M.unlinkSync(r)}catch(t){P(F,"Stale lock already removed by another process",t)}try{M.writeFileSync(r,e,{flag:"wx"})}catch(t){throw P(F,"Lock re-acquire failed (race condition)",t),new Error("State file is locked by another process",{cause:t})}}function Uc(r){try{JSON.parse(M.readFileSync(r,"utf-8")).pid===process.pid&&M.unlinkSync(r)}catch(e){P(F,"Lock file already removed or unreadable during release",e)}}function Dr(r,e,t){let s=r+".tmp";M.writeFileSync(s,e,{mode:t??384}),M.renameSync(s,r),t!==void 0&&M.chmodSync(r,t)}function gn(r){P(F,"Migrating state from v1 to v2 (fresh GitHub fetching)...");let e=r.mergedPRs||[],t=r.closedPRs||[],s={...r.repoScores||{}};for(let n of e)s[n.repo]||(s[n.repo]={repo:n.repo,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}});for(let n of t)s[n.repo]||(s[n.repo]={repo:n.repo,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}});let o={version:2,activeIssues:r.activeIssues||[],repoScores:s,config:r.config,events:r.events||[],lastRunAt:new Date().toISOString()};return P(F,`Migration complete. Preserved ${Object.keys(s).length} repo scores.`),o}function L(){return Ir||(Ir=new ys),Ir}var M,Ie,F,Gc,dn,xc,Dc,Mt,dt,ys,Ir,Lt=O(()=>{"use strict";M=Q(require("fs"),1),Ie=Q(require("path"),1);us();Ce();ie();ye();F="state",Gc=2,dn=1e3,xc=720*60*60*1e3,Dc=3e4,Mt=Ie.join(process.cwd(),"data","state.json"),dt=Ie.join(process.cwd(),"data","backups");ys=class r{state;inMemoryOnly;constructor(e=!1){this.inMemoryOnly=e,this.state=e?this.createFreshState():this.load()}createFreshState(){return{version:Gc,activeIssues:[],repoScores:{},config:{...ls.config,setupComplete:!1,languages:[...ls.config.languages],labels:[...ls.config.labels],excludeRepos:[],trustedProjects:[],shelvedPRUrls:[],dismissedIssues:{},snoozedPRs:{}},events:[],lastRunAt:new Date().toISOString()}}isSetupComplete(){return this.state.config.setupComplete===!0}markSetupComplete(){this.state.config.setupComplete=!0,this.state.config.setupCompletedAt=new Date().toISOString()}migrateFromLegacyLocation(){let e=rt();if(M.existsSync(e)||!M.existsSync(Mt))return!1;P(F,"Migrating state from ./data/ to ~/.oss-autopilot/...");try{if(Oe(),M.copyFileSync(Mt,e),P(F,`Migrated state file to ${e}`),M.existsSync(dt)){let s=lt(),o=M.readdirSync(dt).filter(n=>n.startsWith("state-")&&n.endsWith(".json"));for(let n of o){let i=Ie.join(dt,n),a=Ie.join(s,n);M.copyFileSync(i,a)}P(F,`Migrated ${o.length} backup files`)}if(M.unlinkSync(Mt),P(F,"Removed legacy state file"),M.existsSync(dt)){let s=M.readdirSync(dt);for(let o of s)M.unlinkSync(Ie.join(dt,o));M.rmdirSync(dt)}let t=Ie.dirname(Mt);return M.existsSync(t)&&M.readdirSync(t).length===0&&(M.rmdirSync(t),P(F,"Removed empty legacy data directory")),P(F,"Migration complete!"),!0}catch(t){T(F,`Failed to migrate state: ${A(t)}`);let s=rt();if(M.existsSync(s)&&M.existsSync(Mt))try{M.unlinkSync(s),P(F,"Cleaned up partial migration - removed incomplete new state file")}catch(o){T(F,"Could not clean up partial migration file"),P(F,"Partial migration cleanup failed",o)}return T(F,"To resolve this issue:"),T(F," 1. Ensure you have write permissions to ~/.oss-autopilot/"),T(F," 2. Check available disk space"),T(F," 3. Manually copy ./data/state.json to ~/.oss-autopilot/state.json"),T(F," 4. Or delete ./data/state.json to start fresh"),!1}}load(){this.migrateFromLegacyLocation();let e=rt();try{if(M.existsSync(e)){let t=M.readFileSync(e,"utf-8"),s=JSON.parse(t);if(!this.isValidState(s)){T(F,"Invalid state file structure, attempting to restore from backup...");let n=this.tryRestoreFromBackup();return n||(T(F,"No valid backup found, starting fresh"),this.createFreshState())}s.version===1&&(s=gn(s),Dr(e,JSON.stringify(s,null,2),384),P(F,"Migrated state saved"));let o=Object.keys(s.repoScores).length;return P(F,`Loaded state v${s.version}: ${o} repo scores tracked`),s}}catch(t){T(F,"Error loading state:",t),T(F,"Attempting to restore from backup...");let s=this.tryRestoreFromBackup();if(s)return s;T(F,"No valid backup found, starting fresh")}return P(F,"No existing state found, initializing..."),this.createFreshState()}tryRestoreFromBackup(){let e=lt();if(!M.existsSync(e))return null;let t=M.readdirSync(e).filter(s=>s.startsWith("state-")&&s.endsWith(".json")).sort().reverse();for(let s of t){let o=Ie.join(e,s);try{let n=M.readFileSync(o,"utf-8"),i=JSON.parse(n);if(this.isValidState(i)){P(F,`Successfully restored state from backup: ${s}`),i.version===1&&(i=gn(i));let a=Object.keys(i.repoScores).length;P(F,`Restored state v${i.version}: ${a} repo scores`);let c=rt();return Dr(c,JSON.stringify(i,null,2),384),P(F,"Restored backup written to main state file"),i}}catch(n){T(F,`Backup ${s} is corrupted, trying next...`),P(F,`Backup ${s} parse failed`,n)}}return null}isValidState(e){if(!e||typeof e!="object")return!1;let t=e;return t.repoScores===void 0&&(t.repoScores={}),t.events===void 0&&(t.events=[]),typeof t.version=="number"&&typeof t.repoScores=="object"&&t.repoScores!==null&&Array.isArray(t.events)&&typeof t.config=="object"&&t.config!==null?t.version===1?Array.isArray(t.activePRs)&&Array.isArray(t.dormantPRs)&&Array.isArray(t.mergedPRs)&&Array.isArray(t.closedPRs):!0:!1}save(){if(this.state.lastRunAt=new Date().toISOString(),this.inMemoryOnly)return;let e=rt(),t=e+".lock",s=lt();Fc(t);try{if(M.existsSync(e)){let o=new Date().toISOString().replace(/[:.]/g,"-"),n=Math.random().toString(36).slice(2,8).padEnd(6,"0"),i=Ie.join(s,`state-${o}-${n}.json`);M.copyFileSync(e,i),M.chmodSync(i,384),this.cleanupBackups()}Dr(e,JSON.stringify(this.state,null,2),384),P(F,"State saved successfully")}finally{Uc(t)}}cleanupBackups(){let e=lt();try{let t=M.readdirSync(e).filter(s=>s.startsWith("state-")).sort().reverse();for(let s of t.slice(10))try{M.unlinkSync(Ie.join(e,s))}catch(o){T(F,`Could not delete old backup ${s}:`,A(o))}}catch(t){T(F,"Could not clean up backups:",A(t))}}getState(){return this.state}setLastDigest(e){this.state.lastDigest=e,this.state.lastDigestAt=e.generatedAt}setMonthlyMergedCounts(e){this.state.monthlyMergedCounts=e}setMonthlyClosedCounts(e){this.state.monthlyClosedCounts=e}setMonthlyOpenedCounts(e){this.state.monthlyOpenedCounts=e}setDailyActivityCounts(e){this.state.dailyActivityCounts=e}setLocalRepoCache(e){this.state.localRepoCache=e}updateConfig(e){this.state.config={...this.state.config,...e}}appendEvent(e,t){let s={id:`evt_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,type:e,at:new Date().toISOString(),data:t};this.state.events.push(s),this.state.events.length>dn&&(this.state.events=this.state.events.slice(-dn))}getEventsByType(e){return this.state.events.filter(t=>t.type===e)}getEventsInRange(e,t=new Date){return this.state.events.filter(s=>{let o=new Date(s.at);return o>=e&&o<=t})}addIssue(e){if(this.state.activeIssues.find(s=>s.url===e.url)){P(F,`Issue ${e.url} already tracked`);return}this.state.activeIssues.push(e),P(F,`Added issue: ${e.repo}#${e.number}`)}addTrustedProject(e){this.state.config.trustedProjects.includes(e)||(this.state.config.trustedProjects.push(e),P(F,`Added trusted project: ${e}`))}static matchesExclusion(e,t,s){let o=e.toLowerCase();return!!(t.some(n=>n.toLowerCase()===o)||s?.some(n=>n.toLowerCase()===o.split("/")[0]))}isExcluded(e){let{excludeRepos:t,excludeOrgs:s}=this.state.config;return r.matchesExclusion(e,t,s)}cleanupExcludedData(e,t){let s=a=>r.matchesExclusion(a,e,t),o=this.state.config.trustedProjects.length;this.state.config.trustedProjects=this.state.config.trustedProjects.filter(a=>!s(a));let n=o-this.state.config.trustedProjects.length,i=0;for(let a of Object.keys(this.state.repoScores))s(a)&&(delete this.state.repoScores[a],i++);(n>0||i>0)&&P(F,`Removed ${n} trusted project(s) and ${i} repo score(s) for excluded repos/orgs`)}getStarredRepos(){return this.state.config.starredRepos||[]}setStarredRepos(e){this.state.config.starredRepos=e,this.state.config.starredReposLastFetched=new Date().toISOString(),P(F,`Updated starred repos: ${e.length} repositories`)}isStarredReposStale(){let e=this.state.config.starredReposLastFetched;if(!e)return!0;let t=1440*60*1e3,s=new Date(e);return new Date().getTime()-s.getTime()>t}shelvePR(e){return this.state.config.shelvedPRUrls||(this.state.config.shelvedPRUrls=[]),this.state.config.shelvedPRUrls.includes(e)?!1:(this.state.config.shelvedPRUrls.push(e),!0)}unshelvePR(e){if(!this.state.config.shelvedPRUrls)return!1;let t=this.state.config.shelvedPRUrls.indexOf(e);return t===-1?!1:(this.state.config.shelvedPRUrls.splice(t,1),!0)}isPRShelved(e){return this.state.config.shelvedPRUrls?.includes(e)??!1}dismissIssue(e,t){return this.state.config.dismissedIssues||(this.state.config.dismissedIssues={}),e in this.state.config.dismissedIssues?!1:(this.state.config.dismissedIssues[e]=t,!0)}undismissIssue(e){return!this.state.config.dismissedIssues||!(e in this.state.config.dismissedIssues)?!1:(delete this.state.config.dismissedIssues[e],!0)}getIssueDismissedAt(e){return this.state.config.dismissedIssues?.[e]}snoozePR(e,t,s){if(!Number.isFinite(s)||s<=0)throw new J(`Invalid snooze duration: ${s}. Must be a positive finite number.`);if(this.state.config.snoozedPRs||(this.state.config.snoozedPRs={}),e in this.state.config.snoozedPRs)return!1;let o=new Date,n=new Date(o.getTime()+s*24*60*60*1e3);return this.state.config.snoozedPRs[e]={reason:t,snoozedAt:o.toISOString(),expiresAt:n.toISOString()},!0}unsnoozePR(e){return!this.state.config.snoozedPRs||!(e in this.state.config.snoozedPRs)?!1:(delete this.state.config.snoozedPRs[e],!0)}isSnoozed(e){let t=this.getSnoozeInfo(e);if(!t)return!1;let s=new Date(t.expiresAt).getTime();return isNaN(s)?(T(F,`Invalid expiresAt for snoozed PR ${e}: "${t.expiresAt}". Treating as not snoozed.`),!1):s>Date.now()}getSnoozeInfo(e){return this.state.config.snoozedPRs?.[e]}expireSnoozes(){if(!this.state.config.snoozedPRs)return[];let e=[],t=Date.now();for(let[s,o]of Object.entries(this.state.config.snoozedPRs)){let n=new Date(o.expiresAt).getTime();(isNaN(n)||n<=t)&&e.push(s)}for(let s of e)delete this.state.config.snoozedPRs[s];return e}getRepoScore(e){return this.state.repoScores[e]}createDefaultRepoScore(e){return{repo:e,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}}}calculateScore(e){let t=5;if(e.mergedPRCount>0){let o=Math.min(Math.round(Math.log2(e.mergedPRCount+1)*2),5);t+=o}let s=Math.min(e.closedWithoutMergeCount,3);if(t-=s,e.lastMergedAt){let o=new Date(e.lastMergedAt);isNaN(o.getTime())?T(F,`Invalid lastMergedAt date for ${e.repo}: "${e.lastMergedAt}". Skipping recency bonus.`):Math.floor((Date.now()-o.getTime())/864e5)<=90&&(t+=1)}return e.signals.isResponsive&&(t+=1),e.signals.hasHostileComments&&(t-=2),Math.max(1,Math.min(10,t))}updateRepoScore(e,t){this.state.repoScores[e]||(this.state.repoScores[e]=this.createDefaultRepoScore(e));let s=this.state.repoScores[e];t.mergedPRCount!==void 0&&(s.mergedPRCount=t.mergedPRCount),t.closedWithoutMergeCount!==void 0&&(s.closedWithoutMergeCount=t.closedWithoutMergeCount),t.avgResponseDays!==void 0&&(s.avgResponseDays=t.avgResponseDays),t.lastMergedAt!==void 0&&(s.lastMergedAt=t.lastMergedAt),t.stargazersCount!==void 0&&(s.stargazersCount=t.stargazersCount),t.signals&&(s.signals={...s.signals,...t.signals}),s.score=this.calculateScore(s),s.lastEvaluatedAt=new Date().toISOString(),P(F,`Updated repo score for ${e}: ${s.score}/10`)}incrementMergedCount(e){let s=(this.state.repoScores[e]?.mergedPRCount??0)+1;this.updateRepoScore(e,{mergedPRCount:s,lastMergedAt:new Date().toISOString()}),P(F,`Incremented merged count for ${e}: ${s}`)}incrementClosedCount(e){let s=(this.state.repoScores[e]?.closedWithoutMergeCount??0)+1;this.updateRepoScore(e,{closedWithoutMergeCount:s}),P(F,`Incremented closed count for ${e}: ${s}`)}markRepoHostile(e){this.updateRepoScore(e,{signals:{hasHostileComments:!0}}),P(F,`Marked ${e} as hostile, score: ${this.state.repoScores[e].score}/10`)}getReposWithMergedPRs(){return Object.values(this.state.repoScores).filter(e=>e.mergedPRCount>0).sort((e,t)=>t.mergedPRCount-e.mergedPRCount).map(e=>e.repo)}getReposWithOpenPRs(){return Object.values(this.state.repoScores).filter(e=>e.mergedPRCount===0&&e.closedWithoutMergeCount===0).sort((e,t)=>t.score-e.score).map(e=>e.repo)}getHighScoringRepos(e){let t=e??this.state.config.minRepoScoreThreshold;return Object.values(this.state.repoScores).filter(s=>s.score>=t).sort((s,o)=>o.score-s.score).map(s=>s.repo)}getLowScoringRepos(e){let t=e??this.state.config.minRepoScoreThreshold,s=Date.now();return Object.values(this.state.repoScores).filter(o=>{if(o.score>t)return!1;let n=s-new Date(o.lastEvaluatedAt).getTime();return Number.isFinite(n)?n<=xc:(T(F,`Invalid lastEvaluatedAt for repo ${o.repo}: "${o.lastEvaluatedAt}", treating as stale`),!1)}).sort((o,n)=>o.score-n.score).map(o=>o.repo)}getStats(){let e=0,t=0,s=0;for(let[i,a]of Object.entries(this.state.repoScores))this.isExcluded(i)||(s++,e+=a.mergedPRCount,t+=a.closedWithoutMergeCount);let o=e+t,n=o>0?e/o*100:0;return{mergedPRs:e,closedPRs:t,activeIssues:0,trustedProjects:this.state.config.trustedProjects.filter(i=>!this.isExcluded(i)).length,mergeRate:n.toFixed(1)+"%",totalTracked:s,needsResponse:0}}},Ir=null});function ot(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:"<environment undetectable>"}var jt=O(()=>{});function vs(r,e,t,s){if(typeof t!="function")throw new Error("method for before hook must be a function");return s||(s={}),Array.isArray(e)?e.reverse().reduce((o,n)=>vs.bind(null,r,n,o,s),t)():Promise.resolve().then(()=>r.registry[e]?r.registry[e].reduce((o,n)=>n.hook.bind(null,o,s),t)():t(s))}var mn=O(()=>{});function hn(r,e,t,s){let o=s;r.registry[t]||(r.registry[t]=[]),e==="before"&&(s=(n,i)=>Promise.resolve().then(o.bind(null,i)).then(n.bind(null,i))),e==="after"&&(s=(n,i)=>{let a;return Promise.resolve().then(n.bind(null,i)).then(c=>(a=c,o(a,i))).then(()=>a)}),e==="error"&&(s=(n,i)=>Promise.resolve().then(n.bind(null,i)).catch(a=>o(a,i))),r.registry[t].push({hook:s,orig:o})}var fn=O(()=>{});function bn(r,e,t){if(!r.registry[e])return;let s=r.registry[e].map(o=>o.orig).indexOf(t);s!==-1&&r.registry[e].splice(s,1)}var yn=O(()=>{});function wn(r,e,t){let s=_n(bn,null).apply(null,t?[e,t]:[e]);r.api={remove:s},r.remove=s,["before","error","after","wrap"].forEach(o=>{let n=t?[e,o,t]:[e,o];r[o]=r.api[o]=_n(hn,null).apply(null,n)})}function Mc(){let r=Symbol("Singular"),e={registry:{}},t=vs.bind(null,e,r);return wn(t,e,r),t}function Lc(){let r={registry:{}},e=vs.bind(null,r);return wn(e,r),e}var vn,_n,Rn,En=O(()=>{mn();fn();yn();vn=Function.bind,_n=vn.bind(vn);Rn={Singular:Mc,Collection:Lc}});function qc(r){return r?Object.keys(r).reduce((e,t)=>(e[t.toLowerCase()]=r[t],e),{}):{}}function Bc(r){if(typeof r!="object"||r===null||Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);if(e===null)return!0;let t=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&Function.prototype.call(t)===Function.prototype.call(r)}function Sn(r,e){let t=Object.assign({},r);return Object.keys(e).forEach(s=>{Bc(e[s])?s in r?t[s]=Sn(r[s],e[s]):Object.assign(t,{[s]:e[s]}):Object.assign(t,{[s]:e[s]})}),t}function Tn(r){for(let e in r)r[e]===void 0&&delete r[e];return r}function Ur(r,e,t){if(typeof e=="string"){let[o,n]=e.split(" ");t=Object.assign(n?{method:o,url:n}:{url:o},t)}else t=Object.assign({},e);t.headers=qc(t.headers),Tn(t),Tn(t.headers);let s=Sn(r||{},t);return t.url==="/graphql"&&(r&&r.mediaType.previews?.length&&(s.mediaType.previews=r.mediaType.previews.filter(o=>!s.mediaType.previews.includes(o)).concat(s.mediaType.previews)),s.mediaType.previews=(s.mediaType.previews||[]).map(o=>o.replace(/-preview/,""))),s}function Vc(r,e){let t=/\?/.test(r)?"&":"?",s=Object.keys(e);return s.length===0?r:r+t+s.map(o=>o==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${o}=${encodeURIComponent(e[o])}`).join("&")}function Wc(r){return r.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g,"").split(/,/)}function Jc(r){let e=r.match(zc);return e?e.map(Wc).reduce((t,s)=>t.concat(s),[]):[]}function Cn(r,e){let t={__proto__:null};for(let s of Object.keys(r))e.indexOf(s)===-1&&(t[s]=r[s]);return t}function Pn(r){return r.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function kt(r){return encodeURIComponent(r).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Nt(r,e,t){return e=r==="+"||r==="#"?Pn(e):kt(e),t?kt(t)+"="+e:e}function Pt(r){return r!=null}function Fr(r){return r===";"||r==="&"||r==="?"}function Kc(r,e,t,s){var o=r[t],n=[];if(Pt(o)&&o!=="")if(typeof o=="string"||typeof o=="number"||typeof o=="bigint"||typeof o=="boolean")o=o.toString(),s&&s!=="*"&&(o=o.substring(0,parseInt(s,10))),n.push(Nt(e,o,Fr(e)?t:""));else if(s==="*")Array.isArray(o)?o.filter(Pt).forEach(function(i){n.push(Nt(e,i,Fr(e)?t:""))}):Object.keys(o).forEach(function(i){Pt(o[i])&&n.push(Nt(e,o[i],i))});else{let i=[];Array.isArray(o)?o.filter(Pt).forEach(function(a){i.push(Nt(e,a))}):Object.keys(o).forEach(function(a){Pt(o[a])&&(i.push(kt(a)),i.push(Nt(e,o[a].toString())))}),Fr(e)?n.push(kt(t)+"="+i.join(",")):i.length!==0&&n.push(i.join(","))}else e===";"?Pt(o)&&n.push(kt(t)):o===""&&(e==="&"||e==="?")?n.push(kt(t)+"="):o===""&&n.push("");return n}function Qc(r){return{expand:Yc.bind(null,r)}}function Yc(r,e){var t=["+","#",".","/",";","?","&"];return r=r.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(s,o,n){if(o){let a="",c=[];if(t.indexOf(o.charAt(0))!==-1&&(a=o.charAt(0),o=o.substr(1)),o.split(/,/g).forEach(function(l){var p=/([^:\*]*)(?::(\d+)|(\*))?/.exec(l);c.push(Kc(e,a,p[1],p[2]||p[3]))}),a&&a!=="+"){var i=",";return a==="?"?i="&":a!=="#"&&(i=a),(c.length!==0?a:"")+c.join(i)}else return c.join(",")}else return Pn(n)}),r==="/"?r:r.replace(/\/$/,"")}function kn(r){let e=r.method.toUpperCase(),t=(r.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),s=Object.assign({},r.headers),o,n=Cn(r,["method","baseUrl","url","headers","request","mediaType"]),i=Jc(t);t=Qc(t).expand(n),/^http/.test(t)||(t=r.baseUrl+t);let a=Object.keys(r).filter(p=>i.includes(p)).concat("baseUrl"),c=Cn(n,a);if(!/application\/octet-stream/i.test(s.accept)&&(r.mediaType.format&&(s.accept=s.accept.split(/,/).map(p=>p.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${r.mediaType.format}`)).join(",")),t.endsWith("/graphql")&&r.mediaType.previews?.length)){let p=s.accept.match(/(?<![\w-])[\w-]+(?=-preview)/g)||[];s.accept=p.concat(r.mediaType.previews).map(d=>{let m=r.mediaType.format?`.${r.mediaType.format}`:"+json";return`application/vnd.github.${d}-preview${m}`}).join(",")}return["GET","HEAD"].includes(e)?t=Vc(t,c):"data"in c?o=c.data:Object.keys(c).length&&(o=c),!s["content-type"]&&typeof o<"u"&&(s["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof o>"u"&&(o=""),Object.assign({method:e,url:t,headers:s},typeof o<"u"?{body:o}:null,r.request?{request:r.request}:null)}function Xc(r,e,t){return kn(Ur(r,e,t))}function An(r,e){let t=Ur(r,e),s=Xc.bind(null,t);return Object.assign(s,{DEFAULTS:t,defaults:An.bind(null,t),merge:Ur.bind(null,t),parse:kn})}var jc,Nc,Hc,zc,On,$n=O(()=>{jt();jc="0.0.0-development",Nc=`octokit-endpoint.js/${jc} ${ot()}`,Hc={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Nc},mediaType:{format:""}};zc=/\{[^{}}]+\}/g;On=An(null,Hc)});var In=ze((td,Ht)=>{"use strict";var Rs=function(){};Rs.prototype=Object.create(null);var _s=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,ws=/\\([\v\u0020-\u00ff])/gu,Gn=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,gt={type:"",parameters:new Rs};Object.freeze(gt.parameters);Object.freeze(gt);function xn(r){if(typeof r!="string")throw new TypeError("argument header is required and must be a string");let e=r.indexOf(";"),t=e!==-1?r.slice(0,e).trim():r.trim();if(Gn.test(t)===!1)throw new TypeError("invalid media type");let s={type:t.toLowerCase(),parameters:new Rs};if(e===-1)return s;let o,n,i;for(_s.lastIndex=e;n=_s.exec(r);){if(n.index!==e)throw new TypeError("invalid parameter format");e+=n[0].length,o=n[1].toLowerCase(),i=n[2],i[0]==='"'&&(i=i.slice(1,i.length-1),ws.test(i)&&(i=i.replace(ws,"$1"))),s.parameters[o]=i}if(e!==r.length)throw new TypeError("invalid parameter format");return s}function Dn(r){if(typeof r!="string")return gt;let e=r.indexOf(";"),t=e!==-1?r.slice(0,e).trim():r.trim();if(Gn.test(t)===!1)return gt;let s={type:t.toLowerCase(),parameters:new Rs};if(e===-1)return s;let o,n,i;for(_s.lastIndex=e;n=_s.exec(r);){if(n.index!==e)return gt;e+=n[0].length,o=n[1].toLowerCase(),i=n[2],i[0]==='"'&&(i=i.slice(1,i.length-1),ws.test(i)&&(i=i.replace(ws,"$1"))),s.parameters[o]=i}return e!==r.length?gt:s}Ht.exports.default={parse:xn,safeParse:Dn};Ht.exports.parse=xn;Ht.exports.safeParse=Dn;Ht.exports.defaultContentType=gt});var Zc,Mn,Mr,Fn,el,tl,sl,Ln,rl,ol,nl,jn,Un,il,al,Nn,Hn=O(()=>{Zc=/^-?\d+$/,Mn=/^-?\d+n+$/,Mr=JSON.stringify,Fn=JSON.parse,el=/^-?\d+n$/,tl=/([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,sl=/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,Ln=(r,e,t)=>"rawJSON"in JSON?Mr(r,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),t):r?Mr(r,(i,a)=>typeof a=="string"&&!!a.match(Mn)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),t).replace(tl,"$1$2$3").replace(sl,"$1$2$3"):Mr(r,e,t),rl=()=>JSON.parse("1",(r,e,t)=>!!t&&t.source==="1"),ol=(r,e,t,s)=>typeof e=="string"&&e.match(el)?BigInt(e.slice(0,-1)):typeof e=="string"&&e.match(Mn)?e.slice(0,-1):typeof s!="function"?e:s(r,e,t),nl=(r,e)=>JSON.parse(r,(t,s,o)=>{let n=typeof s=="number"&&(s>Number.MAX_SAFE_INTEGER||s<Number.MIN_SAFE_INTEGER),i=o&&Zc.test(o.source);return n&&i?BigInt(o.source):typeof e!="function"?s:e(t,s,o)}),jn=Number.MAX_SAFE_INTEGER.toString(),Un=jn.length,il=/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g,al=/^"-?\d+n+"$/,Nn=(r,e)=>{if(!r)return Fn(r,e);if(rl())return nl(r,e);let t=r.replace(il,(s,o,n,i)=>{let a=s[0]==='"';if(a&&!!s.match(al))return s.substring(0,s.length-1)+'n"';let l=n||i,p=o&&(o.length<Un||o.length===Un&&o<=jn);return a||l||p?s:'"'+s+'n"'});return Fn(t,(s,o,n)=>ol(s,o,n,e))}});var mt,qn=O(()=>{mt=class extends Error{name;status;request;response;constructor(e,t,s){super(e,{cause:s.cause}),this.name="HttpError",this.status=Number.parseInt(t),Number.isNaN(this.status)&&(this.status=0);"response"in s&&(this.response=s.response);let o=Object.assign({},s.request);s.request.headers.authorization&&(o.headers=Object.assign({},s.request.headers,{authorization:s.request.headers.authorization.replace(/(?<! ) .*$/," [REDACTED]")})),o.url=o.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=o}}});function ul(r){if(typeof r!="object"||r===null||Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);if(e===null)return!0;let t=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&Function.prototype.call(t)===Function.prototype.call(r)}async function Vn(r){let e=r.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let t=r.request?.log||console,s=r.request?.parseSuccessResponseBody!==!1,o=ul(r.body)||Array.isArray(r.body)?Ln(r.body):r.body,n=Object.fromEntries(Object.entries(r.headers).map(([d,m])=>[d,String(m)])),i;try{i=await e(r.url,{method:r.method,body:o,redirect:r.request?.redirect,headers:n,signal:r.request?.signal,...r.body&&{duplex:"half"}})}catch(d){let m="Unknown Error";if(d instanceof Error){if(d.name==="AbortError")throw d.status=500,d;m=d.message,d.name==="TypeError"&&"cause"in d&&(d.cause instanceof Error?m=d.cause.message:typeof d.cause=="string"&&(m=d.cause))}let v=new mt(m,500,{request:r});throw v.cause=d,v}let a=i.status,c=i.url,l={};for(let[d,m]of i.headers)l[d]=m;let p={url:c,status:a,headers:l,data:""};if("deprecation"in l){let d=l.link&&l.link.match(/<([^<>]+)>; rel="deprecation"/),m=d&&d.pop();t.warn(`[@octokit/request] "${r.method} ${r.url}" is deprecated. It is scheduled to be removed on ${l.sunset}${m?`. See ${m}`:""}`)}if(a===204||a===205)return p;if(r.method==="HEAD"){if(a<400)return p;throw new mt(i.statusText,a,{response:p,request:r})}if(a===304)throw p.data=await Lr(i),new mt("Not modified",a,{response:p,request:r});if(a>=400)throw p.data=await Lr(i),new mt(dl(p.data),a,{response:p,request:r});return p.data=s?await Lr(i):i.body,p}async function Lr(r){let e=r.headers.get("content-type");if(!e)return r.text().catch(Bn);let t=(0,zn.safeParse)(e);if(pl(t)){let s="";try{return s=await r.text(),Nn(s)}catch{return s}}else return t.type.startsWith("text/")||t.parameters.charset?.toLowerCase()==="utf-8"?r.text().catch(Bn):r.arrayBuffer().catch(()=>new ArrayBuffer(0))}function pl(r){return r.type==="application/json"||r.type==="application/scim+json"}function dl(r){if(typeof r=="string")return r;if(r instanceof ArrayBuffer)return"Unknown error";if("message"in r){let e="documentation_url"in r?` - ${r.documentation_url}`:"";return Array.isArray(r.errors)?`${r.message}: ${r.errors.map(t=>JSON.stringify(t)).join(", ")}${e}`:`${r.message}${e}`}return`Unknown error: ${JSON.stringify(r)}`}function jr(r,e){let t=r.defaults(e);return Object.assign(function(o,n){let i=t.merge(o,n);if(!i.request||!i.request.hook)return Vn(t.parse(i));let a=(c,l)=>Vn(t.parse(t.merge(c,l)));return Object.assign(a,{endpoint:t,defaults:jr.bind(null,t)}),i.request.hook(a,i)},{endpoint:t,defaults:jr.bind(null,t)})}var zn,cl,ll,Bn,qt,Nr=O(()=>{$n();jt();zn=Q(In(),1);Hn();qn();cl="10.0.8",ll={headers:{"user-agent":`octokit-request.js/${cl} ${ot()}`}};Bn=()=>"";qt=jr(On,ll);});function ml(r){return`Request failed due to following response errors:
|
|
33
|
+
The gh CLI is recommended - install from https://cli.github.com`);return r}function bn(){Re=null,Lt=!1}async function ws(){if(Re)return Re;if(Lt)return null;if(Lt=!0,process.env.GITHUB_TOKEN)return Re=process.env.GITHUB_TOKEN,Re;try{let r=await new Promise((e,t)=>{(0,fs.execFile)("gh",["auth","token"],{encoding:"utf-8",timeout:2e3},(s,o)=>{s?t(s):e(o.trim())})});if(r&&r.length>0)return Re=r,P(hs,"Using GitHub token from gh CLI (async)"),Re}catch(r){P(hs,"gh auth token failed (CLI unavailable or not authenticated)",r)}return null}var qe,Qe,hn,fs,it,hs,Re,Lt,Hc,qc,Te=O(()=>{"use strict";qe=K(require("fs"),1),Qe=K(require("path"),1),hn=K(require("os"),1),fs=require("child_process");ie();me();it=5,hs="utils",Re=null,Lt=!1;Hc=/^[a-zA-Z0-9_-]+$/,qc=/^[a-zA-Z0-9_.-]+$/});function Wc(r){try{let e=JSON.parse(L.readFileSync(r,"utf-8"));return Date.now()-e.timestamp>zc}catch(e){return P(F,"Lock file unreadable or invalid JSON, treating as stale",e),!0}}function Jc(r){let e=JSON.stringify({pid:process.pid,timestamp:Date.now()});try{L.writeFileSync(r,e,{flag:"wx"});return}catch(t){P(F,"Lock file already exists, checking staleness",t)}if(!Wc(r))throw new Error("State file is locked by another process");try{L.unlinkSync(r)}catch(t){P(F,"Stale lock already removed by another process",t)}try{L.writeFileSync(r,e,{flag:"wx"})}catch(t){throw P(F,"Lock re-acquire failed (race condition)",t),new Error("State file is locked by another process",{cause:t})}}function Kc(r){try{JSON.parse(L.readFileSync(r,"utf-8")).pid===process.pid&&L.unlinkSync(r)}catch(e){P(F,"Lock file already removed or unreadable during release",e)}}function Mr(r,e,t){let s=r+".tmp";L.writeFileSync(s,e,{mode:t??384}),L.renameSync(s,r),t!==void 0&&L.chmodSync(r,t)}function _n(r){P(F,"Migrating state from v1 to v2 (fresh GitHub fetching)...");let e=r.mergedPRs||[],t=r.closedPRs||[],s={...r.repoScores||{}};for(let n of e)s[n.repo]||(s[n.repo]={repo:n.repo,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}});for(let n of t)s[n.repo]||(s[n.repo]={repo:n.repo,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}});let o={version:2,activeIssues:r.activeIssues||[],repoScores:s,config:r.config,events:r.events||[],lastRunAt:new Date().toISOString()};return P(F,`Migration complete. Preserved ${Object.keys(s).length} repo scores.`),o}function U(){return Lr||(Lr=new Es),Lr}var L,Ie,F,Bc,vn,Vc,zc,jt,bt,Es,Lr,Nt=O(()=>{"use strict";L=K(require("fs"),1),Ie=K(require("path"),1);pt();Te();ie();me();F="state",Bc=2,vn=1e3,Vc=720*60*60*1e3,zc=3e4,jt=Ie.join(process.cwd(),"data","state.json"),bt=Ie.join(process.cwd(),"data","backups");Es=class r{state;inMemoryOnly;constructor(e=!1){this.inMemoryOnly=e,this.state=e?this.createFreshState():this.load()}createFreshState(){return{version:Bc,activeIssues:[],repoScores:{},config:{...ms.config,setupComplete:!1,languages:[...ms.config.languages],labels:[...ms.config.labels],excludeRepos:[],trustedProjects:[],shelvedPRUrls:[],dismissedIssues:{},snoozedPRs:{}},events:[],lastRunAt:new Date().toISOString()}}isSetupComplete(){return this.state.config.setupComplete===!0}markSetupComplete(){this.state.config.setupComplete=!0,this.state.config.setupCompletedAt=new Date().toISOString()}migrateFromLegacyLocation(){let e=at();if(L.existsSync(e)||!L.existsSync(jt))return!1;P(F,"Migrating state from ./data/ to ~/.oss-autopilot/...");try{if(xe(),L.copyFileSync(jt,e),P(F,`Migrated state file to ${e}`),L.existsSync(bt)){let s=mt(),o=L.readdirSync(bt).filter(n=>n.startsWith("state-")&&n.endsWith(".json"));for(let n of o){let i=Ie.join(bt,n),a=Ie.join(s,n);L.copyFileSync(i,a)}P(F,`Migrated ${o.length} backup files`)}if(L.unlinkSync(jt),P(F,"Removed legacy state file"),L.existsSync(bt)){let s=L.readdirSync(bt);for(let o of s)L.unlinkSync(Ie.join(bt,o));L.rmdirSync(bt)}let t=Ie.dirname(jt);return L.existsSync(t)&&L.readdirSync(t).length===0&&(L.rmdirSync(t),P(F,"Removed empty legacy data directory")),P(F,"Migration complete!"),!0}catch(t){v(F,`Failed to migrate state: ${A(t)}`);let s=at();if(L.existsSync(s)&&L.existsSync(jt))try{L.unlinkSync(s),P(F,"Cleaned up partial migration - removed incomplete new state file")}catch(o){v(F,"Could not clean up partial migration file"),P(F,"Partial migration cleanup failed",o)}return v(F,"To resolve this issue:"),v(F," 1. Ensure you have write permissions to ~/.oss-autopilot/"),v(F," 2. Check available disk space"),v(F," 3. Manually copy ./data/state.json to ~/.oss-autopilot/state.json"),v(F," 4. Or delete ./data/state.json to start fresh"),!1}}load(){this.migrateFromLegacyLocation();let e=at();try{if(L.existsSync(e)){let t=L.readFileSync(e,"utf-8"),s=JSON.parse(t);if(!this.isValidState(s)){v(F,"Invalid state file structure, attempting to restore from backup...");let n=this.tryRestoreFromBackup();return n||(v(F,"No valid backup found, starting fresh"),this.createFreshState())}s.version===1&&(s=_n(s),Mr(e,JSON.stringify(s,null,2),384),P(F,"Migrated state saved"));let o=Object.keys(s.repoScores).length;return P(F,`Loaded state v${s.version}: ${o} repo scores tracked`),s}}catch(t){v(F,"Error loading state:",t),v(F,"Attempting to restore from backup...");let s=this.tryRestoreFromBackup();if(s)return s;v(F,"No valid backup found, starting fresh")}return P(F,"No existing state found, initializing..."),this.createFreshState()}tryRestoreFromBackup(){let e=mt();if(!L.existsSync(e))return null;let t=L.readdirSync(e).filter(s=>s.startsWith("state-")&&s.endsWith(".json")).sort().reverse();for(let s of t){let o=Ie.join(e,s);try{let n=L.readFileSync(o,"utf-8"),i=JSON.parse(n);if(this.isValidState(i)){P(F,`Successfully restored state from backup: ${s}`),i.version===1&&(i=_n(i));let a=Object.keys(i.repoScores).length;P(F,`Restored state v${i.version}: ${a} repo scores`);let c=at();return Mr(c,JSON.stringify(i,null,2),384),P(F,"Restored backup written to main state file"),i}}catch(n){v(F,`Backup ${s} is corrupted, trying next...`),P(F,`Backup ${s} parse failed`,n)}}return null}isValidState(e){if(!e||typeof e!="object")return!1;let t=e;return t.repoScores===void 0&&(t.repoScores={}),t.events===void 0&&(t.events=[]),typeof t.version=="number"&&typeof t.repoScores=="object"&&t.repoScores!==null&&Array.isArray(t.events)&&typeof t.config=="object"&&t.config!==null?t.version===1?Array.isArray(t.activePRs)&&Array.isArray(t.dormantPRs)&&Array.isArray(t.mergedPRs)&&Array.isArray(t.closedPRs):!0:!1}save(){if(this.state.lastRunAt=new Date().toISOString(),this.inMemoryOnly)return;let e=at(),t=e+".lock",s=mt();Jc(t);try{if(L.existsSync(e)){let o=new Date().toISOString().replace(/[:.]/g,"-"),n=Math.random().toString(36).slice(2,8).padEnd(6,"0"),i=Ie.join(s,`state-${o}-${n}.json`);L.copyFileSync(e,i),L.chmodSync(i,384),this.cleanupBackups()}Mr(e,JSON.stringify(this.state,null,2),384),P(F,"State saved successfully")}finally{Kc(t)}}cleanupBackups(){let e=mt();try{let t=L.readdirSync(e).filter(s=>s.startsWith("state-")).sort().reverse();for(let s of t.slice(10))try{L.unlinkSync(Ie.join(e,s))}catch(o){v(F,`Could not delete old backup ${s}:`,A(o))}}catch(t){v(F,"Could not clean up backups:",A(t))}}getState(){return this.state}setLastDigest(e){this.state.lastDigest=e,this.state.lastDigestAt=e.generatedAt}setMonthlyMergedCounts(e){this.state.monthlyMergedCounts=e}setMonthlyClosedCounts(e){this.state.monthlyClosedCounts=e}setMonthlyOpenedCounts(e){this.state.monthlyOpenedCounts=e}setDailyActivityCounts(e){this.state.dailyActivityCounts=e}setLocalRepoCache(e){this.state.localRepoCache=e}updateConfig(e){this.state.config={...this.state.config,...e}}appendEvent(e,t){let s={id:`evt_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,type:e,at:new Date().toISOString(),data:t};this.state.events.push(s),this.state.events.length>vn&&(this.state.events=this.state.events.slice(-vn))}getEventsByType(e){return this.state.events.filter(t=>t.type===e)}getEventsInRange(e,t=new Date){return this.state.events.filter(s=>{let o=new Date(s.at);return o>=e&&o<=t})}addIssue(e){if(this.state.activeIssues.find(s=>s.url===e.url)){P(F,`Issue ${e.url} already tracked`);return}this.state.activeIssues.push(e),P(F,`Added issue: ${e.repo}#${e.number}`)}addTrustedProject(e){this.state.config.trustedProjects.includes(e)||(this.state.config.trustedProjects.push(e),P(F,`Added trusted project: ${e}`))}static matchesExclusion(e,t,s){let o=e.toLowerCase();return!!(t.some(n=>n.toLowerCase()===o)||s?.some(n=>n.toLowerCase()===o.split("/")[0]))}isExcluded(e){let{excludeRepos:t,excludeOrgs:s}=this.state.config;return r.matchesExclusion(e,t,s)}cleanupExcludedData(e,t){let s=a=>r.matchesExclusion(a,e,t),o=this.state.config.trustedProjects.length;this.state.config.trustedProjects=this.state.config.trustedProjects.filter(a=>!s(a));let n=o-this.state.config.trustedProjects.length,i=0;for(let a of Object.keys(this.state.repoScores))s(a)&&(delete this.state.repoScores[a],i++);(n>0||i>0)&&P(F,`Removed ${n} trusted project(s) and ${i} repo score(s) for excluded repos/orgs`)}getStarredRepos(){return this.state.config.starredRepos||[]}setStarredRepos(e){this.state.config.starredRepos=e,this.state.config.starredReposLastFetched=new Date().toISOString(),P(F,`Updated starred repos: ${e.length} repositories`)}isStarredReposStale(){let e=this.state.config.starredReposLastFetched;if(!e)return!0;let t=1440*60*1e3,s=new Date(e);return new Date().getTime()-s.getTime()>t}shelvePR(e){return this.state.config.shelvedPRUrls||(this.state.config.shelvedPRUrls=[]),this.state.config.shelvedPRUrls.includes(e)?!1:(this.state.config.shelvedPRUrls.push(e),!0)}unshelvePR(e){if(!this.state.config.shelvedPRUrls)return!1;let t=this.state.config.shelvedPRUrls.indexOf(e);return t===-1?!1:(this.state.config.shelvedPRUrls.splice(t,1),!0)}isPRShelved(e){return this.state.config.shelvedPRUrls?.includes(e)??!1}dismissIssue(e,t){return this.state.config.dismissedIssues||(this.state.config.dismissedIssues={}),e in this.state.config.dismissedIssues?!1:(this.state.config.dismissedIssues[e]=t,!0)}undismissIssue(e){return!this.state.config.dismissedIssues||!(e in this.state.config.dismissedIssues)?!1:(delete this.state.config.dismissedIssues[e],!0)}getIssueDismissedAt(e){return this.state.config.dismissedIssues?.[e]}snoozePR(e,t,s){if(!Number.isFinite(s)||s<=0)throw new Y(`Invalid snooze duration: ${s}. Must be a positive finite number.`);if(this.state.config.snoozedPRs||(this.state.config.snoozedPRs={}),e in this.state.config.snoozedPRs)return!1;let o=new Date,n=new Date(o.getTime()+s*24*60*60*1e3);return this.state.config.snoozedPRs[e]={reason:t,snoozedAt:o.toISOString(),expiresAt:n.toISOString()},!0}unsnoozePR(e){return!this.state.config.snoozedPRs||!(e in this.state.config.snoozedPRs)?!1:(delete this.state.config.snoozedPRs[e],!0)}isSnoozed(e){let t=this.getSnoozeInfo(e);if(!t)return!1;let s=new Date(t.expiresAt).getTime();return isNaN(s)?(v(F,`Invalid expiresAt for snoozed PR ${e}: "${t.expiresAt}". Treating as not snoozed.`),!1):s>Date.now()}getSnoozeInfo(e){return this.state.config.snoozedPRs?.[e]}expireSnoozes(){if(!this.state.config.snoozedPRs)return[];let e=[],t=Date.now();for(let[s,o]of Object.entries(this.state.config.snoozedPRs)){let n=new Date(o.expiresAt).getTime();(isNaN(n)||n<=t)&&e.push(s)}for(let s of e)delete this.state.config.snoozedPRs[s];return e}setStatusOverride(e,t,s){this.state.config.statusOverrides||(this.state.config.statusOverrides={}),this.state.config.statusOverrides[e]={status:t,setAt:new Date().toISOString(),lastActivityAt:s}}clearStatusOverride(e){return!this.state.config.statusOverrides||!(e in this.state.config.statusOverrides)?!1:(delete this.state.config.statusOverrides[e],!0)}getStatusOverride(e,t){let s=this.state.config.statusOverrides?.[e];if(s){if(t&&t>s.lastActivityAt){this.clearStatusOverride(e);return}return s}}getRepoScore(e){return this.state.repoScores[e]}createDefaultRepoScore(e){return{repo:e,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}}}calculateScore(e){let t=5;if(e.mergedPRCount>0){let o=Math.min(Math.round(Math.log2(e.mergedPRCount+1)*2),5);t+=o}let s=Math.min(e.closedWithoutMergeCount,3);if(t-=s,e.lastMergedAt){let o=new Date(e.lastMergedAt);isNaN(o.getTime())?v(F,`Invalid lastMergedAt date for ${e.repo}: "${e.lastMergedAt}". Skipping recency bonus.`):Math.floor((Date.now()-o.getTime())/864e5)<=90&&(t+=1)}return e.signals.isResponsive&&(t+=1),e.signals.hasHostileComments&&(t-=2),Math.max(1,Math.min(10,t))}updateRepoScore(e,t){this.state.repoScores[e]||(this.state.repoScores[e]=this.createDefaultRepoScore(e));let s=this.state.repoScores[e];t.mergedPRCount!==void 0&&(s.mergedPRCount=t.mergedPRCount),t.closedWithoutMergeCount!==void 0&&(s.closedWithoutMergeCount=t.closedWithoutMergeCount),t.avgResponseDays!==void 0&&(s.avgResponseDays=t.avgResponseDays),t.lastMergedAt!==void 0&&(s.lastMergedAt=t.lastMergedAt),t.stargazersCount!==void 0&&(s.stargazersCount=t.stargazersCount),t.signals&&(s.signals={...s.signals,...t.signals}),s.score=this.calculateScore(s),s.lastEvaluatedAt=new Date().toISOString(),P(F,`Updated repo score for ${e}: ${s.score}/10`)}incrementMergedCount(e){let s=(this.state.repoScores[e]?.mergedPRCount??0)+1;this.updateRepoScore(e,{mergedPRCount:s,lastMergedAt:new Date().toISOString()}),P(F,`Incremented merged count for ${e}: ${s}`)}incrementClosedCount(e){let s=(this.state.repoScores[e]?.closedWithoutMergeCount??0)+1;this.updateRepoScore(e,{closedWithoutMergeCount:s}),P(F,`Incremented closed count for ${e}: ${s}`)}markRepoHostile(e){this.updateRepoScore(e,{signals:{hasHostileComments:!0}}),P(F,`Marked ${e} as hostile, score: ${this.state.repoScores[e].score}/10`)}getReposWithMergedPRs(){return Object.values(this.state.repoScores).filter(e=>e.mergedPRCount>0).sort((e,t)=>t.mergedPRCount-e.mergedPRCount).map(e=>e.repo)}getReposWithOpenPRs(){return Object.values(this.state.repoScores).filter(e=>e.mergedPRCount===0&&e.closedWithoutMergeCount===0).sort((e,t)=>t.score-e.score).map(e=>e.repo)}getHighScoringRepos(e){let t=e??this.state.config.minRepoScoreThreshold;return Object.values(this.state.repoScores).filter(s=>s.score>=t).sort((s,o)=>o.score-s.score).map(s=>s.repo)}getLowScoringRepos(e){let t=e??this.state.config.minRepoScoreThreshold,s=Date.now();return Object.values(this.state.repoScores).filter(o=>{if(o.score>t)return!1;let n=s-new Date(o.lastEvaluatedAt).getTime();return Number.isFinite(n)?n<=Vc:(v(F,`Invalid lastEvaluatedAt for repo ${o.repo}: "${o.lastEvaluatedAt}", treating as stale`),!1)}).sort((o,n)=>o.score-n.score).map(o=>o.repo)}getStats(){let e=0,t=0,s=0;for(let[i,a]of Object.entries(this.state.repoScores))this.isExcluded(i)||nt(a.stargazersCount,this.state.config.minStars??50)||(s++,e+=a.mergedPRCount,t+=a.closedWithoutMergeCount);let o=e+t,n=o>0?e/o*100:0;return{mergedPRs:e,closedPRs:t,activeIssues:0,trustedProjects:this.state.config.trustedProjects.filter(i=>!this.isExcluded(i)).length,mergeRate:n.toFixed(1)+"%",totalTracked:s,needsResponse:0}}},Lr=null});function ct(){return typeof navigator=="object"&&"userAgent"in navigator?navigator.userAgent:typeof process=="object"&&process.version!==void 0?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:"<environment undetectable>"}var Ht=O(()=>{});function Rs(r,e,t,s){if(typeof t!="function")throw new Error("method for before hook must be a function");return s||(s={}),Array.isArray(e)?e.reverse().reduce((o,n)=>Rs.bind(null,r,n,o,s),t)():Promise.resolve().then(()=>r.registry[e]?r.registry[e].reduce((o,n)=>n.hook.bind(null,o,s),t)():t(s))}var wn=O(()=>{});function En(r,e,t,s){let o=s;r.registry[t]||(r.registry[t]=[]),e==="before"&&(s=(n,i)=>Promise.resolve().then(o.bind(null,i)).then(n.bind(null,i))),e==="after"&&(s=(n,i)=>{let a;return Promise.resolve().then(n.bind(null,i)).then(c=>(a=c,o(a,i))).then(()=>a)}),e==="error"&&(s=(n,i)=>Promise.resolve().then(n.bind(null,i)).catch(a=>o(a,i))),r.registry[t].push({hook:s,orig:o})}var Rn=O(()=>{});function Tn(r,e,t){if(!r.registry[e])return;let s=r.registry[e].map(o=>o.orig).indexOf(t);s!==-1&&r.registry[e].splice(s,1)}var Sn=O(()=>{});function kn(r,e,t){let s=Pn(Tn,null).apply(null,t?[e,t]:[e]);r.api={remove:s},r.remove=s,["before","error","after","wrap"].forEach(o=>{let n=t?[e,o,t]:[e,o];r[o]=r.api[o]=Pn(En,null).apply(null,n)})}function Yc(){let r=Symbol("Singular"),e={registry:{}},t=Rs.bind(null,e,r);return kn(t,e,r),t}function Qc(){let r={registry:{}},e=Rs.bind(null,r);return kn(e,r),e}var Cn,Pn,An,On=O(()=>{wn();Rn();Sn();Cn=Function.bind,Pn=Cn.bind(Cn);An={Singular:Yc,Collection:Qc}});function tl(r){return r?Object.keys(r).reduce((e,t)=>(e[t.toLowerCase()]=r[t],e),{}):{}}function sl(r){if(typeof r!="object"||r===null||Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);if(e===null)return!0;let t=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&Function.prototype.call(t)===Function.prototype.call(r)}function $n(r,e){let t=Object.assign({},r);return Object.keys(e).forEach(s=>{sl(e[s])?s in r?t[s]=$n(r[s],e[s]):Object.assign(t,{[s]:e[s]}):Object.assign(t,{[s]:e[s]})}),t}function Gn(r){for(let e in r)r[e]===void 0&&delete r[e];return r}function Nr(r,e,t){if(typeof e=="string"){let[o,n]=e.split(" ");t=Object.assign(n?{method:o,url:n}:{url:o},t)}else t=Object.assign({},e);t.headers=tl(t.headers),Gn(t),Gn(t.headers);let s=$n(r||{},t);return t.url==="/graphql"&&(r&&r.mediaType.previews?.length&&(s.mediaType.previews=r.mediaType.previews.filter(o=>!s.mediaType.previews.includes(o)).concat(s.mediaType.previews)),s.mediaType.previews=(s.mediaType.previews||[]).map(o=>o.replace(/-preview/,""))),s}function rl(r,e){let t=/\?/.test(r)?"&":"?",s=Object.keys(e);return s.length===0?r:r+t+s.map(o=>o==="q"?"q="+e.q.split("+").map(encodeURIComponent).join("+"):`${o}=${encodeURIComponent(e[o])}`).join("&")}function nl(r){return r.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g,"").split(/,/)}function il(r){let e=r.match(ol);return e?e.map(nl).reduce((t,s)=>t.concat(s),[]):[]}function xn(r,e){let t={__proto__:null};for(let s of Object.keys(r))e.indexOf(s)===-1&&(t[s]=r[s]);return t}function Dn(r){return r.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function At(r){return encodeURIComponent(r).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function qt(r,e,t){return e=r==="+"||r==="#"?Dn(e):At(e),t?At(t)+"="+e:e}function kt(r){return r!=null}function jr(r){return r===";"||r==="&"||r==="?"}function al(r,e,t,s){var o=r[t],n=[];if(kt(o)&&o!=="")if(typeof o=="string"||typeof o=="number"||typeof o=="bigint"||typeof o=="boolean")o=o.toString(),s&&s!=="*"&&(o=o.substring(0,parseInt(s,10))),n.push(qt(e,o,jr(e)?t:""));else if(s==="*")Array.isArray(o)?o.filter(kt).forEach(function(i){n.push(qt(e,i,jr(e)?t:""))}):Object.keys(o).forEach(function(i){kt(o[i])&&n.push(qt(e,o[i],i))});else{let i=[];Array.isArray(o)?o.filter(kt).forEach(function(a){i.push(qt(e,a))}):Object.keys(o).forEach(function(a){kt(o[a])&&(i.push(At(a)),i.push(qt(e,o[a].toString())))}),jr(e)?n.push(At(t)+"="+i.join(",")):i.length!==0&&n.push(i.join(","))}else e===";"?kt(o)&&n.push(At(t)):o===""&&(e==="&"||e==="?")?n.push(At(t)+"="):o===""&&n.push("");return n}function cl(r){return{expand:ll.bind(null,r)}}function ll(r,e){var t=["+","#",".","/",";","?","&"];return r=r.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(s,o,n){if(o){let a="",c=[];if(t.indexOf(o.charAt(0))!==-1&&(a=o.charAt(0),o=o.substr(1)),o.split(/,/g).forEach(function(l){var d=/([^:\*]*)(?::(\d+)|(\*))?/.exec(l);c.push(al(e,a,d[1],d[2]||d[3]))}),a&&a!=="+"){var i=",";return a==="?"?i="&":a!=="#"&&(i=a),(c.length!==0?a:"")+c.join(i)}else return c.join(",")}else return Dn(n)}),r==="/"?r:r.replace(/\/$/,"")}function In(r){let e=r.method.toUpperCase(),t=(r.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),s=Object.assign({},r.headers),o,n=xn(r,["method","baseUrl","url","headers","request","mediaType"]),i=il(t);t=cl(t).expand(n),/^http/.test(t)||(t=r.baseUrl+t);let a=Object.keys(r).filter(d=>i.includes(d)).concat("baseUrl"),c=xn(n,a);if(!/application\/octet-stream/i.test(s.accept)&&(r.mediaType.format&&(s.accept=s.accept.split(/,/).map(d=>d.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${r.mediaType.format}`)).join(",")),t.endsWith("/graphql")&&r.mediaType.previews?.length)){let d=s.accept.match(/(?<![\w-])[\w-]+(?=-preview)/g)||[];s.accept=d.concat(r.mediaType.previews).map(p=>{let m=r.mediaType.format?`.${r.mediaType.format}`:"+json";return`application/vnd.github.${p}-preview${m}`}).join(",")}return["GET","HEAD"].includes(e)?t=rl(t,c):"data"in c?o=c.data:Object.keys(c).length&&(o=c),!s["content-type"]&&typeof o<"u"&&(s["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(e)&&typeof o>"u"&&(o=""),Object.assign({method:e,url:t,headers:s},typeof o<"u"?{body:o}:null,r.request?{request:r.request}:null)}function ul(r,e,t){return In(Nr(r,e,t))}function Fn(r,e){let t=Nr(r,e),s=ul.bind(null,t);return Object.assign(s,{DEFAULTS:t,defaults:Fn.bind(null,t),merge:Nr.bind(null,t),parse:In})}var Xc,Zc,el,ol,Un,Mn=O(()=>{Ht();Xc="0.0.0-development",Zc=`octokit-endpoint.js/${Xc} ${ct()}`,el={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":Zc},mediaType:{format:""}};ol=/\{[^{}}]+\}/g;Un=Fn(null,el)});var Hn=Je((bp,Bt)=>{"use strict";var Cs=function(){};Cs.prototype=Object.create(null);var Ts=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,Ss=/\\([\v\u0020-\u00ff])/gu,Ln=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,yt={type:"",parameters:new Cs};Object.freeze(yt.parameters);Object.freeze(yt);function jn(r){if(typeof r!="string")throw new TypeError("argument header is required and must be a string");let e=r.indexOf(";"),t=e!==-1?r.slice(0,e).trim():r.trim();if(Ln.test(t)===!1)throw new TypeError("invalid media type");let s={type:t.toLowerCase(),parameters:new Cs};if(e===-1)return s;let o,n,i;for(Ts.lastIndex=e;n=Ts.exec(r);){if(n.index!==e)throw new TypeError("invalid parameter format");e+=n[0].length,o=n[1].toLowerCase(),i=n[2],i[0]==='"'&&(i=i.slice(1,i.length-1),Ss.test(i)&&(i=i.replace(Ss,"$1"))),s.parameters[o]=i}if(e!==r.length)throw new TypeError("invalid parameter format");return s}function Nn(r){if(typeof r!="string")return yt;let e=r.indexOf(";"),t=e!==-1?r.slice(0,e).trim():r.trim();if(Ln.test(t)===!1)return yt;let s={type:t.toLowerCase(),parameters:new Cs};if(e===-1)return s;let o,n,i;for(Ts.lastIndex=e;n=Ts.exec(r);){if(n.index!==e)return yt;e+=n[0].length,o=n[1].toLowerCase(),i=n[2],i[0]==='"'&&(i=i.slice(1,i.length-1),Ss.test(i)&&(i=i.replace(Ss,"$1"))),s.parameters[o]=i}return e!==r.length?yt:s}Bt.exports.default={parse:jn,safeParse:Nn};Bt.exports.parse=jn;Bt.exports.safeParse=Nn;Bt.exports.defaultContentType=yt});var dl,Vn,Hr,qn,pl,gl,ml,zn,hl,fl,bl,Wn,Bn,yl,vl,Jn,Kn=O(()=>{dl=/^-?\d+$/,Vn=/^-?\d+n+$/,Hr=JSON.stringify,qn=JSON.parse,pl=/^-?\d+n$/,gl=/([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,ml=/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,zn=(r,e,t)=>"rawJSON"in JSON?Hr(r,(i,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),t):r?Hr(r,(i,a)=>typeof a=="string"&&!!a.match(Vn)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),t).replace(gl,"$1$2$3").replace(ml,"$1$2$3"):Hr(r,e,t),hl=()=>JSON.parse("1",(r,e,t)=>!!t&&t.source==="1"),fl=(r,e,t,s)=>typeof e=="string"&&e.match(pl)?BigInt(e.slice(0,-1)):typeof e=="string"&&e.match(Vn)?e.slice(0,-1):typeof s!="function"?e:s(r,e,t),bl=(r,e)=>JSON.parse(r,(t,s,o)=>{let n=typeof s=="number"&&(s>Number.MAX_SAFE_INTEGER||s<Number.MIN_SAFE_INTEGER),i=o&&dl.test(o.source);return n&&i?BigInt(o.source):typeof e!="function"?s:e(t,s,o)}),Wn=Number.MAX_SAFE_INTEGER.toString(),Bn=Wn.length,yl=/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g,vl=/^"-?\d+n+"$/,Jn=(r,e)=>{if(!r)return qn(r,e);if(hl())return bl(r,e);let t=r.replace(yl,(s,o,n,i)=>{let a=s[0]==='"';if(a&&!!s.match(vl))return s.substring(0,s.length-1)+'n"';let l=n||i,d=o&&(o.length<Bn||o.length===Bn&&o<=Wn);return a||l||d?s:'"'+s+'n"'});return qn(t,(s,o,n)=>fl(s,o,n,e))}});var vt,Yn=O(()=>{vt=class extends Error{name;status;request;response;constructor(e,t,s){super(e,{cause:s.cause}),this.name="HttpError",this.status=Number.parseInt(t),Number.isNaN(this.status)&&(this.status=0);"response"in s&&(this.response=s.response);let o=Object.assign({},s.request);s.request.headers.authorization&&(o.headers=Object.assign({},s.request.headers,{authorization:s.request.headers.authorization.replace(/(?<! ) .*$/," [REDACTED]")})),o.url=o.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=o}}});function El(r){if(typeof r!="object"||r===null||Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);if(e===null)return!0;let t=Object.prototype.hasOwnProperty.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&Function.prototype.call(t)===Function.prototype.call(r)}async function Xn(r){let e=r.request?.fetch||globalThis.fetch;if(!e)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");let t=r.request?.log||console,s=r.request?.parseSuccessResponseBody!==!1,o=El(r.body)||Array.isArray(r.body)?zn(r.body):r.body,n=Object.fromEntries(Object.entries(r.headers).map(([p,m])=>[p,String(m)])),i;try{i=await e(r.url,{method:r.method,body:o,redirect:r.request?.redirect,headers:n,signal:r.request?.signal,...r.body&&{duplex:"half"}})}catch(p){let m="Unknown Error";if(p instanceof Error){if(p.name==="AbortError")throw p.status=500,p;m=p.message,p.name==="TypeError"&&"cause"in p&&(p.cause instanceof Error?m=p.cause.message:typeof p.cause=="string"&&(m=p.cause))}let w=new vt(m,500,{request:r});throw w.cause=p,w}let a=i.status,c=i.url,l={};for(let[p,m]of i.headers)l[p]=m;let d={url:c,status:a,headers:l,data:""};if("deprecation"in l){let p=l.link&&l.link.match(/<([^<>]+)>; rel="deprecation"/),m=p&&p.pop();t.warn(`[@octokit/request] "${r.method} ${r.url}" is deprecated. It is scheduled to be removed on ${l.sunset}${m?`. See ${m}`:""}`)}if(a===204||a===205)return d;if(r.method==="HEAD"){if(a<400)return d;throw new vt(i.statusText,a,{response:d,request:r})}if(a===304)throw d.data=await qr(i),new vt("Not modified",a,{response:d,request:r});if(a>=400)throw d.data=await qr(i),new vt(Tl(d.data),a,{response:d,request:r});return d.data=s?await qr(i):i.body,d}async function qr(r){let e=r.headers.get("content-type");if(!e)return r.text().catch(Qn);let t=(0,Zn.safeParse)(e);if(Rl(t)){let s="";try{return s=await r.text(),Jn(s)}catch{return s}}else return t.type.startsWith("text/")||t.parameters.charset?.toLowerCase()==="utf-8"?r.text().catch(Qn):r.arrayBuffer().catch(()=>new ArrayBuffer(0))}function Rl(r){return r.type==="application/json"||r.type==="application/scim+json"}function Tl(r){if(typeof r=="string")return r;if(r instanceof ArrayBuffer)return"Unknown error";if("message"in r){let e="documentation_url"in r?` - ${r.documentation_url}`:"";return Array.isArray(r.errors)?`${r.message}: ${r.errors.map(t=>JSON.stringify(t)).join(", ")}${e}`:`${r.message}${e}`}return`Unknown error: ${JSON.stringify(r)}`}function Br(r,e){let t=r.defaults(e);return Object.assign(function(o,n){let i=t.merge(o,n);if(!i.request||!i.request.hook)return Xn(t.parse(i));let a=(c,l)=>Xn(t.parse(t.merge(c,l)));return Object.assign(a,{endpoint:t,defaults:Br.bind(null,t)}),i.request.hook(a,i)},{endpoint:t,defaults:Br.bind(null,t)})}var Zn,_l,wl,Qn,Vt,Vr=O(()=>{Mn();Ht();Zn=K(Hn(),1);Kn();Yn();_l="10.0.8",wl={headers:{"user-agent":`octokit-request.js/${_l} ${ct()}`}};Qn=()=>"";Vt=Br(Un,wl);});function Cl(r){return`Request failed due to following response errors:
|
|
34
34
|
`+r.errors.map(e=>` - ${e.message}`).join(`
|
|
35
|
-
`)}function yl(r,e,t){if(t){if(typeof e=="string"&&"query"in t)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let i in t)if(bl.includes(i))return Promise.reject(new Error(`[@octokit/graphql] "${i}" cannot be used as variable name`))}let s=typeof e=="string"?Object.assign({query:e},t):e,o=Object.keys(s).reduce((i,a)=>fl.includes(a)?(i[a]=s[a],i):(i.variables||(i.variables={}),i.variables[a]=s[a],i),{}),n=s.baseUrl||r.endpoint.DEFAULTS.baseUrl;return Wn.test(n)&&(o.url=n.replace(Wn,"/api/graphql")),r(o).then(i=>{if(i.data.errors){let a={};for(let c of Object.keys(i.headers))a[c]=i.headers[c];throw new hl(o,a,i.data)}return i.data.data})}function Hr(r,e){let t=r.defaults(e);return Object.assign((o,n)=>yl(t,o,n),{defaults:Hr.bind(null,t),endpoint:t.endpoint})}function Jn(r){return Hr(r,{method:"POST",url:"/graphql"})}var gl,hl,fl,bl,Wn,pd,Kn=O(()=>{Nr();jt();gl="0.0.0-development";hl=class extends Error{constructor(r,e,t){super(ml(t)),this.request=r,this.headers=e,this.response=t,this.errors=t.errors,this.data=t.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},fl=["method","baseUrl","url","headers","request","query","mediaType","operationName"],bl=["query","method","url"],Wn=/\/api\/v3\/?$/;pd=Hr(qt,{headers:{"user-agent":`octokit-graphql.js/${gl} ${ot()}`},method:"POST",url:"/graphql"})});async function _l(r){let e=vl(r),t=r.startsWith("v1.")||r.startsWith("ghs_"),s=r.startsWith("ghu_");return{type:"token",token:r,tokenType:e?"app":t?"installation":s?"user-to-server":"oauth"}}function wl(r){return r.split(/\./).length===3?`bearer ${r}`:`token ${r}`}async function Rl(r,e,t,s){let o=e.endpoint.merge(t,s);return o.headers.authorization=wl(r),e(o)}var qr,Qn,Yn,vl,Xn,Zn=O(()=>{qr="(?:[a-zA-Z0-9_-]+)",Qn="\\.",Yn=new RegExp(`^${qr}${Qn}${qr}${Qn}${qr}$`),vl=Yn.test.bind(Yn);Xn=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(_l.bind(null,e),{hook:Rl.bind(null,e)})}});var Br,ei=O(()=>{Br="7.0.6"});function Cl(r={}){return typeof r.debug!="function"&&(r.debug=ti),typeof r.info!="function"&&(r.info=ti),typeof r.warn!="function"&&(r.warn=El),typeof r.error!="function"&&(r.error=Tl),r}var ti,El,Tl,si,Es,ri=O(()=>{jt();En();Nr();Kn();Zn();ei();ti=()=>{},El=console.warn.bind(console),Tl=console.error.bind(console);si=`octokit-core.js/${Br} ${ot()}`,Es=class{static VERSION=Br;static defaults(e){return class extends this{constructor(...s){let o=s[0]||{};if(typeof e=="function"){super(e(o));return}super(Object.assign({},e,o,o.userAgent&&e.userAgent?{userAgent:`${o.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let t=this.plugins;return class extends this{static plugins=t.concat(e.filter(o=>!t.includes(o)))}}constructor(e={}){let t=new Rn.Collection,s={baseUrl:qt.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,"request")}),mediaType:{previews:[],format:""}};if(s.headers["user-agent"]=e.userAgent?`${e.userAgent} ${si}`:si,e.baseUrl&&(s.baseUrl=e.baseUrl),e.previews&&(s.mediaType.previews=e.previews),e.timeZone&&(s.headers["time-zone"]=e.timeZone),this.request=qt.defaults(s),this.graphql=Jn(this.request).defaults(s),this.log=Cl(e.log),this.hook=t,e.authStrategy){let{authStrategy:n,...i}=e,a=n(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:i},e.auth));t.wrap("request",a.hook),this.auth=a}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let n=Xn(e.auth);t.wrap("request",n.hook),this.auth=n}let o=this.constructor;for(let n=0;n<o.plugins.length;++n)Object.assign(this,o.plugins[n](this,e))}request;graphql;log;hook;auth}});var oi,ni=O(()=>{oi="6.0.0"});function Vr(r){r.hook.wrap("request",(e,t)=>{r.log.debug("request",t);let s=Date.now(),o=r.request.endpoint.parse(t),n=o.url.replace(t.baseUrl,"");return e(t).then(i=>{let a=i.headers["x-github-request-id"];return r.log.info(`${o.method} ${n} - ${i.status} with id ${a} in ${Date.now()-s}ms`),i}).catch(i=>{let a=i.response?.headers["x-github-request-id"]||"UNKNOWN";throw r.log.error(`${o.method} ${n} - ${i.status} with id ${a} in ${Date.now()-s}ms`),i})})}var ii=O(()=>{ni();Vr.VERSION=oi});function Pl(r){if(!r.data)return{...r,data:[]};if(!(("total_count"in r.data||"total_commits"in r.data)&&!("url"in r.data)))return r;let t=r.data.incomplete_results,s=r.data.repository_selection,o=r.data.total_count,n=r.data.total_commits;delete r.data.incomplete_results,delete r.data.repository_selection,delete r.data.total_count,delete r.data.total_commits;let i=Object.keys(r.data)[0],a=r.data[i];return r.data=a,typeof t<"u"&&(r.data.incomplete_results=t),typeof s<"u"&&(r.data.repository_selection=s),r.data.total_count=o,r.data.total_commits=n,r}function zr(r,e,t){let s=typeof e=="function"?e.endpoint(t):r.request.endpoint(e,t),o=typeof e=="function"?e:r.request,n=s.method,i=s.headers,a=s.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!a)return{done:!0};try{let c=await o({method:n,url:a,headers:i}),l=Pl(c);if(a=((l.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!a&&"total_commits"in l.data){let p=new URL(l.url),d=p.searchParams,m=parseInt(d.get("page")||"1",10),v=parseInt(d.get("per_page")||"250",10);m*v<l.data.total_commits&&(d.set("page",String(m+1)),a=p.toString())}return{value:l}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function ai(r,e,t,s){return typeof t=="function"&&(s=t,t=void 0),ci(r,[],zr(r,e,t)[Symbol.asyncIterator](),s)}function ci(r,e,t,s){return t.next().then(o=>{if(o.done)return e;let n=!1;function i(){n=!0}return e=e.concat(s?s(o.value,i):o.value.data),n?e:ci(r,e,t,s)})}function Wr(r){return{paginate:Object.assign(ai.bind(null,r),{iterator:zr.bind(null,r)})}}var Sl,kd,li=O(()=>{Sl="0.0.0-development";kd=Object.assign(ai,{iterator:zr});Wr.VERSION=Sl});var Jr,ui=O(()=>{Jr="17.0.0"});var kl,pi,di=O(()=>{kl={actions:{addCustomLabelsToSelfHostedRunnerForOrg:["POST /orgs/{org}/actions/runners/{runner_id}/labels"],addCustomLabelsToSelfHostedRunnerForRepo:["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],addRepoAccessToSelfHostedRunnerGroupInOrg:["PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],approveWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createEnvironmentVariable:["POST /repos/{owner}/{repo}/environments/{environment_name}/variables"],createHostedRunnerForOrg:["POST /orgs/{org}/actions/hosted-runners"],createOrUpdateEnvironmentSecret:["PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],createOrgVariable:["POST /orgs/{org}/actions/variables"],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],createRepoVariable:["POST /repos/{owner}/{repo}/actions/variables"],createWorkflowDispatch:["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],deleteActionsCacheById:["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],deleteActionsCacheByKey:["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteCustomImageFromOrg:["DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}"],deleteCustomImageVersionFromOrg:["DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}"],deleteEnvironmentSecret:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],deleteEnvironmentVariable:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],deleteHostedRunnerForOrg:["DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],deleteRepoVariable:["DELETE /repos/{owner}/{repo}/actions/variables/{name}"],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRun:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],disableSelectedRepositoryGithubActionsOrganization:["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],disableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowRunAttemptLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],enableSelectedRepositoryGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],enableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],forceCancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"],generateRunnerJitconfigForOrg:["POST /orgs/{org}/actions/runners/generate-jitconfig"],generateRunnerJitconfigForRepo:["POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"],getActionsCacheList:["GET /repos/{owner}/{repo}/actions/caches"],getActionsCacheUsage:["GET /repos/{owner}/{repo}/actions/cache/usage"],getActionsCacheUsageByRepoForOrg:["GET /orgs/{org}/actions/cache/usage-by-repository"],getActionsCacheUsageForOrg:["GET /orgs/{org}/actions/cache/usage"],getAllowedActionsOrganization:["GET /orgs/{org}/actions/permissions/selected-actions"],getAllowedActionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getCustomImageForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}"],getCustomImageVersionForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}"],getCustomOidcSubClaimForRepo:["GET /repos/{owner}/{repo}/actions/oidc/customization/sub"],getEnvironmentPublicKey:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key"],getEnvironmentSecret:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],getEnvironmentVariable:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],getGithubActionsDefaultWorkflowPermissionsOrganization:["GET /orgs/{org}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/workflow"],getGithubActionsPermissionsOrganization:["GET /orgs/{org}/actions/permissions"],getGithubActionsPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions"],getHostedRunnerForOrg:["GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],getHostedRunnersGithubOwnedImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/github-owned"],getHostedRunnersLimitsForOrg:["GET /orgs/{org}/actions/hosted-runners/limits"],getHostedRunnersMachineSpecsForOrg:["GET /orgs/{org}/actions/hosted-runners/machine-sizes"],getHostedRunnersPartnerImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/partner"],getHostedRunnersPlatformsForOrg:["GET /orgs/{org}/actions/hosted-runners/platforms"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getOrgVariable:["GET /orgs/{org}/actions/variables/{name}"],getPendingDeploymentsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],getRepoPermissions:["GET /repos/{owner}/{repo}/actions/permissions",{},{renamed:["actions","getGithubActionsPermissionsRepository"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],getRepoVariable:["GET /repos/{owner}/{repo}/actions/variables/{name}"],getReviewsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowAccessToRepository:["GET /repos/{owner}/{repo}/actions/permissions/access"],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listCustomImageVersionsForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions"],listCustomImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom"],listEnvironmentSecrets:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets"],listEnvironmentVariables:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables"],listGithubHostedRunnersInGroupForOrg:["GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners"],listHostedRunnersForOrg:["GET /orgs/{org}/actions/hosted-runners"],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listJobsForWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],listLabelsForSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}/labels"],listLabelsForSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listOrgVariables:["GET /orgs/{org}/actions/variables"],listRepoOrganizationSecrets:["GET /repos/{owner}/{repo}/actions/organization-secrets"],listRepoOrganizationVariables:["GET /repos/{owner}/{repo}/actions/organization-variables"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoVariables:["GET /repos/{owner}/{repo}/actions/variables"],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelectedReposForOrgVariable:["GET /orgs/{org}/actions/variables/{name}/repositories"],listSelectedRepositoriesEnabledGithubActionsOrganization:["GET /orgs/{org}/actions/permissions/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunJobForWorkflowRun:["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],reRunWorkflowFailedJobs:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],removeAllCustomLabelsFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],removeAllCustomLabelsFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],removeCustomLabelFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],reviewCustomGatesForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"],reviewPendingDeploymentsForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],setAllowedActionsOrganization:["PUT /orgs/{org}/actions/permissions/selected-actions"],setAllowedActionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForOrg:["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],setCustomLabelsForSelfHostedRunnerForRepo:["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],setCustomOidcSubClaimForRepo:["PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"],setGithubActionsDefaultWorkflowPermissionsOrganization:["PUT /orgs/{org}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],setGithubActionsPermissionsOrganization:["PUT /orgs/{org}/actions/permissions"],setGithubActionsPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],setSelectedReposForOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories"],setSelectedRepositoriesEnabledGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories"],setWorkflowAccessToRepository:["PUT /repos/{owner}/{repo}/actions/permissions/access"],updateEnvironmentVariable:["PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],updateHostedRunnerForOrg:["PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],updateOrgVariable:["PATCH /orgs/{org}/actions/variables/{name}"],updateRepoVariable:["PATCH /repos/{owner}/{repo}/actions/variables/{name}"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listNotificationsForAuthenticatedUser:["GET /notifications"],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markNotificationsAsRead:["PUT /notifications"],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsDone:["DELETE /notifications/threads/{thread_id}"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","addRepoToInstallationForAuthenticatedUser"]}],addRepoToInstallationForAuthenticatedUser:["PUT /user/installations/{installation_id}/repositories/{repository_id}"],checkToken:["POST /applications/{client_id}/token"],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens"],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}"],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app"],getBySlug:["GET /apps/{app_slug}"],getInstallation:["GET /app/installations/{installation_id}"],getOrgInstallation:["GET /orgs/{org}/installation"],getRepoInstallation:["GET /repos/{owner}/{repo}/installation"],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation"],getWebhookConfigForApp:["GET /app/hook/config"],getWebhookDelivery:["GET /app/hook/deliveries/{delivery_id}"],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories"],listInstallationRequestsForAuthenticatedApp:["GET /app/installation-requests"],listInstallations:["GET /app/installations"],listInstallationsForAuthenticatedUser:["GET /user/installations"],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listReposAccessibleToInstallation:["GET /installation/repositories"],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],listWebhookDeliveries:["GET /app/hook/deliveries"],redeliverWebhookDelivery:["POST /app/hook/deliveries/{delivery_id}/attempts"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","removeRepoFromInstallationForAuthenticatedUser"]}],removeRepoFromInstallationForAuthenticatedUser:["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],scopeToken:["POST /applications/{client_id}/token/scoped"],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"],updateWebhookConfigForApp:["PATCH /app/hook/config"]},billing:{getGithubActionsBillingOrg:["GET /orgs/{org}/settings/billing/actions"],getGithubActionsBillingUser:["GET /users/{username}/settings/billing/actions"],getGithubBillingPremiumRequestUsageReportOrg:["GET /organizations/{org}/settings/billing/premium_request/usage"],getGithubBillingPremiumRequestUsageReportUser:["GET /users/{username}/settings/billing/premium_request/usage"],getGithubBillingUsageReportOrg:["GET /organizations/{org}/settings/billing/usage"],getGithubBillingUsageReportUser:["GET /users/{username}/settings/billing/usage"],getGithubPackagesBillingOrg:["GET /orgs/{org}/settings/billing/packages"],getGithubPackagesBillingUser:["GET /users/{username}/settings/billing/packages"],getSharedStorageBillingOrg:["GET /orgs/{org}/settings/billing/shared-storage"],getSharedStorageBillingUser:["GET /users/{username}/settings/billing/shared-storage"]},campaigns:{createCampaign:["POST /orgs/{org}/campaigns"],deleteCampaign:["DELETE /orgs/{org}/campaigns/{campaign_number}"],getCampaignSummary:["GET /orgs/{org}/campaigns/{campaign_number}"],listOrgCampaigns:["GET /orgs/{org}/campaigns"],updateCampaign:["PATCH /orgs/{org}/campaigns/{campaign_number}"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs"],createSuite:["POST /repos/{owner}/{repo}/check-suites"],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],rerequestRun:["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences"],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]},codeScanning:{commitAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits"],createAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],createVariantAnalysis:["POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses"],deleteAnalysis:["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],deleteCodeqlDatabase:["DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",{},{renamedParameters:{alert_id:"alert_number"}}],getAnalysis:["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],getAutofix:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],getCodeqlDatabase:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getDefaultSetup:["GET /repos/{owner}/{repo}/code-scanning/default-setup"],getSarif:["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],getVariantAnalysis:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}"],getVariantAnalysisRepoTask:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}"],listAlertInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],listAlertsForOrg:["GET /orgs/{org}/code-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"],listAlertsInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",{},{renamed:["codeScanning","listAlertInstances"]}],listCodeqlDatabases:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases"],listRecentAnalyses:["GET /repos/{owner}/{repo}/code-scanning/analyses"],updateAlert:["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],updateDefaultSetup:["PATCH /repos/{owner}/{repo}/code-scanning/default-setup"],uploadSarif:["POST /repos/{owner}/{repo}/code-scanning/sarifs"]},codeSecurity:{attachConfiguration:["POST /orgs/{org}/code-security/configurations/{configuration_id}/attach"],attachEnterpriseConfiguration:["POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach"],createConfiguration:["POST /orgs/{org}/code-security/configurations"],createConfigurationForEnterprise:["POST /enterprises/{enterprise}/code-security/configurations"],deleteConfiguration:["DELETE /orgs/{org}/code-security/configurations/{configuration_id}"],deleteConfigurationForEnterprise:["DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],detachConfiguration:["DELETE /orgs/{org}/code-security/configurations/detach"],getConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}"],getConfigurationForRepository:["GET /repos/{owner}/{repo}/code-security-configuration"],getConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations"],getConfigurationsForOrg:["GET /orgs/{org}/code-security/configurations"],getDefaultConfigurations:["GET /orgs/{org}/code-security/configurations/defaults"],getDefaultConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/defaults"],getRepositoriesForConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories"],getRepositoriesForEnterpriseConfiguration:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories"],getSingleConfigurationForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],setConfigurationAsDefault:["PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults"],setConfigurationAsDefaultForEnterprise:["PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults"],updateConfiguration:["PATCH /orgs/{org}/code-security/configurations/{configuration_id}"],updateEnterpriseConfiguration:["PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct"],getConductCode:["GET /codes_of_conduct/{key}"]},codespaces:{addRepositoryForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],checkPermissionsForDevcontainer:["GET /repos/{owner}/{repo}/codespaces/permissions_check"],codespaceMachinesForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/machines"],createForAuthenticatedUser:["POST /user/codespaces"],createOrUpdateOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],createOrUpdateSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}"],createWithPrForAuthenticatedUser:["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],createWithRepoForAuthenticatedUser:["POST /repos/{owner}/{repo}/codespaces"],deleteForAuthenticatedUser:["DELETE /user/codespaces/{codespace_name}"],deleteFromOrganization:["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],deleteOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],deleteSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}"],exportForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/exports"],getCodespacesForUserInOrg:["GET /orgs/{org}/members/{username}/codespaces"],getExportDetailsForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/exports/{export_id}"],getForAuthenticatedUser:["GET /user/codespaces/{codespace_name}"],getOrgPublicKey:["GET /orgs/{org}/codespaces/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}"],getPublicKeyForAuthenticatedUser:["GET /user/codespaces/secrets/public-key"],getRepoPublicKey:["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],getSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}"],listDevcontainersInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/devcontainers"],listForAuthenticatedUser:["GET /user/codespaces"],listInOrganization:["GET /orgs/{org}/codespaces",{},{renamedParameters:{org_id:"org"}}],listInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces"],listOrgSecrets:["GET /orgs/{org}/codespaces/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/codespaces/secrets"],listRepositoriesForSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}/repositories"],listSecretsForAuthenticatedUser:["GET /user/codespaces/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],preFlightWithRepoForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/new"],publishForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/publish"],removeRepositoryForSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],repoMachinesForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/machines"],setRepositoriesForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],startForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/start"],stopForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/stop"],stopInOrganization:["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],updateForAuthenticatedUser:["PATCH /user/codespaces/{codespace_name}"]},copilot:{addCopilotSeatsForTeams:["POST /orgs/{org}/copilot/billing/selected_teams"],addCopilotSeatsForUsers:["POST /orgs/{org}/copilot/billing/selected_users"],cancelCopilotSeatAssignmentForTeams:["DELETE /orgs/{org}/copilot/billing/selected_teams"],cancelCopilotSeatAssignmentForUsers:["DELETE /orgs/{org}/copilot/billing/selected_users"],copilotMetricsForOrganization:["GET /orgs/{org}/copilot/metrics"],copilotMetricsForTeam:["GET /orgs/{org}/team/{team_slug}/copilot/metrics"],getCopilotOrganizationDetails:["GET /orgs/{org}/copilot/billing"],getCopilotSeatDetailsForUser:["GET /orgs/{org}/members/{username}/copilot"],listCopilotSeats:["GET /orgs/{org}/copilot/billing/seats"]},credentials:{revoke:["POST /credentials/revoke"]},dependabot:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],getAlert:["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],getOrgPublicKey:["GET /orgs/{org}/dependabot/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}"],getRepoPublicKey:["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/dependabot/alerts"],listAlertsForOrg:["GET /orgs/{org}/dependabot/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/dependabot/alerts"],listOrgSecrets:["GET /orgs/{org}/dependabot/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/dependabot/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],repositoryAccessForOrg:["GET /organizations/{org}/dependabot/repository-access"],setRepositoryAccessDefaultLevel:["PUT /organizations/{org}/dependabot/repository-access/default-level"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],updateAlert:["PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],updateRepositoryAccessForOrg:["PATCH /organizations/{org}/dependabot/repository-access"]},dependencyGraph:{createRepositorySnapshot:["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],diffRange:["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"],exportSbom:["GET /repos/{owner}/{repo}/dependency-graph/sbom"]},emojis:{get:["GET /emojis"]},enterpriseTeamMemberships:{add:["PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}"],bulkAdd:["POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add"],bulkRemove:["POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove"],get:["GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}"],list:["GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships"],remove:["DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}"]},enterpriseTeamOrganizations:{add:["PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}"],bulkAdd:["POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add"],bulkRemove:["POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove"],delete:["DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}"],getAssignment:["GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}"],getAssignments:["GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations"]},enterpriseTeams:{create:["POST /enterprises/{enterprise}/teams"],delete:["DELETE /enterprises/{enterprise}/teams/{team_slug}"],get:["GET /enterprises/{enterprise}/teams/{team_slug}"],list:["GET /enterprises/{enterprise}/teams"],update:["PATCH /enterprises/{enterprise}/teams/{team_slug}"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"]},hostedCompute:{createNetworkConfigurationForOrg:["POST /orgs/{org}/settings/network-configurations"],deleteNetworkConfigurationFromOrg:["DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkConfigurationForOrg:["GET /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkSettingsForOrg:["GET /orgs/{org}/settings/network-settings/{network_settings_id}"],listNetworkConfigurationsForOrg:["GET /orgs/{org}/settings/network-configurations"],updateNetworkConfigurationForOrg:["PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}"]},interactions:{getRestrictionsForAuthenticatedUser:["GET /user/interaction-limits"],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits"],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits"],getRestrictionsForYourPublicRepos:["GET /user/interaction-limits",{},{renamed:["interactions","getRestrictionsForAuthenticatedUser"]}],removeRestrictionsForAuthenticatedUser:["DELETE /user/interaction-limits"],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits"],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits"],removeRestrictionsForYourPublicRepos:["DELETE /user/interaction-limits",{},{renamed:["interactions","removeRestrictionsForAuthenticatedUser"]}],setRestrictionsForAuthenticatedUser:["PUT /user/interaction-limits"],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits"],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits"],setRestrictionsForYourPublicRepos:["PUT /user/interaction-limits",{},{renamed:["interactions","setRestrictionsForAuthenticatedUser"]}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addBlockedByDependency:["POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],addSubIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],checkUserCanBeAssignedToIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],getParent:["GET /repos/{owner}/{repo}/issues/{issue_number}/parent"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listDependenciesBlockedBy:["GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by"],listDependenciesBlocking:["GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],listSubIssues:["GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeDependencyBlockedBy:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],removeSubIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue"],reprioritizeSubIssue:["PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority"],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"],getAllVersions:["GET /versions"],getOctocat:["GET /octocat"],getZen:["GET /zen"],root:["GET /"]},migrations:{deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive"],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive"],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive"],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}"],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}"],listForAuthenticatedUser:["GET /user/migrations"],listForOrg:["GET /orgs/{org}/migrations"],listReposForAuthenticatedUser:["GET /user/migrations/{migration_id}/repositories"],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories"],listReposForUser:["GET /user/migrations/{migration_id}/repositories",{},{renamed:["migrations","listReposForAuthenticatedUser"]}],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"]},oidc:{getOidcCustomSubTemplateForOrg:["GET /orgs/{org}/actions/oidc/customization/sub"],updateOidcCustomSubTemplateForOrg:["PUT /orgs/{org}/actions/oidc/customization/sub"]},orgs:{addSecurityManagerTeam:["PUT /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team"}],assignTeamToOrgRole:["PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],assignUserToOrgRole:["PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"],blockUser:["PUT /orgs/{org}/blocks/{username}"],cancelInvitation:["DELETE /orgs/{org}/invitations/{invitation_id}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createArtifactStorageRecord:["POST /orgs/{org}/artifacts/metadata/storage-record"],createInvitation:["POST /orgs/{org}/invitations"],createIssueType:["POST /orgs/{org}/issue-types"],createWebhook:["POST /orgs/{org}/hooks"],customPropertiesForOrgsCreateOrUpdateOrganizationValues:["PATCH /organizations/{org}/org-properties/values"],customPropertiesForOrgsGetOrganizationValues:["GET /organizations/{org}/org-properties/values"],customPropertiesForReposCreateOrUpdateOrganizationDefinition:["PUT /orgs/{org}/properties/schema/{custom_property_name}"],customPropertiesForReposCreateOrUpdateOrganizationDefinitions:["PATCH /orgs/{org}/properties/schema"],customPropertiesForReposCreateOrUpdateOrganizationValues:["PATCH /orgs/{org}/properties/values"],customPropertiesForReposDeleteOrganizationDefinition:["DELETE /orgs/{org}/properties/schema/{custom_property_name}"],customPropertiesForReposGetOrganizationDefinition:["GET /orgs/{org}/properties/schema/{custom_property_name}"],customPropertiesForReposGetOrganizationDefinitions:["GET /orgs/{org}/properties/schema"],customPropertiesForReposGetOrganizationValues:["GET /orgs/{org}/properties/values"],delete:["DELETE /orgs/{org}"],deleteAttestationsBulk:["POST /orgs/{org}/attestations/delete-request"],deleteAttestationsById:["DELETE /orgs/{org}/attestations/{attestation_id}"],deleteAttestationsBySubjectDigest:["DELETE /orgs/{org}/attestations/digest/{subject_digest}"],deleteIssueType:["DELETE /orgs/{org}/issue-types/{issue_type_id}"],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],disableSelectedRepositoryImmutableReleasesOrganization:["DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}"],enableSelectedRepositoryImmutableReleasesOrganization:["PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}"],get:["GET /orgs/{org}"],getImmutableReleasesSettings:["GET /orgs/{org}/settings/immutable-releases"],getImmutableReleasesSettingsRepositories:["GET /orgs/{org}/settings/immutable-releases/repositories"],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getOrgRole:["GET /orgs/{org}/organization-roles/{role_id}"],getOrgRulesetHistory:["GET /orgs/{org}/rulesets/{ruleset_id}/history"],getOrgRulesetVersion:["GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],getWebhookConfigForOrg:["GET /orgs/{org}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations"],listArtifactStorageRecords:["GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records"],listAttestationRepositories:["GET /orgs/{org}/attestations/repositories"],listAttestations:["GET /orgs/{org}/attestations/{subject_digest}"],listAttestationsBulk:["POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}"],listBlockedUsers:["GET /orgs/{org}/blocks"],listFailedInvitations:["GET /orgs/{org}/failed_invitations"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listIssueTypes:["GET /orgs/{org}/issue-types"],listMembers:["GET /orgs/{org}/members"],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOrgRoleTeams:["GET /orgs/{org}/organization-roles/{role_id}/teams"],listOrgRoleUsers:["GET /orgs/{org}/organization-roles/{role_id}/users"],listOrgRoles:["GET /orgs/{org}/organization-roles"],listOrganizationFineGrainedPermissions:["GET /orgs/{org}/organization-fine-grained-permissions"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPatGrantRepositories:["GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"],listPatGrantRequestRepositories:["GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"],listPatGrantRequests:["GET /orgs/{org}/personal-access-token-requests"],listPatGrants:["GET /orgs/{org}/personal-access-tokens"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listSecurityManagerTeams:["GET /orgs/{org}/security-managers",{},{deprecated:"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams"}],listWebhookDeliveries:["GET /orgs/{org}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /orgs/{org}/hooks"],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],removeSecurityManagerTeam:["DELETE /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team"}],reviewPatGrantRequest:["POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"],reviewPatGrantRequestsInBulk:["POST /orgs/{org}/personal-access-token-requests"],revokeAllOrgRolesTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}"],revokeAllOrgRolesUser:["DELETE /orgs/{org}/organization-roles/users/{username}"],revokeOrgRoleTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],revokeOrgRoleUser:["DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"],setImmutableReleasesSettings:["PUT /orgs/{org}/settings/immutable-releases"],setImmutableReleasesSettingsRepositories:["PUT /orgs/{org}/settings/immutable-releases/repositories"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateIssueType:["PUT /orgs/{org}/issue-types/{issue_type_id}"],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updatePatAccess:["POST /orgs/{org}/personal-access-tokens/{pat_id}"],updatePatAccesses:["POST /orgs/{org}/personal-access-tokens"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"],updateWebhookConfigForOrg:["PATCH /orgs/{org}/hooks/{hook_id}/config"]},packages:{deletePackageForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}"],deletePackageForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],deletePackageForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}"],deletePackageVersionForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getAllPackageVersionsForAPackageOwnedByAnOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByOrg"]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions"],getPackageForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}"],getPackageForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}"],getPackageForUser:["GET /users/{username}/packages/{package_type}/{package_name}"],getPackageVersionForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],listDockerMigrationConflictingPackagesForAuthenticatedUser:["GET /user/docker/conflicts"],listDockerMigrationConflictingPackagesForOrganization:["GET /orgs/{org}/docker/conflicts"],listDockerMigrationConflictingPackagesForUser:["GET /users/{username}/docker/conflicts"],listPackagesForAuthenticatedUser:["GET /user/packages"],listPackagesForOrganization:["GET /orgs/{org}/packages"],listPackagesForUser:["GET /users/{username}/packages"],restorePackageForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForUser:["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageVersionForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForUser:["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]},privateRegistries:{createOrgPrivateRegistry:["POST /orgs/{org}/private-registries"],deleteOrgPrivateRegistry:["DELETE /orgs/{org}/private-registries/{secret_name}"],getOrgPrivateRegistry:["GET /orgs/{org}/private-registries/{secret_name}"],getOrgPublicKey:["GET /orgs/{org}/private-registries/public-key"],listOrgPrivateRegistries:["GET /orgs/{org}/private-registries"],updateOrgPrivateRegistry:["PATCH /orgs/{org}/private-registries/{secret_name}"]},projects:{addItemForOrg:["POST /orgs/{org}/projectsV2/{project_number}/items"],addItemForUser:["POST /users/{username}/projectsV2/{project_number}/items"],deleteItemForOrg:["DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}"],deleteItemForUser:["DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}"],getFieldForOrg:["GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}"],getFieldForUser:["GET /users/{username}/projectsV2/{project_number}/fields/{field_id}"],getForOrg:["GET /orgs/{org}/projectsV2/{project_number}"],getForUser:["GET /users/{username}/projectsV2/{project_number}"],getOrgItem:["GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}"],getUserItem:["GET /users/{username}/projectsV2/{project_number}/items/{item_id}"],listFieldsForOrg:["GET /orgs/{org}/projectsV2/{project_number}/fields"],listFieldsForUser:["GET /users/{username}/projectsV2/{project_number}/fields"],listForOrg:["GET /orgs/{org}/projectsV2"],listForUser:["GET /users/{username}/projectsV2"],listItemsForOrg:["GET /orgs/{org}/projectsV2/{project_number}/items"],listItemsForUser:["GET /users/{username}/projectsV2/{project_number}/items"],updateItemForOrg:["PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}"],updateItemForUser:["PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}"]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],createForRelease:["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],deleteForRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],listForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}",{},{renamed:["repos","acceptInvitationForAuthenticatedUser"]}],acceptInvitationForAuthenticatedUser:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],cancelPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"],checkAutomatedSecurityFixes:["GET /repos/{owner}/{repo}/automated-security-fixes"],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkImmutableReleases:["GET /repos/{owner}/{repo}/immutable-releases"],checkPrivateVulnerabilityReporting:["GET /repos/{owner}/{repo}/private-vulnerability-reporting"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts"],codeownersErrors:["GET /repos/{owner}/{repo}/codeowners/errors"],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],compareCommitsWithBasehead:["GET /repos/{owner}/{repo}/compare/{basehead}"],createAttestation:["POST /repos/{owner}/{repo}/attestations"],createAutolink:["POST /repos/{owner}/{repo}/autolinks"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentBranchPolicy:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],createDeploymentProtectionRule:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateEnvironment:["PUT /repos/{owner}/{repo}/environments/{environment_name}"],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createOrgRuleset:["POST /orgs/{org}/rulesets"],createPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments"],createPagesSite:["POST /repos/{owner}/{repo}/pages"],createRelease:["POST /repos/{owner}/{repo}/releases"],createRepoRuleset:["POST /repos/{owner}/{repo}/rulesets"],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate"],createWebhook:["POST /repos/{owner}/{repo}/hooks"],customPropertiesForReposCreateOrUpdateRepositoryValues:["PATCH /repos/{owner}/{repo}/properties/values"],customPropertiesForReposGetRepositoryValues:["GET /repos/{owner}/{repo}/properties/values"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}",{},{renamed:["repos","declineInvitationForAuthenticatedUser"]}],declineInvitationForAuthenticatedUser:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteAnEnvironment:["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],deleteAutolink:["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteDeploymentBranchPolicy:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deleteOrgRuleset:["DELETE /orgs/{org}/rulesets/{ruleset_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages"],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteRepoRuleset:["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes"],disableDeploymentProtectionRule:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],disableImmutableReleases:["DELETE /repos/{owner}/{repo}/immutable-releases"],disablePrivateVulnerabilityReporting:["DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],downloadArchive:["GET /repos/{owner}/{repo}/zipball/{ref}",{},{renamed:["repos","downloadZipballArchive"]}],downloadTarballArchive:["GET /repos/{owner}/{repo}/tarball/{ref}"],downloadZipballArchive:["GET /repos/{owner}/{repo}/zipball/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes"],enableImmutableReleases:["PUT /repos/{owner}/{repo}/immutable-releases"],enablePrivateVulnerabilityReporting:["PUT /repos/{owner}/{repo}/private-vulnerability-reporting"],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts"],generateReleaseNotes:["POST /repos/{owner}/{repo}/releases/generate-notes"],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllDeploymentProtectionRules:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],getAllEnvironments:["GET /repos/{owner}/{repo}/environments"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics"],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getAutolink:["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getBranchRules:["GET /repos/{owner}/{repo}/rules/branches/{branch}"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getCustomDeploymentProtectionRule:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentBranchPolicy:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getEnvironment:["GET /repos/{owner}/{repo}/environments/{environment_name}"],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getOrgRuleSuite:["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],getOrgRuleSuites:["GET /orgs/{org}/rulesets/rule-suites"],getOrgRuleset:["GET /orgs/{org}/rulesets/{ruleset_id}"],getOrgRulesets:["GET /orgs/{org}/rulesets"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getPagesDeployment:["GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"],getPagesHealthCheck:["GET /repos/{owner}/{repo}/pages/health"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getReadmeInDirectory:["GET /repos/{owner}/{repo}/readme/{dir}"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getRepoRuleSuite:["GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"],getRepoRuleSuites:["GET /repos/{owner}/{repo}/rulesets/rule-suites"],getRepoRuleset:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],getRepoRulesetHistory:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history"],getRepoRulesetVersion:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}"],getRepoRulesets:["GET /repos/{owner}/{repo}/rulesets"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],getWebhookConfigForRepo:["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],listActivities:["GET /repos/{owner}/{repo}/activity"],listAttestations:["GET /repos/{owner}/{repo}/attestations/{subject_digest}"],listAutolinks:["GET /repos/{owner}/{repo}/autolinks"],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listCustomDeploymentRuleIntegrations:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentBranchPolicies:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listWebhookDeliveries:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],mergeUpstream:["POST /repos/{owner}/{repo}/merge-upstream"],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],renameBranch:["POST /repos/{owner}/{repo}/branches/{branch}/rename"],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics"],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateDeploymentBranchPolicy:["PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updateOrgRuleset:["PUT /orgs/{org}/rulesets/{ruleset_id}"],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateRepoRuleset:["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusCheckProtection"]}],updateStatusCheckProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],updateWebhookConfigForRepo:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits"],issuesAndPullRequests:["GET /search/issues"],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},secretScanning:{createPushProtectionBypass:["POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses"],getAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],getScanHistory:["GET /repos/{owner}/{repo}/secret-scanning/scan-history"],listAlertsForOrg:["GET /orgs/{org}/secret-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/secret-scanning/alerts"],listLocationsForAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],listOrgPatternConfigs:["GET /orgs/{org}/secret-scanning/pattern-configurations"],updateAlert:["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],updateOrgPatternConfigs:["PATCH /orgs/{org}/secret-scanning/pattern-configurations"]},securityAdvisories:{createFork:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"],createPrivateVulnerabilityReport:["POST /repos/{owner}/{repo}/security-advisories/reports"],createRepositoryAdvisory:["POST /repos/{owner}/{repo}/security-advisories"],createRepositoryAdvisoryCveRequest:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"],getGlobalAdvisory:["GET /advisories/{ghsa_id}"],getRepositoryAdvisory:["GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"],listGlobalAdvisories:["GET /advisories"],listOrgRepositoryAdvisories:["GET /orgs/{org}/security-advisories"],listRepositoryAdvisories:["GET /repos/{owner}/{repo}/security-advisories"],updateRepositoryAdvisory:["PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails",{},{renamed:["users","addEmailForAuthenticatedUser"]}],addEmailForAuthenticatedUser:["POST /user/emails"],addSocialAccountForAuthenticatedUser:["POST /user/social_accounts"],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKeyForAuthenticated:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticatedUser"]}],createGpgKeyForAuthenticatedUser:["POST /user/gpg_keys"],createPublicSshKeyForAuthenticated:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticatedUser"]}],createPublicSshKeyForAuthenticatedUser:["POST /user/keys"],createSshSigningKeyForAuthenticatedUser:["POST /user/ssh_signing_keys"],deleteAttestationsBulk:["POST /users/{username}/attestations/delete-request"],deleteAttestationsById:["DELETE /users/{username}/attestations/{attestation_id}"],deleteAttestationsBySubjectDigest:["DELETE /users/{username}/attestations/digest/{subject_digest}"],deleteEmailForAuthenticated:["DELETE /user/emails",{},{renamed:["users","deleteEmailForAuthenticatedUser"]}],deleteEmailForAuthenticatedUser:["DELETE /user/emails"],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticatedUser"]}],deleteGpgKeyForAuthenticatedUser:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticatedUser"]}],deletePublicSshKeyForAuthenticatedUser:["DELETE /user/keys/{key_id}"],deleteSocialAccountForAuthenticatedUser:["DELETE /user/social_accounts"],deleteSshSigningKeyForAuthenticatedUser:["DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getById:["GET /user/{account_id}"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticatedUser"]}],getGpgKeyForAuthenticatedUser:["GET /user/gpg_keys/{gpg_key_id}"],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticatedUser"]}],getPublicSshKeyForAuthenticatedUser:["GET /user/keys/{key_id}"],getSshSigningKeyForAuthenticatedUser:["GET /user/ssh_signing_keys/{ssh_signing_key_id}"],list:["GET /users"],listAttestations:["GET /users/{username}/attestations/{subject_digest}"],listAttestationsBulk:["POST /users/{username}/attestations/bulk-list{?per_page,before,after}"],listBlockedByAuthenticated:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticatedUser"]}],listBlockedByAuthenticatedUser:["GET /user/blocks"],listEmailsForAuthenticated:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticatedUser"]}],listEmailsForAuthenticatedUser:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticatedUser"]}],listFollowedByAuthenticatedUser:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForUser:["GET /users/{username}/following"],listGpgKeysForAuthenticated:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticatedUser"]}],listGpgKeysForAuthenticatedUser:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmailsForAuthenticated:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticatedUser:["GET /user/public_emails"],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticatedUser"]}],listPublicSshKeysForAuthenticatedUser:["GET /user/keys"],listSocialAccountsForAuthenticatedUser:["GET /user/social_accounts"],listSocialAccountsForUser:["GET /users/{username}/social_accounts"],listSshSigningKeysForAuthenticatedUser:["GET /user/ssh_signing_keys"],listSshSigningKeysForUser:["GET /users/{username}/ssh_signing_keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticatedUser"]}],setPrimaryEmailVisibilityForAuthenticatedUser:["PATCH /user/email/visibility"],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}},pi=kl});function Kr(r){let e={};for(let t of ht.keys())e[t]=new Proxy({octokit:r,scope:t,cache:{}},Al);return e}function Ol(r,e,t,s,o){let n=r.request.defaults(s);function i(...a){let c=n.endpoint.merge(...a);if(o.mapToData)return c=Object.assign({},c,{data:c[o.mapToData],[o.mapToData]:void 0}),n(c);if(o.renamed){let[l,p]=o.renamed;r.log.warn(`octokit.${e}.${t}() has been renamed to octokit.${l}.${p}()`)}if(o.deprecated&&r.log.warn(o.deprecated),o.renamedParameters){let l=n.endpoint.merge(...a);for(let[p,d]of Object.entries(o.renamedParameters))p in l&&(r.log.warn(`"${p}" parameter is deprecated for "octokit.${e}.${t}()". Use "${d}" instead`),d in l||(l[d]=l[p]),delete l[p]);return n(l)}return n(...a)}return Object.assign(i,n)}var ht,Al,gi=O(()=>{di();ht=new Map;for(let[r,e]of Object.entries(pi))for(let[t,s]of Object.entries(e)){let[o,n,i]=s,[a,c]=o.split(/ /),l=Object.assign({method:a,url:c},n);ht.has(r)||ht.set(r,new Map),ht.get(r).set(t,{scope:r,methodName:t,endpointDefaults:l,decorations:i})}Al={has({scope:r},e){return ht.get(r).has(e)},getOwnPropertyDescriptor(r,e){return{value:this.get(r,e),configurable:!0,writable:!0,enumerable:!0}},defineProperty(r,e,t){return Object.defineProperty(r.cache,e,t),!0},deleteProperty(r,e){return delete r.cache[e],!0},ownKeys({scope:r}){return[...ht.get(r).keys()]},set(r,e,t){return r.cache[e]=t},get({octokit:r,scope:e,cache:t},s){if(t[s])return t[s];let o=ht.get(e).get(s);if(!o)return;let{endpointDefaults:n,decorations:i}=o;return i?t[s]=Ol(r,e,s,n,i):t[s]=r.request.defaults(n),t[s]}}});function $l(r){return{rest:Kr(r)}}function Qr(r){let e=Kr(r);return{...e,rest:e}}var mi=O(()=>{ui();gi();$l.VERSION=Jr;Qr.VERSION=Jr});var hi,fi=O(()=>{hi="22.0.1"});var bi,yi=O(()=>{ri();ii();li();mi();fi();bi=Es.plugin(Vr,Qr,Wr).defaults({userAgent:`octokit-rest.js/${hi}`})});var vi=ze((Yr,Xr)=>{(function(r,e){typeof Yr=="object"&&typeof Xr<"u"?Xr.exports=e():typeof define=="function"&&define.amd?define(e):r.Bottleneck=e()})(Yr,(function(){"use strict";var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function e(x){return x&&x.default||x}var t=function(x,f,u={}){var b,_,R;for(b in f)R=f[b],u[b]=(_=x[b])!=null?_:R;return u},s=function(x,f,u={}){var b,_;for(b in x)_=x[b],f[b]!==void 0&&(u[b]=_);return u},o={load:t,overwrite:s},n;n=class{constructor(f,u){this.incr=f,this.decr=u,this._first=null,this._last=null,this.length=0}push(f){var u;this.length++,typeof this.incr=="function"&&this.incr(),u={value:f,prev:this._last,next:null},this._last!=null?(this._last.next=u,this._last=u):this._first=this._last=u}shift(){var f;if(this._first!=null)return this.length--,typeof this.decr=="function"&&this.decr(),f=this._first.value,(this._first=this._first.next)!=null?this._first.prev=null:this._last=null,f}first(){if(this._first!=null)return this._first.value}getArray(){var f,u,b;for(f=this._first,b=[];f!=null;)b.push((u=f,f=f.next,u.value));return b}forEachShift(f){var u;for(u=this.shift();u!=null;)f(u),u=this.shift()}debug(){var f,u,b,_,R;for(f=this._first,R=[];f!=null;)R.push((u=f,f=f.next,{value:u.value,prev:(b=u.prev)!=null?b.value:void 0,next:(_=u.next)!=null?_.value:void 0}));return R}};var i=n,a;a=class{constructor(f){if(this.instance=f,this._events={},this.instance.on!=null||this.instance.once!=null||this.instance.removeAllListeners!=null)throw new Error("An Emitter already exists for this object");this.instance.on=(u,b)=>this._addListener(u,"many",b),this.instance.once=(u,b)=>this._addListener(u,"once",b),this.instance.removeAllListeners=(u=null)=>u!=null?delete this._events[u]:this._events={}}_addListener(f,u,b){var _;return(_=this._events)[f]==null&&(_[f]=[]),this._events[f].push({cb:b,status:u}),this.instance}listenerCount(f){return this._events[f]!=null?this._events[f].length:0}async trigger(f,...u){var b,_;try{return f!=="debug"&&this.trigger("debug",`Event triggered: ${f}`,u),this._events[f]==null?void 0:(this._events[f]=this._events[f].filter(function(R){return R.status!=="none"}),_=this._events[f].map(async R=>{var S,G;if(R.status!=="none"){R.status==="once"&&(R.status="none");try{return G=typeof R.cb=="function"?R.cb(...u):void 0,typeof G?.then=="function"?await G:G}catch(W){return S=W,this.trigger("error",S),null}}}),(await Promise.all(_)).find(function(R){return R!=null}))}catch(R){return b=R,this.trigger("error",b),null}}};var c=a,l,p,d;l=i,p=c,d=class{constructor(f){var u;this.Events=new p(this),this._length=0,this._lists=(function(){var b,_,R;for(R=[],u=b=1,_=f;1<=_?b<=_:b>=_;u=1<=_?++b:--b)R.push(new l((()=>this.incr()),(()=>this.decr())));return R}).call(this)}incr(){if(this._length++===0)return this.Events.trigger("leftzero")}decr(){if(--this._length===0)return this.Events.trigger("zero")}push(f){return this._lists[f.options.priority].push(f)}queued(f){return f!=null?this._lists[f].length:this._length}shiftAll(f){return this._lists.forEach(function(u){return u.forEachShift(f)})}getFirst(f=this._lists){var u,b,_;for(u=0,b=f.length;u<b;u++)if(_=f[u],_.length>0)return _;return[]}shiftLastFrom(f){return this.getFirst(this._lists.slice(f).reverse()).shift()}};var m=d,v;v=class extends Error{};var y=v,g,C,h,k,E;k=10,C=5,E=o,g=y,h=class{constructor(f,u,b,_,R,S,G,W){this.task=f,this.args=u,this.rejectOnDrop=R,this.Events=S,this._states=G,this.Promise=W,this.options=E.load(b,_),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===_.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((pe,ge)=>{this._resolve=pe,this._reject=ge}),this.retryCount=0}_sanitizePriority(f){var u;return u=~~f!==f?C:f,u<0?0:u>k-1?k-1:u}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:f,message:u="This job has been dropped by Bottleneck"}={}){return this._states.remove(this.options.id)?(this.rejectOnDrop&&this._reject(f??new g(u)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0):!1}_assertStatus(f){var u;if(u=this._states.jobStatus(this.options.id),!(u===f||f==="DONE"&&u===null))throw new g(`Invalid job status ${u}, expected ${f}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`)}doReceive(){return this._states.start(this.options.id),this.Events.trigger("received",{args:this.args,options:this.options})}doQueue(f,u){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:f,blocked:u})}doRun(){return this.retryCount===0?(this._assertStatus("QUEUED"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),this.Events.trigger("scheduled",{args:this.args,options:this.options})}async doExecute(f,u,b,_){var R,S,G;this.retryCount===0?(this._assertStatus("RUNNING"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),S={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",S);try{if(G=await(f!=null?f.schedule(this.options,this.task,...this.args):this.task(...this.args)),u())return this.doDone(S),await _(this.options,S),this._assertStatus("DONE"),this._resolve(G)}catch(W){return R=W,this._onFailure(R,S,u,b,_)}}doExpire(f,u,b){var _,R;return this._states.jobStatus(this.options.id==="RUNNING")&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),R={args:this.args,options:this.options,retryCount:this.retryCount},_=new g(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(_,R,f,u,b)}async _onFailure(f,u,b,_,R){var S,G;if(b())return S=await this.Events.trigger("failed",f,u),S!=null?(G=~~S,this.Events.trigger("retry",`Retrying ${this.options.id} after ${G} ms`,u),this.retryCount++,_(G)):(this.doDone(u),await R(this.options,u),this._assertStatus("DONE"),this._reject(f))}doDone(f){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",f)}};var w=h,U,$,I;I=o,U=y,$=class{constructor(f,u,b){this.instance=f,this.storeOptions=u,this.clientId=this.instance._randomIndex(),I.load(b,b,this),this._nextRequest=this._lastReservoirRefresh=this._lastReservoirIncrease=Date.now(),this._running=0,this._done=0,this._unblockTime=0,this.ready=this.Promise.resolve(),this.clients={},this._startHeartbeat()}_startHeartbeat(){var f;return this.heartbeat==null&&(this.storeOptions.reservoirRefreshInterval!=null&&this.storeOptions.reservoirRefreshAmount!=null||this.storeOptions.reservoirIncreaseInterval!=null&&this.storeOptions.reservoirIncreaseAmount!=null)?typeof(f=this.heartbeat=setInterval(()=>{var u,b,_,R,S;if(R=Date.now(),this.storeOptions.reservoirRefreshInterval!=null&&R>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=R,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),this.storeOptions.reservoirIncreaseInterval!=null&&R>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval&&({reservoirIncreaseAmount:u,reservoirIncreaseMaximum:_,reservoir:S}=this.storeOptions,this._lastReservoirIncrease=R,b=_!=null?Math.min(u,_-S):u,b>0))return this.storeOptions.reservoir+=b,this.instance._drainAll(this.computeCapacity())},this.heartbeatInterval)).unref=="function"?f.unref():void 0:clearInterval(this.heartbeat)}async __publish__(f){return await this.yieldLoop(),this.instance.Events.trigger("message",f.toString())}async __disconnect__(f){return await this.yieldLoop(),clearInterval(this.heartbeat),this.Promise.resolve()}yieldLoop(f=0){return new this.Promise(function(u,b){return setTimeout(u,f)})}computePenalty(){var f;return(f=this.storeOptions.penalty)!=null?f:15*this.storeOptions.minTime||5e3}async __updateSettings__(f){return await this.yieldLoop(),I.overwrite(f,f,this.storeOptions),this._startHeartbeat(),this.instance._drainAll(this.computeCapacity()),!0}async __running__(){return await this.yieldLoop(),this._running}async __queued__(){return await this.yieldLoop(),this.instance.queued()}async __done__(){return await this.yieldLoop(),this._done}async __groupCheck__(f){return await this.yieldLoop(),this._nextRequest+this.timeout<f}computeCapacity(){var f,u;return{maxConcurrent:f,reservoir:u}=this.storeOptions,f!=null&&u!=null?Math.min(f-this._running,u):f!=null?f-this._running:u??null}conditionsCheck(f){var u;return u=this.computeCapacity(),u==null||f<=u}async __incrementReservoir__(f){var u;return await this.yieldLoop(),u=this.storeOptions.reservoir+=f,this.instance._drainAll(this.computeCapacity()),u}async __currentReservoir__(){return await this.yieldLoop(),this.storeOptions.reservoir}isBlocked(f){return this._unblockTime>=f}check(f,u){return this.conditionsCheck(f)&&this._nextRequest-u<=0}async __check__(f){var u;return await this.yieldLoop(),u=Date.now(),this.check(f,u)}async __register__(f,u,b){var _,R;return await this.yieldLoop(),_=Date.now(),this.conditionsCheck(u)?(this._running+=u,this.storeOptions.reservoir!=null&&(this.storeOptions.reservoir-=u),R=Math.max(this._nextRequest-_,0),this._nextRequest=_+R+this.storeOptions.minTime,{success:!0,wait:R,reservoir:this.storeOptions.reservoir}):{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(f,u){var b,_,R;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&u>this.storeOptions.maxConcurrent)throw new U(`Impossible to add a job having a weight of ${u} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);return _=Date.now(),R=this.storeOptions.highWater!=null&&f===this.storeOptions.highWater&&!this.check(u,_),b=this.strategyIsBlock()&&(R||this.isBlocked(_)),b&&(this._unblockTime=_+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued()),{reachedHWM:R,blocked:b,strategy:this.storeOptions.strategy}}async __free__(f,u){return await this.yieldLoop(),this._running-=u,this._done+=u,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var j=$,H,he;H=y,he=class{constructor(f){this.status=f,this._jobs={},this.counts=this.status.map(function(){return 0})}next(f){var u,b;if(u=this._jobs[f],b=u+1,u!=null&&b<this.status.length)return this.counts[u]--,this.counts[b]++,this._jobs[f]++;if(u!=null)return this.counts[u]--,delete this._jobs[f]}start(f){var u;return u=0,this._jobs[f]=u,this.counts[u]++}remove(f){var u;return u=this._jobs[f],u!=null&&(this.counts[u]--,delete this._jobs[f]),u!=null}jobStatus(f){var u;return(u=this.status[this._jobs[f]])!=null?u:null}statusJobs(f){var u,b,_,R,S;if(f!=null){if(b=this.status.indexOf(f),b<0)throw new H(`status must be one of ${this.status.join(", ")}`);_=this._jobs,R=[];for(u in _)S=_[u],S===b&&R.push(u);return R}else return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce(((f,u,b)=>(f[this.status[b]]=u,f)),{})}};var xe=he,Re,fe;Re=i,fe=class{constructor(f,u){this.schedule=this.schedule.bind(this),this.name=f,this.Promise=u,this._running=0,this._queue=new Re}isEmpty(){return this._queue.length===0}async _tryToRun(){var f,u,b,_,R,S,G;if(this._running<1&&this._queue.length>0)return this._running++,{task:G,args:f,resolve:R,reject:_}=this._queue.shift(),u=await(async function(){try{return S=await G(...f),function(){return R(S)}}catch(W){return b=W,function(){return _(b)}}})(),this._running--,this._tryToRun(),u()}schedule(f,...u){var b,_,R;return R=_=null,b=new this.Promise(function(S,G){return R=S,_=G}),this._queue.push({task:f,args:u,resolve:R,reject:_}),this._tryToRun(),b}};var Be=fe,Ee="2.19.5",z={version:Ee},ne=Object.freeze({version:Ee,default:z}),D=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),q=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),te=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),ue,Z,le,De,st,Ve;Ve=o,ue=c,De=D,le=q,st=te,Z=(function(){class x{constructor(u={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=u,Ve.load(this.limiterOptions,this.defaults,this),this.Events=new ue(this),this.instances={},this.Bottleneck=Vo,this._startAutoCleanup(),this.sharedConnection=this.connection!=null,this.connection==null&&(this.limiterOptions.datastore==="redis"?this.connection=new De(Object.assign({},this.limiterOptions,{Events:this.Events})):this.limiterOptions.datastore==="ioredis"&&(this.connection=new le(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(u=""){var b;return(b=this.instances[u])!=null?b:(()=>{var _;return _=this.instances[u]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${u}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",_,u),_})()}async deleteKey(u=""){var b,_;return _=this.instances[u],this.connection&&(b=await this.connection.__runCommand__(["del",...st.allKeys(`${this.id}-${u}`)])),_!=null&&(delete this.instances[u],await _.disconnect()),_!=null||b>0}limiters(){var u,b,_,R;b=this.instances,_=[];for(u in b)R=b[u],_.push({key:u,limiter:R});return _}keys(){return Object.keys(this.instances)}async clusterKeys(){var u,b,_,R,S,G,W,pe,ge;if(this.connection==null)return this.Promise.resolve(this.keys());for(G=[],u=null,ge=`b_${this.id}-`.length,b=9;u!==0;)for([pe,_]=await this.connection.__runCommand__(["scan",u??0,"match",`b_${this.id}-*_settings`,"count",1e4]),u=~~pe,R=0,W=_.length;R<W;R++)S=_[R],G.push(S.slice(ge,-b));return G}_startAutoCleanup(){var u;return clearInterval(this.interval),typeof(u=this.interval=setInterval(async()=>{var b,_,R,S,G,W;G=Date.now(),R=this.instances,S=[];for(_ in R){W=R[_];try{await W._store.__groupCheck__(G)?S.push(this.deleteKey(_)):S.push(void 0)}catch(pe){b=pe,S.push(W.Events.trigger("error",b))}}return S},this.timeout/2)).unref=="function"?u.unref():void 0}updateSettings(u={}){if(Ve.overwrite(u,this.defaults,this),Ve.overwrite(u,u,this.limiterOptions),u.timeout!=null)return this._startAutoCleanup()}disconnect(u=!0){var b;if(!this.sharedConnection)return(b=this.connection)!=null?b.disconnect(u):void 0}}return x.prototype.defaults={timeout:1e3*60*5,connection:null,Promise,id:"group-key"},x}).call(r);var ar=Z,Io,Fo,Uo;Uo=o,Fo=c,Io=(function(){class x{constructor(u={}){this.options=u,Uo.load(this.options,this.defaults,this),this.Events=new Fo(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((u,b)=>this._resolve=u)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(u){var b;return this._arr.push(u),b=this._promise,this._arr.length===this.maxSize?this._flush():this.maxTime!=null&&this._arr.length===1&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),b}}return x.prototype.defaults={maxTime:null,maxSize:null,Promise},x}).call(r);var oc=Io,nc=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),ic=e(ne),Mo,Lo,cr,lr,jo,ur,No,Ho,qo,pr,Ne,Bo=[].splice;ur=10,Lo=5,Ne=o,No=m,lr=w,jo=j,Ho=nc,cr=c,qo=xe,pr=Be,Mo=(function(){class x{constructor(u={},...b){var _,R;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(u,b),Ne.load(u,this.instanceDefaults,this),this._queues=new No(ur),this._scheduled={},this._states=new qo(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new cr(this),this._submitLock=new pr("submit",this.Promise),this._registerLock=new pr("register",this.Promise),R=Ne.load(u,this.storeDefaults,{}),this._store=(function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return _=Ne.load(u,this.redisStoreDefaults,{}),new Ho(this,R,_);if(this.datastore==="local")return _=Ne.load(u,this.localStoreDefaults,{}),new jo(this,R,_);throw new x.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}).call(this),this._queues.on("leftzero",()=>{var S;return(S=this._store.heartbeat)!=null&&typeof S.ref=="function"?S.ref():void 0}),this._queues.on("zero",()=>{var S;return(S=this._store.heartbeat)!=null&&typeof S.unref=="function"?S.unref():void 0})}_validateOptions(u,b){if(!(u!=null&&typeof u=="object"&&b.length===0))throw new x.prototype.BottleneckError("Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.")}ready(){return this._store.ready}clients(){return this._store.clients}channel(){return`b_${this.id}`}channel_client(){return`b_${this.id}_${this._store.clientId}`}publish(u){return this._store.__publish__(u)}disconnect(u=!0){return this._store.__disconnect__(u)}chain(u){return this._limiter=u,this}queued(u){return this._queues.queued(u)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(u){return this._states.jobStatus(u)}jobs(u){return this._states.statusJobs(u)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(u=1){return this._store.__check__(u)}_clearGlobalState(u){return this._scheduled[u]!=null?(clearTimeout(this._scheduled[u].expiration),delete this._scheduled[u],!0):!1}async _free(u,b,_,R){var S,G;try{if({running:G}=await this._store.__free__(u,_.weight),this.Events.trigger("debug",`Freed ${_.id}`,R),G===0&&this.empty())return this.Events.trigger("idle")}catch(W){return S=W,this.Events.trigger("error",S)}}_run(u,b,_){var R,S,G;return b.doRun(),R=this._clearGlobalState.bind(this,u),G=this._run.bind(this,u,b),S=this._free.bind(this,u,b),this._scheduled[u]={timeout:setTimeout(()=>b.doExecute(this._limiter,R,G,S),_),expiration:b.options.expiration!=null?setTimeout(function(){return b.doExpire(R,G,S)},_+b.options.expiration):void 0,job:b}}_drainOne(u){return this._registerLock.schedule(()=>{var b,_,R,S,G;return this.queued()===0?this.Promise.resolve(null):(G=this._queues.getFirst(),{options:S,args:b}=R=G.first(),u!=null&&S.weight>u?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${S.id}`,{args:b,options:S}),_=this._randomIndex(),this._store.__register__(_,S.weight,S.expiration).then(({success:W,wait:pe,reservoir:ge})=>{var Dt;return this.Events.trigger("debug",`Drained ${S.id}`,{success:W,args:b,options:S}),W?(G.shift(),Dt=this.empty(),Dt&&this.Events.trigger("empty"),ge===0&&this.Events.trigger("depleted",Dt),this._run(_,R,pe),this.Promise.resolve(S.weight)):this.Promise.resolve(null)})))})}_drainAll(u,b=0){return this._drainOne(u).then(_=>{var R;return _!=null?(R=u!=null?u-_:u,this._drainAll(R,b+_)):this.Promise.resolve(b)}).catch(_=>this.Events.trigger("error",_))}_dropAllQueued(u){return this._queues.shiftAll(function(b){return b.doDrop({message:u})})}stop(u={}){var b,_;return u=Ne.load(u,this.stopDefaults),_=R=>{var S;return S=()=>{var G;return G=this._states.counts,G[0]+G[1]+G[2]+G[3]===R},new this.Promise((G,W)=>S()?G():this.on("done",()=>{if(S())return this.removeAllListeners("done"),G()}))},b=u.dropWaitingJobs?(this._run=function(R,S){return S.doDrop({message:u.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var R,S,G;S=this._scheduled;for(R in S)G=S[R],this.jobStatus(G.job.options.id)==="RUNNING"&&(clearTimeout(G.timeout),clearTimeout(G.expiration),G.job.doDrop({message:u.dropErrorMessage}));return this._dropAllQueued(u.dropErrorMessage),_(0)}))):this.schedule({priority:ur-1,weight:0},()=>_(1)),this._receive=function(R){return R._reject(new x.prototype.BottleneckError(u.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new x.prototype.BottleneckError("stop() has already been called")),b}async _addToQueue(u){var b,_,R,S,G,W,pe;({args:b,options:S}=u);try{({reachedHWM:G,blocked:_,strategy:pe}=await this._store.__submit__(this.queued(),S.weight))}catch(ge){return R=ge,this.Events.trigger("debug",`Could not queue ${S.id}`,{args:b,options:S,error:R}),u.doDrop({error:R}),!1}return _?(u.doDrop(),!0):G&&(W=pe===x.prototype.strategy.LEAK?this._queues.shiftLastFrom(S.priority):pe===x.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(S.priority+1):pe===x.prototype.strategy.OVERFLOW?u:void 0,W?.doDrop(),W==null||pe===x.prototype.strategy.OVERFLOW)?(W==null&&u.doDrop(),G):(u.doQueue(G,_),this._queues.push(u),await this._drainAll(),G)}_receive(u){return this._states.jobStatus(u.options.id)!=null?(u._reject(new x.prototype.BottleneckError(`A job with the same id already exists (id=${u.options.id})`)),!1):(u.doReceive(),this._submitLock.schedule(this._addToQueue,u))}submit(...u){var b,_,R,S,G,W,pe;return typeof u[0]=="function"?(G=u,[_,...u]=G,[b]=Bo.call(u,-1),S=Ne.load({},this.jobDefaults)):(W=u,[S,_,...u]=W,[b]=Bo.call(u,-1),S=Ne.load(S,this.jobDefaults)),pe=(...ge)=>new this.Promise(function(Dt,cc){return _(...ge,function(...zo){return(zo[0]!=null?cc:Dt)(zo)})}),R=new lr(pe,u,S,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),R.promise.then(function(ge){return typeof b=="function"?b(...ge):void 0}).catch(function(ge){return Array.isArray(ge)?typeof b=="function"?b(...ge):void 0:typeof b=="function"?b(ge):void 0}),this._receive(R)}schedule(...u){var b,_,R;return typeof u[0]=="function"?([R,...u]=u,_={}):[_,R,...u]=u,b=new lr(R,u,_,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(b),b.promise}wrap(u){var b,_;return b=this.schedule.bind(this),_=function(...R){return b(u.bind(this),...R)},_.withOptions=function(R,...S){return b(R,u,...S)},_}async updateSettings(u={}){return await this._store.__updateSettings__(Ne.overwrite(u,this.storeDefaults)),Ne.overwrite(u,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(u=0){return this._store.__incrementReservoir__(u)}}return x.default=x,x.Events=cr,x.version=x.prototype.version=ic.version,x.strategy=x.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},x.BottleneckError=x.prototype.BottleneckError=y,x.Group=x.prototype.Group=ar,x.RedisConnection=x.prototype.RedisConnection=D,x.IORedisConnection=x.prototype.IORedisConnection=q,x.Batcher=x.prototype.Batcher=oc,x.prototype.jobDefaults={priority:Lo,weight:1,expiration:null,id:"<no-id>"},x.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:x.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},x.prototype.localStoreDefaults={Promise,timeout:null,heartbeatInterval:250},x.prototype.redisStoreDefaults={Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},x.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise},x.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},x}).call(r);var Vo=Mo,ac=Vo;return ac}))});function xl(r,e,t){return r.retryLimiter.schedule(Dl,r,e,t)}async function Dl(r,e,t){let{pathname:s}=new URL(t.url,"http://github.test"),o=Il(t.method,s),n=!o&&t.method!=="GET"&&t.method!=="HEAD",i=t.method==="GET"&&s.startsWith("/search/"),a=s.startsWith("/graphql"),l=~~e.retryCount>0?{priority:0,weight:0}:{};r.clustering&&(l.expiration=1e3*60),(n||a)&&await r.write.key(r.id).schedule(l,Zr),n&&r.triggersNotification(s)&&await r.notifications.key(r.id).schedule(l,Zr),i&&await r.search.key(r.id).schedule(l,Zr);let p=(o?r.auth:r.global).key(r.id).schedule(l,e,t);if(a){let d=await p;if(d.data.errors!=null&&d.data.errors.some(m=>m.type==="RATE_LIMITED"))throw Object.assign(new Error("GraphQL Rate Limit Exceeded"),{response:d,data:d.data})}return p}function Il(r,e){return r==="PATCH"&&/^\/applications\/[^/]+\/token\/scoped$/.test(e)||r==="POST"&&(/^\/applications\/[^/]+\/token$/.test(e)||/^\/app\/installations\/[^/]+\/access_tokens$/.test(e)||e==="/login/oauth/access_token")}function Ul(r){let t=`^(?:${r.map(s=>s.split("/").map(o=>o.startsWith("{")?"(?:.+?)":o).join("/")).map(s=>`(?:${s})`).join("|")})[^/]*$`;return new RegExp(t,"i")}function Ts(r,e){let{enabled:t=!0,Bottleneck:s=wi.default,id:o="no-id",timeout:n=1e3*60*2,connection:i}=e.throttle||{};if(!t)return{};let a={timeout:n};typeof i<"u"&&(a.connection=i),ft.global==null&&Ml(s,a);let c=Object.assign({clustering:i!=null,triggersNotification:Ri,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new s,id:o,...ft},e.throttle);if(typeof c.onSecondaryRateLimit!="function"||typeof c.onRateLimit!="function")throw new Error(`octokit/plugin-throttling error:
|
|
35
|
+
`)}function Ol(r,e,t){if(t){if(typeof e=="string"&&"query"in t)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let i in t)if(Al.includes(i))return Promise.reject(new Error(`[@octokit/graphql] "${i}" cannot be used as variable name`))}let s=typeof e=="string"?Object.assign({query:e},t):e,o=Object.keys(s).reduce((i,a)=>kl.includes(a)?(i[a]=s[a],i):(i.variables||(i.variables={}),i.variables[a]=s[a],i),{}),n=s.baseUrl||r.endpoint.DEFAULTS.baseUrl;return ei.test(n)&&(o.url=n.replace(ei,"/api/graphql")),r(o).then(i=>{if(i.data.errors){let a={};for(let c of Object.keys(i.headers))a[c]=i.headers[c];throw new Pl(o,a,i.data)}return i.data.data})}function zr(r,e){let t=r.defaults(e);return Object.assign((o,n)=>Ol(t,o,n),{defaults:zr.bind(null,t),endpoint:t.endpoint})}function ti(r){return zr(r,{method:"POST",url:"/graphql"})}var Sl,Pl,kl,Al,ei,Pp,si=O(()=>{Vr();Ht();Sl="0.0.0-development";Pl=class extends Error{constructor(r,e,t){super(Cl(t)),this.request=r,this.headers=e,this.response=t,this.errors=t.errors,this.data=t.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},kl=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Al=["query","method","url"],ei=/\/api\/v3\/?$/;Pp=zr(Vt,{headers:{"user-agent":`octokit-graphql.js/${Sl} ${ct()}`},method:"POST",url:"/graphql"})});async function xl(r){let e=Gl(r),t=r.startsWith("v1.")||r.startsWith("ghs_"),s=r.startsWith("ghu_");return{type:"token",token:r,tokenType:e?"app":t?"installation":s?"user-to-server":"oauth"}}function $l(r){return r.split(/\./).length===3?`bearer ${r}`:`token ${r}`}async function Dl(r,e,t,s){let o=e.endpoint.merge(t,s);return o.headers.authorization=$l(r),e(o)}var Wr,ri,oi,Gl,ni,ii=O(()=>{Wr="(?:[a-zA-Z0-9_-]+)",ri="\\.",oi=new RegExp(`^${Wr}${ri}${Wr}${ri}${Wr}$`),Gl=oi.test.bind(oi);ni=function(e){if(!e)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof e!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(xl.bind(null,e),{hook:Dl.bind(null,e)})}});var Jr,ai=O(()=>{Jr="7.0.6"});function Ul(r={}){return typeof r.debug!="function"&&(r.debug=ci),typeof r.info!="function"&&(r.info=ci),typeof r.warn!="function"&&(r.warn=Il),typeof r.error!="function"&&(r.error=Fl),r}var ci,Il,Fl,li,Ps,ui=O(()=>{Ht();On();Vr();si();ii();ai();ci=()=>{},Il=console.warn.bind(console),Fl=console.error.bind(console);li=`octokit-core.js/${Jr} ${ct()}`,Ps=class{static VERSION=Jr;static defaults(e){return class extends this{constructor(...s){let o=s[0]||{};if(typeof e=="function"){super(e(o));return}super(Object.assign({},e,o,o.userAgent&&e.userAgent?{userAgent:`${o.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let t=this.plugins;return class extends this{static plugins=t.concat(e.filter(o=>!t.includes(o)))}}constructor(e={}){let t=new An.Collection,s={baseUrl:Vt.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,"request")}),mediaType:{previews:[],format:""}};if(s.headers["user-agent"]=e.userAgent?`${e.userAgent} ${li}`:li,e.baseUrl&&(s.baseUrl=e.baseUrl),e.previews&&(s.mediaType.previews=e.previews),e.timeZone&&(s.headers["time-zone"]=e.timeZone),this.request=Vt.defaults(s),this.graphql=ti(this.request).defaults(s),this.log=Ul(e.log),this.hook=t,e.authStrategy){let{authStrategy:n,...i}=e,a=n(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:i},e.auth));t.wrap("request",a.hook),this.auth=a}else if(!e.auth)this.auth=async()=>({type:"unauthenticated"});else{let n=ni(e.auth);t.wrap("request",n.hook),this.auth=n}let o=this.constructor;for(let n=0;n<o.plugins.length;++n)Object.assign(this,o.plugins[n](this,e))}request;graphql;log;hook;auth}});var di,pi=O(()=>{di="6.0.0"});function Kr(r){r.hook.wrap("request",(e,t)=>{r.log.debug("request",t);let s=Date.now(),o=r.request.endpoint.parse(t),n=o.url.replace(t.baseUrl,"");return e(t).then(i=>{let a=i.headers["x-github-request-id"];return r.log.info(`${o.method} ${n} - ${i.status} with id ${a} in ${Date.now()-s}ms`),i}).catch(i=>{let a=i.response?.headers["x-github-request-id"]||"UNKNOWN";throw r.log.error(`${o.method} ${n} - ${i.status} with id ${a} in ${Date.now()-s}ms`),i})})}var gi=O(()=>{pi();Kr.VERSION=di});function Ll(r){if(!r.data)return{...r,data:[]};if(!(("total_count"in r.data||"total_commits"in r.data)&&!("url"in r.data)))return r;let t=r.data.incomplete_results,s=r.data.repository_selection,o=r.data.total_count,n=r.data.total_commits;delete r.data.incomplete_results,delete r.data.repository_selection,delete r.data.total_count,delete r.data.total_commits;let i=Object.keys(r.data)[0],a=r.data[i];return r.data=a,typeof t<"u"&&(r.data.incomplete_results=t),typeof s<"u"&&(r.data.repository_selection=s),r.data.total_count=o,r.data.total_commits=n,r}function Yr(r,e,t){let s=typeof e=="function"?e.endpoint(t):r.request.endpoint(e,t),o=typeof e=="function"?e:r.request,n=s.method,i=s.headers,a=s.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!a)return{done:!0};try{let c=await o({method:n,url:a,headers:i}),l=Ll(c);if(a=((l.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!a&&"total_commits"in l.data){let d=new URL(l.url),p=d.searchParams,m=parseInt(p.get("page")||"1",10),w=parseInt(p.get("per_page")||"250",10);m*w<l.data.total_commits&&(p.set("page",String(m+1)),a=d.toString())}return{value:l}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function mi(r,e,t,s){return typeof t=="function"&&(s=t,t=void 0),hi(r,[],Yr(r,e,t)[Symbol.asyncIterator](),s)}function hi(r,e,t,s){return t.next().then(o=>{if(o.done)return e;let n=!1;function i(){n=!0}return e=e.concat(s?s(o.value,i):o.value.data),n?e:hi(r,e,t,s)})}function Qr(r){return{paginate:Object.assign(mi.bind(null,r),{iterator:Yr.bind(null,r)})}}var Ml,Bp,fi=O(()=>{Ml="0.0.0-development";Bp=Object.assign(mi,{iterator:Yr});Qr.VERSION=Ml});var Xr,bi=O(()=>{Xr="17.0.0"});var jl,yi,vi=O(()=>{jl={actions:{addCustomLabelsToSelfHostedRunnerForOrg:["POST /orgs/{org}/actions/runners/{runner_id}/labels"],addCustomLabelsToSelfHostedRunnerForRepo:["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],addRepoAccessToSelfHostedRunnerGroupInOrg:["PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],approveWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createEnvironmentVariable:["POST /repos/{owner}/{repo}/environments/{environment_name}/variables"],createHostedRunnerForOrg:["POST /orgs/{org}/actions/hosted-runners"],createOrUpdateEnvironmentSecret:["PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],createOrgVariable:["POST /orgs/{org}/actions/variables"],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],createRepoVariable:["POST /repos/{owner}/{repo}/actions/variables"],createWorkflowDispatch:["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],deleteActionsCacheById:["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],deleteActionsCacheByKey:["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteCustomImageFromOrg:["DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}"],deleteCustomImageVersionFromOrg:["DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}"],deleteEnvironmentSecret:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],deleteEnvironmentVariable:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],deleteHostedRunnerForOrg:["DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],deleteRepoVariable:["DELETE /repos/{owner}/{repo}/actions/variables/{name}"],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRun:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],disableSelectedRepositoryGithubActionsOrganization:["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],disableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowRunAttemptLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],enableSelectedRepositoryGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],enableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],forceCancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"],generateRunnerJitconfigForOrg:["POST /orgs/{org}/actions/runners/generate-jitconfig"],generateRunnerJitconfigForRepo:["POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"],getActionsCacheList:["GET /repos/{owner}/{repo}/actions/caches"],getActionsCacheUsage:["GET /repos/{owner}/{repo}/actions/cache/usage"],getActionsCacheUsageByRepoForOrg:["GET /orgs/{org}/actions/cache/usage-by-repository"],getActionsCacheUsageForOrg:["GET /orgs/{org}/actions/cache/usage"],getAllowedActionsOrganization:["GET /orgs/{org}/actions/permissions/selected-actions"],getAllowedActionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getCustomImageForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}"],getCustomImageVersionForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}"],getCustomOidcSubClaimForRepo:["GET /repos/{owner}/{repo}/actions/oidc/customization/sub"],getEnvironmentPublicKey:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key"],getEnvironmentSecret:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],getEnvironmentVariable:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],getGithubActionsDefaultWorkflowPermissionsOrganization:["GET /orgs/{org}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/workflow"],getGithubActionsPermissionsOrganization:["GET /orgs/{org}/actions/permissions"],getGithubActionsPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions"],getHostedRunnerForOrg:["GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],getHostedRunnersGithubOwnedImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/github-owned"],getHostedRunnersLimitsForOrg:["GET /orgs/{org}/actions/hosted-runners/limits"],getHostedRunnersMachineSpecsForOrg:["GET /orgs/{org}/actions/hosted-runners/machine-sizes"],getHostedRunnersPartnerImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/partner"],getHostedRunnersPlatformsForOrg:["GET /orgs/{org}/actions/hosted-runners/platforms"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getOrgVariable:["GET /orgs/{org}/actions/variables/{name}"],getPendingDeploymentsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],getRepoPermissions:["GET /repos/{owner}/{repo}/actions/permissions",{},{renamed:["actions","getGithubActionsPermissionsRepository"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],getRepoVariable:["GET /repos/{owner}/{repo}/actions/variables/{name}"],getReviewsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowAccessToRepository:["GET /repos/{owner}/{repo}/actions/permissions/access"],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listCustomImageVersionsForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions"],listCustomImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/custom"],listEnvironmentSecrets:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets"],listEnvironmentVariables:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables"],listGithubHostedRunnersInGroupForOrg:["GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners"],listHostedRunnersForOrg:["GET /orgs/{org}/actions/hosted-runners"],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listJobsForWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],listLabelsForSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}/labels"],listLabelsForSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listOrgVariables:["GET /orgs/{org}/actions/variables"],listRepoOrganizationSecrets:["GET /repos/{owner}/{repo}/actions/organization-secrets"],listRepoOrganizationVariables:["GET /repos/{owner}/{repo}/actions/organization-variables"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoVariables:["GET /repos/{owner}/{repo}/actions/variables"],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelectedReposForOrgVariable:["GET /orgs/{org}/actions/variables/{name}/repositories"],listSelectedRepositoriesEnabledGithubActionsOrganization:["GET /orgs/{org}/actions/permissions/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunJobForWorkflowRun:["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],reRunWorkflowFailedJobs:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],removeAllCustomLabelsFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],removeAllCustomLabelsFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],removeCustomLabelFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],reviewCustomGatesForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"],reviewPendingDeploymentsForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],setAllowedActionsOrganization:["PUT /orgs/{org}/actions/permissions/selected-actions"],setAllowedActionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForOrg:["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],setCustomLabelsForSelfHostedRunnerForRepo:["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],setCustomOidcSubClaimForRepo:["PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"],setGithubActionsDefaultWorkflowPermissionsOrganization:["PUT /orgs/{org}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],setGithubActionsPermissionsOrganization:["PUT /orgs/{org}/actions/permissions"],setGithubActionsPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],setSelectedReposForOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories"],setSelectedRepositoriesEnabledGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories"],setWorkflowAccessToRepository:["PUT /repos/{owner}/{repo}/actions/permissions/access"],updateEnvironmentVariable:["PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],updateHostedRunnerForOrg:["PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],updateOrgVariable:["PATCH /orgs/{org}/actions/variables/{name}"],updateRepoVariable:["PATCH /repos/{owner}/{repo}/actions/variables/{name}"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listNotificationsForAuthenticatedUser:["GET /notifications"],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markNotificationsAsRead:["PUT /notifications"],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsDone:["DELETE /notifications/threads/{thread_id}"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","addRepoToInstallationForAuthenticatedUser"]}],addRepoToInstallationForAuthenticatedUser:["PUT /user/installations/{installation_id}/repositories/{repository_id}"],checkToken:["POST /applications/{client_id}/token"],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens"],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}"],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app"],getBySlug:["GET /apps/{app_slug}"],getInstallation:["GET /app/installations/{installation_id}"],getOrgInstallation:["GET /orgs/{org}/installation"],getRepoInstallation:["GET /repos/{owner}/{repo}/installation"],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation"],getWebhookConfigForApp:["GET /app/hook/config"],getWebhookDelivery:["GET /app/hook/deliveries/{delivery_id}"],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories"],listInstallationRequestsForAuthenticatedApp:["GET /app/installation-requests"],listInstallations:["GET /app/installations"],listInstallationsForAuthenticatedUser:["GET /user/installations"],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listReposAccessibleToInstallation:["GET /installation/repositories"],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],listWebhookDeliveries:["GET /app/hook/deliveries"],redeliverWebhookDelivery:["POST /app/hook/deliveries/{delivery_id}/attempts"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","removeRepoFromInstallationForAuthenticatedUser"]}],removeRepoFromInstallationForAuthenticatedUser:["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],scopeToken:["POST /applications/{client_id}/token/scoped"],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"],updateWebhookConfigForApp:["PATCH /app/hook/config"]},billing:{getGithubActionsBillingOrg:["GET /orgs/{org}/settings/billing/actions"],getGithubActionsBillingUser:["GET /users/{username}/settings/billing/actions"],getGithubBillingPremiumRequestUsageReportOrg:["GET /organizations/{org}/settings/billing/premium_request/usage"],getGithubBillingPremiumRequestUsageReportUser:["GET /users/{username}/settings/billing/premium_request/usage"],getGithubBillingUsageReportOrg:["GET /organizations/{org}/settings/billing/usage"],getGithubBillingUsageReportUser:["GET /users/{username}/settings/billing/usage"],getGithubPackagesBillingOrg:["GET /orgs/{org}/settings/billing/packages"],getGithubPackagesBillingUser:["GET /users/{username}/settings/billing/packages"],getSharedStorageBillingOrg:["GET /orgs/{org}/settings/billing/shared-storage"],getSharedStorageBillingUser:["GET /users/{username}/settings/billing/shared-storage"]},campaigns:{createCampaign:["POST /orgs/{org}/campaigns"],deleteCampaign:["DELETE /orgs/{org}/campaigns/{campaign_number}"],getCampaignSummary:["GET /orgs/{org}/campaigns/{campaign_number}"],listOrgCampaigns:["GET /orgs/{org}/campaigns"],updateCampaign:["PATCH /orgs/{org}/campaigns/{campaign_number}"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs"],createSuite:["POST /repos/{owner}/{repo}/check-suites"],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],rerequestRun:["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences"],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]},codeScanning:{commitAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits"],createAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],createVariantAnalysis:["POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses"],deleteAnalysis:["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],deleteCodeqlDatabase:["DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",{},{renamedParameters:{alert_id:"alert_number"}}],getAnalysis:["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],getAutofix:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],getCodeqlDatabase:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getDefaultSetup:["GET /repos/{owner}/{repo}/code-scanning/default-setup"],getSarif:["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],getVariantAnalysis:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}"],getVariantAnalysisRepoTask:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}"],listAlertInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],listAlertsForOrg:["GET /orgs/{org}/code-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"],listAlertsInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",{},{renamed:["codeScanning","listAlertInstances"]}],listCodeqlDatabases:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases"],listRecentAnalyses:["GET /repos/{owner}/{repo}/code-scanning/analyses"],updateAlert:["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],updateDefaultSetup:["PATCH /repos/{owner}/{repo}/code-scanning/default-setup"],uploadSarif:["POST /repos/{owner}/{repo}/code-scanning/sarifs"]},codeSecurity:{attachConfiguration:["POST /orgs/{org}/code-security/configurations/{configuration_id}/attach"],attachEnterpriseConfiguration:["POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach"],createConfiguration:["POST /orgs/{org}/code-security/configurations"],createConfigurationForEnterprise:["POST /enterprises/{enterprise}/code-security/configurations"],deleteConfiguration:["DELETE /orgs/{org}/code-security/configurations/{configuration_id}"],deleteConfigurationForEnterprise:["DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],detachConfiguration:["DELETE /orgs/{org}/code-security/configurations/detach"],getConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}"],getConfigurationForRepository:["GET /repos/{owner}/{repo}/code-security-configuration"],getConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations"],getConfigurationsForOrg:["GET /orgs/{org}/code-security/configurations"],getDefaultConfigurations:["GET /orgs/{org}/code-security/configurations/defaults"],getDefaultConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/defaults"],getRepositoriesForConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories"],getRepositoriesForEnterpriseConfiguration:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories"],getSingleConfigurationForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],setConfigurationAsDefault:["PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults"],setConfigurationAsDefaultForEnterprise:["PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults"],updateConfiguration:["PATCH /orgs/{org}/code-security/configurations/{configuration_id}"],updateEnterpriseConfiguration:["PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct"],getConductCode:["GET /codes_of_conduct/{key}"]},codespaces:{addRepositoryForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],checkPermissionsForDevcontainer:["GET /repos/{owner}/{repo}/codespaces/permissions_check"],codespaceMachinesForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/machines"],createForAuthenticatedUser:["POST /user/codespaces"],createOrUpdateOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],createOrUpdateSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}"],createWithPrForAuthenticatedUser:["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],createWithRepoForAuthenticatedUser:["POST /repos/{owner}/{repo}/codespaces"],deleteForAuthenticatedUser:["DELETE /user/codespaces/{codespace_name}"],deleteFromOrganization:["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],deleteOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],deleteSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}"],exportForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/exports"],getCodespacesForUserInOrg:["GET /orgs/{org}/members/{username}/codespaces"],getExportDetailsForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/exports/{export_id}"],getForAuthenticatedUser:["GET /user/codespaces/{codespace_name}"],getOrgPublicKey:["GET /orgs/{org}/codespaces/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}"],getPublicKeyForAuthenticatedUser:["GET /user/codespaces/secrets/public-key"],getRepoPublicKey:["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],getSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}"],listDevcontainersInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/devcontainers"],listForAuthenticatedUser:["GET /user/codespaces"],listInOrganization:["GET /orgs/{org}/codespaces",{},{renamedParameters:{org_id:"org"}}],listInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces"],listOrgSecrets:["GET /orgs/{org}/codespaces/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/codespaces/secrets"],listRepositoriesForSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}/repositories"],listSecretsForAuthenticatedUser:["GET /user/codespaces/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],preFlightWithRepoForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/new"],publishForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/publish"],removeRepositoryForSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],repoMachinesForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/machines"],setRepositoriesForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],startForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/start"],stopForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/stop"],stopInOrganization:["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],updateForAuthenticatedUser:["PATCH /user/codespaces/{codespace_name}"]},copilot:{addCopilotSeatsForTeams:["POST /orgs/{org}/copilot/billing/selected_teams"],addCopilotSeatsForUsers:["POST /orgs/{org}/copilot/billing/selected_users"],cancelCopilotSeatAssignmentForTeams:["DELETE /orgs/{org}/copilot/billing/selected_teams"],cancelCopilotSeatAssignmentForUsers:["DELETE /orgs/{org}/copilot/billing/selected_users"],copilotMetricsForOrganization:["GET /orgs/{org}/copilot/metrics"],copilotMetricsForTeam:["GET /orgs/{org}/team/{team_slug}/copilot/metrics"],getCopilotOrganizationDetails:["GET /orgs/{org}/copilot/billing"],getCopilotSeatDetailsForUser:["GET /orgs/{org}/members/{username}/copilot"],listCopilotSeats:["GET /orgs/{org}/copilot/billing/seats"]},credentials:{revoke:["POST /credentials/revoke"]},dependabot:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],getAlert:["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],getOrgPublicKey:["GET /orgs/{org}/dependabot/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}"],getRepoPublicKey:["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/dependabot/alerts"],listAlertsForOrg:["GET /orgs/{org}/dependabot/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/dependabot/alerts"],listOrgSecrets:["GET /orgs/{org}/dependabot/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/dependabot/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],repositoryAccessForOrg:["GET /organizations/{org}/dependabot/repository-access"],setRepositoryAccessDefaultLevel:["PUT /organizations/{org}/dependabot/repository-access/default-level"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],updateAlert:["PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],updateRepositoryAccessForOrg:["PATCH /organizations/{org}/dependabot/repository-access"]},dependencyGraph:{createRepositorySnapshot:["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],diffRange:["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"],exportSbom:["GET /repos/{owner}/{repo}/dependency-graph/sbom"]},emojis:{get:["GET /emojis"]},enterpriseTeamMemberships:{add:["PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}"],bulkAdd:["POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add"],bulkRemove:["POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove"],get:["GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}"],list:["GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships"],remove:["DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}"]},enterpriseTeamOrganizations:{add:["PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}"],bulkAdd:["POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add"],bulkRemove:["POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove"],delete:["DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}"],getAssignment:["GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}"],getAssignments:["GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations"]},enterpriseTeams:{create:["POST /enterprises/{enterprise}/teams"],delete:["DELETE /enterprises/{enterprise}/teams/{team_slug}"],get:["GET /enterprises/{enterprise}/teams/{team_slug}"],list:["GET /enterprises/{enterprise}/teams"],update:["PATCH /enterprises/{enterprise}/teams/{team_slug}"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"]},hostedCompute:{createNetworkConfigurationForOrg:["POST /orgs/{org}/settings/network-configurations"],deleteNetworkConfigurationFromOrg:["DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkConfigurationForOrg:["GET /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkSettingsForOrg:["GET /orgs/{org}/settings/network-settings/{network_settings_id}"],listNetworkConfigurationsForOrg:["GET /orgs/{org}/settings/network-configurations"],updateNetworkConfigurationForOrg:["PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}"]},interactions:{getRestrictionsForAuthenticatedUser:["GET /user/interaction-limits"],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits"],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits"],getRestrictionsForYourPublicRepos:["GET /user/interaction-limits",{},{renamed:["interactions","getRestrictionsForAuthenticatedUser"]}],removeRestrictionsForAuthenticatedUser:["DELETE /user/interaction-limits"],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits"],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits"],removeRestrictionsForYourPublicRepos:["DELETE /user/interaction-limits",{},{renamed:["interactions","removeRestrictionsForAuthenticatedUser"]}],setRestrictionsForAuthenticatedUser:["PUT /user/interaction-limits"],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits"],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits"],setRestrictionsForYourPublicRepos:["PUT /user/interaction-limits",{},{renamed:["interactions","setRestrictionsForAuthenticatedUser"]}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addBlockedByDependency:["POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],addSubIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],checkUserCanBeAssignedToIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],getParent:["GET /repos/{owner}/{repo}/issues/{issue_number}/parent"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listDependenciesBlockedBy:["GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by"],listDependenciesBlocking:["GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],listSubIssues:["GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeDependencyBlockedBy:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],removeSubIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue"],reprioritizeSubIssue:["PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority"],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"],getAllVersions:["GET /versions"],getOctocat:["GET /octocat"],getZen:["GET /zen"],root:["GET /"]},migrations:{deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive"],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive"],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive"],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}"],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}"],listForAuthenticatedUser:["GET /user/migrations"],listForOrg:["GET /orgs/{org}/migrations"],listReposForAuthenticatedUser:["GET /user/migrations/{migration_id}/repositories"],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories"],listReposForUser:["GET /user/migrations/{migration_id}/repositories",{},{renamed:["migrations","listReposForAuthenticatedUser"]}],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"]},oidc:{getOidcCustomSubTemplateForOrg:["GET /orgs/{org}/actions/oidc/customization/sub"],updateOidcCustomSubTemplateForOrg:["PUT /orgs/{org}/actions/oidc/customization/sub"]},orgs:{addSecurityManagerTeam:["PUT /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team"}],assignTeamToOrgRole:["PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],assignUserToOrgRole:["PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"],blockUser:["PUT /orgs/{org}/blocks/{username}"],cancelInvitation:["DELETE /orgs/{org}/invitations/{invitation_id}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createArtifactStorageRecord:["POST /orgs/{org}/artifacts/metadata/storage-record"],createInvitation:["POST /orgs/{org}/invitations"],createIssueType:["POST /orgs/{org}/issue-types"],createWebhook:["POST /orgs/{org}/hooks"],customPropertiesForOrgsCreateOrUpdateOrganizationValues:["PATCH /organizations/{org}/org-properties/values"],customPropertiesForOrgsGetOrganizationValues:["GET /organizations/{org}/org-properties/values"],customPropertiesForReposCreateOrUpdateOrganizationDefinition:["PUT /orgs/{org}/properties/schema/{custom_property_name}"],customPropertiesForReposCreateOrUpdateOrganizationDefinitions:["PATCH /orgs/{org}/properties/schema"],customPropertiesForReposCreateOrUpdateOrganizationValues:["PATCH /orgs/{org}/properties/values"],customPropertiesForReposDeleteOrganizationDefinition:["DELETE /orgs/{org}/properties/schema/{custom_property_name}"],customPropertiesForReposGetOrganizationDefinition:["GET /orgs/{org}/properties/schema/{custom_property_name}"],customPropertiesForReposGetOrganizationDefinitions:["GET /orgs/{org}/properties/schema"],customPropertiesForReposGetOrganizationValues:["GET /orgs/{org}/properties/values"],delete:["DELETE /orgs/{org}"],deleteAttestationsBulk:["POST /orgs/{org}/attestations/delete-request"],deleteAttestationsById:["DELETE /orgs/{org}/attestations/{attestation_id}"],deleteAttestationsBySubjectDigest:["DELETE /orgs/{org}/attestations/digest/{subject_digest}"],deleteIssueType:["DELETE /orgs/{org}/issue-types/{issue_type_id}"],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],disableSelectedRepositoryImmutableReleasesOrganization:["DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}"],enableSelectedRepositoryImmutableReleasesOrganization:["PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}"],get:["GET /orgs/{org}"],getImmutableReleasesSettings:["GET /orgs/{org}/settings/immutable-releases"],getImmutableReleasesSettingsRepositories:["GET /orgs/{org}/settings/immutable-releases/repositories"],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getOrgRole:["GET /orgs/{org}/organization-roles/{role_id}"],getOrgRulesetHistory:["GET /orgs/{org}/rulesets/{ruleset_id}/history"],getOrgRulesetVersion:["GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],getWebhookConfigForOrg:["GET /orgs/{org}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations"],listArtifactStorageRecords:["GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records"],listAttestationRepositories:["GET /orgs/{org}/attestations/repositories"],listAttestations:["GET /orgs/{org}/attestations/{subject_digest}"],listAttestationsBulk:["POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}"],listBlockedUsers:["GET /orgs/{org}/blocks"],listFailedInvitations:["GET /orgs/{org}/failed_invitations"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listIssueTypes:["GET /orgs/{org}/issue-types"],listMembers:["GET /orgs/{org}/members"],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOrgRoleTeams:["GET /orgs/{org}/organization-roles/{role_id}/teams"],listOrgRoleUsers:["GET /orgs/{org}/organization-roles/{role_id}/users"],listOrgRoles:["GET /orgs/{org}/organization-roles"],listOrganizationFineGrainedPermissions:["GET /orgs/{org}/organization-fine-grained-permissions"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPatGrantRepositories:["GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"],listPatGrantRequestRepositories:["GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"],listPatGrantRequests:["GET /orgs/{org}/personal-access-token-requests"],listPatGrants:["GET /orgs/{org}/personal-access-tokens"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listSecurityManagerTeams:["GET /orgs/{org}/security-managers",{},{deprecated:"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams"}],listWebhookDeliveries:["GET /orgs/{org}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /orgs/{org}/hooks"],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],removeSecurityManagerTeam:["DELETE /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team"}],reviewPatGrantRequest:["POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"],reviewPatGrantRequestsInBulk:["POST /orgs/{org}/personal-access-token-requests"],revokeAllOrgRolesTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}"],revokeAllOrgRolesUser:["DELETE /orgs/{org}/organization-roles/users/{username}"],revokeOrgRoleTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],revokeOrgRoleUser:["DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"],setImmutableReleasesSettings:["PUT /orgs/{org}/settings/immutable-releases"],setImmutableReleasesSettingsRepositories:["PUT /orgs/{org}/settings/immutable-releases/repositories"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateIssueType:["PUT /orgs/{org}/issue-types/{issue_type_id}"],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updatePatAccess:["POST /orgs/{org}/personal-access-tokens/{pat_id}"],updatePatAccesses:["POST /orgs/{org}/personal-access-tokens"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"],updateWebhookConfigForOrg:["PATCH /orgs/{org}/hooks/{hook_id}/config"]},packages:{deletePackageForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}"],deletePackageForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],deletePackageForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}"],deletePackageVersionForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getAllPackageVersionsForAPackageOwnedByAnOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByOrg"]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions"],getPackageForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}"],getPackageForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}"],getPackageForUser:["GET /users/{username}/packages/{package_type}/{package_name}"],getPackageVersionForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],listDockerMigrationConflictingPackagesForAuthenticatedUser:["GET /user/docker/conflicts"],listDockerMigrationConflictingPackagesForOrganization:["GET /orgs/{org}/docker/conflicts"],listDockerMigrationConflictingPackagesForUser:["GET /users/{username}/docker/conflicts"],listPackagesForAuthenticatedUser:["GET /user/packages"],listPackagesForOrganization:["GET /orgs/{org}/packages"],listPackagesForUser:["GET /users/{username}/packages"],restorePackageForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForUser:["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageVersionForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForUser:["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]},privateRegistries:{createOrgPrivateRegistry:["POST /orgs/{org}/private-registries"],deleteOrgPrivateRegistry:["DELETE /orgs/{org}/private-registries/{secret_name}"],getOrgPrivateRegistry:["GET /orgs/{org}/private-registries/{secret_name}"],getOrgPublicKey:["GET /orgs/{org}/private-registries/public-key"],listOrgPrivateRegistries:["GET /orgs/{org}/private-registries"],updateOrgPrivateRegistry:["PATCH /orgs/{org}/private-registries/{secret_name}"]},projects:{addItemForOrg:["POST /orgs/{org}/projectsV2/{project_number}/items"],addItemForUser:["POST /users/{username}/projectsV2/{project_number}/items"],deleteItemForOrg:["DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}"],deleteItemForUser:["DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}"],getFieldForOrg:["GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}"],getFieldForUser:["GET /users/{username}/projectsV2/{project_number}/fields/{field_id}"],getForOrg:["GET /orgs/{org}/projectsV2/{project_number}"],getForUser:["GET /users/{username}/projectsV2/{project_number}"],getOrgItem:["GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}"],getUserItem:["GET /users/{username}/projectsV2/{project_number}/items/{item_id}"],listFieldsForOrg:["GET /orgs/{org}/projectsV2/{project_number}/fields"],listFieldsForUser:["GET /users/{username}/projectsV2/{project_number}/fields"],listForOrg:["GET /orgs/{org}/projectsV2"],listForUser:["GET /users/{username}/projectsV2"],listItemsForOrg:["GET /orgs/{org}/projectsV2/{project_number}/items"],listItemsForUser:["GET /users/{username}/projectsV2/{project_number}/items"],updateItemForOrg:["PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}"],updateItemForUser:["PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}"]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],createForRelease:["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],deleteForRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],listForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}",{},{renamed:["repos","acceptInvitationForAuthenticatedUser"]}],acceptInvitationForAuthenticatedUser:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],cancelPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"],checkAutomatedSecurityFixes:["GET /repos/{owner}/{repo}/automated-security-fixes"],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkImmutableReleases:["GET /repos/{owner}/{repo}/immutable-releases"],checkPrivateVulnerabilityReporting:["GET /repos/{owner}/{repo}/private-vulnerability-reporting"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts"],codeownersErrors:["GET /repos/{owner}/{repo}/codeowners/errors"],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],compareCommitsWithBasehead:["GET /repos/{owner}/{repo}/compare/{basehead}"],createAttestation:["POST /repos/{owner}/{repo}/attestations"],createAutolink:["POST /repos/{owner}/{repo}/autolinks"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentBranchPolicy:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],createDeploymentProtectionRule:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateEnvironment:["PUT /repos/{owner}/{repo}/environments/{environment_name}"],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createOrgRuleset:["POST /orgs/{org}/rulesets"],createPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments"],createPagesSite:["POST /repos/{owner}/{repo}/pages"],createRelease:["POST /repos/{owner}/{repo}/releases"],createRepoRuleset:["POST /repos/{owner}/{repo}/rulesets"],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate"],createWebhook:["POST /repos/{owner}/{repo}/hooks"],customPropertiesForReposCreateOrUpdateRepositoryValues:["PATCH /repos/{owner}/{repo}/properties/values"],customPropertiesForReposGetRepositoryValues:["GET /repos/{owner}/{repo}/properties/values"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}",{},{renamed:["repos","declineInvitationForAuthenticatedUser"]}],declineInvitationForAuthenticatedUser:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteAnEnvironment:["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],deleteAutolink:["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteDeploymentBranchPolicy:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deleteOrgRuleset:["DELETE /orgs/{org}/rulesets/{ruleset_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages"],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteRepoRuleset:["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes"],disableDeploymentProtectionRule:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],disableImmutableReleases:["DELETE /repos/{owner}/{repo}/immutable-releases"],disablePrivateVulnerabilityReporting:["DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],downloadArchive:["GET /repos/{owner}/{repo}/zipball/{ref}",{},{renamed:["repos","downloadZipballArchive"]}],downloadTarballArchive:["GET /repos/{owner}/{repo}/tarball/{ref}"],downloadZipballArchive:["GET /repos/{owner}/{repo}/zipball/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes"],enableImmutableReleases:["PUT /repos/{owner}/{repo}/immutable-releases"],enablePrivateVulnerabilityReporting:["PUT /repos/{owner}/{repo}/private-vulnerability-reporting"],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts"],generateReleaseNotes:["POST /repos/{owner}/{repo}/releases/generate-notes"],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllDeploymentProtectionRules:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],getAllEnvironments:["GET /repos/{owner}/{repo}/environments"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics"],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getAutolink:["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getBranchRules:["GET /repos/{owner}/{repo}/rules/branches/{branch}"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getCustomDeploymentProtectionRule:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentBranchPolicy:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getEnvironment:["GET /repos/{owner}/{repo}/environments/{environment_name}"],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getOrgRuleSuite:["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],getOrgRuleSuites:["GET /orgs/{org}/rulesets/rule-suites"],getOrgRuleset:["GET /orgs/{org}/rulesets/{ruleset_id}"],getOrgRulesets:["GET /orgs/{org}/rulesets"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getPagesDeployment:["GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"],getPagesHealthCheck:["GET /repos/{owner}/{repo}/pages/health"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getReadmeInDirectory:["GET /repos/{owner}/{repo}/readme/{dir}"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getRepoRuleSuite:["GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"],getRepoRuleSuites:["GET /repos/{owner}/{repo}/rulesets/rule-suites"],getRepoRuleset:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],getRepoRulesetHistory:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history"],getRepoRulesetVersion:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}"],getRepoRulesets:["GET /repos/{owner}/{repo}/rulesets"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],getWebhookConfigForRepo:["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],listActivities:["GET /repos/{owner}/{repo}/activity"],listAttestations:["GET /repos/{owner}/{repo}/attestations/{subject_digest}"],listAutolinks:["GET /repos/{owner}/{repo}/autolinks"],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listCustomDeploymentRuleIntegrations:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentBranchPolicies:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listWebhookDeliveries:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],mergeUpstream:["POST /repos/{owner}/{repo}/merge-upstream"],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],renameBranch:["POST /repos/{owner}/{repo}/branches/{branch}/rename"],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics"],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateDeploymentBranchPolicy:["PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updateOrgRuleset:["PUT /orgs/{org}/rulesets/{ruleset_id}"],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateRepoRuleset:["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusCheckProtection"]}],updateStatusCheckProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],updateWebhookConfigForRepo:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits"],issuesAndPullRequests:["GET /search/issues"],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},secretScanning:{createPushProtectionBypass:["POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses"],getAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],getScanHistory:["GET /repos/{owner}/{repo}/secret-scanning/scan-history"],listAlertsForOrg:["GET /orgs/{org}/secret-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/secret-scanning/alerts"],listLocationsForAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],listOrgPatternConfigs:["GET /orgs/{org}/secret-scanning/pattern-configurations"],updateAlert:["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],updateOrgPatternConfigs:["PATCH /orgs/{org}/secret-scanning/pattern-configurations"]},securityAdvisories:{createFork:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"],createPrivateVulnerabilityReport:["POST /repos/{owner}/{repo}/security-advisories/reports"],createRepositoryAdvisory:["POST /repos/{owner}/{repo}/security-advisories"],createRepositoryAdvisoryCveRequest:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"],getGlobalAdvisory:["GET /advisories/{ghsa_id}"],getRepositoryAdvisory:["GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"],listGlobalAdvisories:["GET /advisories"],listOrgRepositoryAdvisories:["GET /orgs/{org}/security-advisories"],listRepositoryAdvisories:["GET /repos/{owner}/{repo}/security-advisories"],updateRepositoryAdvisory:["PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails",{},{renamed:["users","addEmailForAuthenticatedUser"]}],addEmailForAuthenticatedUser:["POST /user/emails"],addSocialAccountForAuthenticatedUser:["POST /user/social_accounts"],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKeyForAuthenticated:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticatedUser"]}],createGpgKeyForAuthenticatedUser:["POST /user/gpg_keys"],createPublicSshKeyForAuthenticated:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticatedUser"]}],createPublicSshKeyForAuthenticatedUser:["POST /user/keys"],createSshSigningKeyForAuthenticatedUser:["POST /user/ssh_signing_keys"],deleteAttestationsBulk:["POST /users/{username}/attestations/delete-request"],deleteAttestationsById:["DELETE /users/{username}/attestations/{attestation_id}"],deleteAttestationsBySubjectDigest:["DELETE /users/{username}/attestations/digest/{subject_digest}"],deleteEmailForAuthenticated:["DELETE /user/emails",{},{renamed:["users","deleteEmailForAuthenticatedUser"]}],deleteEmailForAuthenticatedUser:["DELETE /user/emails"],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticatedUser"]}],deleteGpgKeyForAuthenticatedUser:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticatedUser"]}],deletePublicSshKeyForAuthenticatedUser:["DELETE /user/keys/{key_id}"],deleteSocialAccountForAuthenticatedUser:["DELETE /user/social_accounts"],deleteSshSigningKeyForAuthenticatedUser:["DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getById:["GET /user/{account_id}"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticatedUser"]}],getGpgKeyForAuthenticatedUser:["GET /user/gpg_keys/{gpg_key_id}"],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticatedUser"]}],getPublicSshKeyForAuthenticatedUser:["GET /user/keys/{key_id}"],getSshSigningKeyForAuthenticatedUser:["GET /user/ssh_signing_keys/{ssh_signing_key_id}"],list:["GET /users"],listAttestations:["GET /users/{username}/attestations/{subject_digest}"],listAttestationsBulk:["POST /users/{username}/attestations/bulk-list{?per_page,before,after}"],listBlockedByAuthenticated:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticatedUser"]}],listBlockedByAuthenticatedUser:["GET /user/blocks"],listEmailsForAuthenticated:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticatedUser"]}],listEmailsForAuthenticatedUser:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticatedUser"]}],listFollowedByAuthenticatedUser:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForUser:["GET /users/{username}/following"],listGpgKeysForAuthenticated:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticatedUser"]}],listGpgKeysForAuthenticatedUser:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmailsForAuthenticated:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticatedUser:["GET /user/public_emails"],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticatedUser"]}],listPublicSshKeysForAuthenticatedUser:["GET /user/keys"],listSocialAccountsForAuthenticatedUser:["GET /user/social_accounts"],listSocialAccountsForUser:["GET /users/{username}/social_accounts"],listSshSigningKeysForAuthenticatedUser:["GET /user/ssh_signing_keys"],listSshSigningKeysForUser:["GET /users/{username}/ssh_signing_keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticatedUser"]}],setPrimaryEmailVisibilityForAuthenticatedUser:["PATCH /user/email/visibility"],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}},yi=jl});function Zr(r){let e={};for(let t of _t.keys())e[t]=new Proxy({octokit:r,scope:t,cache:{}},Nl);return e}function Hl(r,e,t,s,o){let n=r.request.defaults(s);function i(...a){let c=n.endpoint.merge(...a);if(o.mapToData)return c=Object.assign({},c,{data:c[o.mapToData],[o.mapToData]:void 0}),n(c);if(o.renamed){let[l,d]=o.renamed;r.log.warn(`octokit.${e}.${t}() has been renamed to octokit.${l}.${d}()`)}if(o.deprecated&&r.log.warn(o.deprecated),o.renamedParameters){let l=n.endpoint.merge(...a);for(let[d,p]of Object.entries(o.renamedParameters))d in l&&(r.log.warn(`"${d}" parameter is deprecated for "octokit.${e}.${t}()". Use "${p}" instead`),p in l||(l[p]=l[d]),delete l[d]);return n(l)}return n(...a)}return Object.assign(i,n)}var _t,Nl,_i=O(()=>{vi();_t=new Map;for(let[r,e]of Object.entries(yi))for(let[t,s]of Object.entries(e)){let[o,n,i]=s,[a,c]=o.split(/ /),l=Object.assign({method:a,url:c},n);_t.has(r)||_t.set(r,new Map),_t.get(r).set(t,{scope:r,methodName:t,endpointDefaults:l,decorations:i})}Nl={has({scope:r},e){return _t.get(r).has(e)},getOwnPropertyDescriptor(r,e){return{value:this.get(r,e),configurable:!0,writable:!0,enumerable:!0}},defineProperty(r,e,t){return Object.defineProperty(r.cache,e,t),!0},deleteProperty(r,e){return delete r.cache[e],!0},ownKeys({scope:r}){return[..._t.get(r).keys()]},set(r,e,t){return r.cache[e]=t},get({octokit:r,scope:e,cache:t},s){if(t[s])return t[s];let o=_t.get(e).get(s);if(!o)return;let{endpointDefaults:n,decorations:i}=o;return i?t[s]=Hl(r,e,s,n,i):t[s]=r.request.defaults(n),t[s]}}});function ql(r){return{rest:Zr(r)}}function eo(r){let e=Zr(r);return{...e,rest:e}}var wi=O(()=>{bi();_i();ql.VERSION=Xr;eo.VERSION=Xr});var Ei,Ri=O(()=>{Ei="22.0.1"});var Ti,Si=O(()=>{ui();gi();fi();wi();Ri();Ti=Ps.plugin(Kr,eo,Qr).defaults({userAgent:`octokit-rest.js/${Ei}`})});var Ci=Je((to,so)=>{(function(r,e){typeof to=="object"&&typeof so<"u"?so.exports=e():typeof define=="function"&&define.amd?define(e):r.Bottleneck=e()})(to,(function(){"use strict";var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function e($){return $&&$.default||$}var t=function($,f,u={}){var b,_,E;for(b in f)E=f[b],u[b]=(_=$[b])!=null?_:E;return u},s=function($,f,u={}){var b,_;for(b in $)_=$[b],f[b]!==void 0&&(u[b]=_);return u},o={load:t,overwrite:s},n;n=class{constructor(f,u){this.incr=f,this.decr=u,this._first=null,this._last=null,this.length=0}push(f){var u;this.length++,typeof this.incr=="function"&&this.incr(),u={value:f,prev:this._last,next:null},this._last!=null?(this._last.next=u,this._last=u):this._first=this._last=u}shift(){var f;if(this._first!=null)return this.length--,typeof this.decr=="function"&&this.decr(),f=this._first.value,(this._first=this._first.next)!=null?this._first.prev=null:this._last=null,f}first(){if(this._first!=null)return this._first.value}getArray(){var f,u,b;for(f=this._first,b=[];f!=null;)b.push((u=f,f=f.next,u.value));return b}forEachShift(f){var u;for(u=this.shift();u!=null;)f(u),u=this.shift()}debug(){var f,u,b,_,E;for(f=this._first,E=[];f!=null;)E.push((u=f,f=f.next,{value:u.value,prev:(b=u.prev)!=null?b.value:void 0,next:(_=u.next)!=null?_.value:void 0}));return E}};var i=n,a;a=class{constructor(f){if(this.instance=f,this._events={},this.instance.on!=null||this.instance.once!=null||this.instance.removeAllListeners!=null)throw new Error("An Emitter already exists for this object");this.instance.on=(u,b)=>this._addListener(u,"many",b),this.instance.once=(u,b)=>this._addListener(u,"once",b),this.instance.removeAllListeners=(u=null)=>u!=null?delete this._events[u]:this._events={}}_addListener(f,u,b){var _;return(_=this._events)[f]==null&&(_[f]=[]),this._events[f].push({cb:b,status:u}),this.instance}listenerCount(f){return this._events[f]!=null?this._events[f].length:0}async trigger(f,...u){var b,_;try{return f!=="debug"&&this.trigger("debug",`Event triggered: ${f}`,u),this._events[f]==null?void 0:(this._events[f]=this._events[f].filter(function(E){return E.status!=="none"}),_=this._events[f].map(async E=>{var C,x;if(E.status!=="none"){E.status==="once"&&(E.status="none");try{return x=typeof E.cb=="function"?E.cb(...u):void 0,typeof x?.then=="function"?await x:x}catch(z){return C=z,this.trigger("error",C),null}}}),(await Promise.all(_)).find(function(E){return E!=null}))}catch(E){return b=E,this.trigger("error",b),null}}};var c=a,l,d,p;l=i,d=c,p=class{constructor(f){var u;this.Events=new d(this),this._length=0,this._lists=(function(){var b,_,E;for(E=[],u=b=1,_=f;1<=_?b<=_:b>=_;u=1<=_?++b:--b)E.push(new l((()=>this.incr()),(()=>this.decr())));return E}).call(this)}incr(){if(this._length++===0)return this.Events.trigger("leftzero")}decr(){if(--this._length===0)return this.Events.trigger("zero")}push(f){return this._lists[f.options.priority].push(f)}queued(f){return f!=null?this._lists[f].length:this._length}shiftAll(f){return this._lists.forEach(function(u){return u.forEachShift(f)})}getFirst(f=this._lists){var u,b,_;for(u=0,b=f.length;u<b;u++)if(_=f[u],_.length>0)return _;return[]}shiftLastFrom(f){return this.getFirst(this._lists.slice(f).reverse()).shift()}};var m=p,w;w=class extends Error{};var g=w,y,S,h,k,T;k=10,S=5,T=o,y=g,h=class{constructor(f,u,b,_,E,C,x,z){this.task=f,this.args=u,this.rejectOnDrop=E,this.Events=C,this._states=x,this.Promise=z,this.options=T.load(b,_),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===_.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((le,ge)=>{this._resolve=le,this._reject=ge}),this.retryCount=0}_sanitizePriority(f){var u;return u=~~f!==f?S:f,u<0?0:u>k-1?k-1:u}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:f,message:u="This job has been dropped by Bottleneck"}={}){return this._states.remove(this.options.id)?(this.rejectOnDrop&&this._reject(f??new y(u)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0):!1}_assertStatus(f){var u;if(u=this._states.jobStatus(this.options.id),!(u===f||f==="DONE"&&u===null))throw new y(`Invalid job status ${u}, expected ${f}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`)}doReceive(){return this._states.start(this.options.id),this.Events.trigger("received",{args:this.args,options:this.options})}doQueue(f,u){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:f,blocked:u})}doRun(){return this.retryCount===0?(this._assertStatus("QUEUED"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),this.Events.trigger("scheduled",{args:this.args,options:this.options})}async doExecute(f,u,b,_){var E,C,x;this.retryCount===0?(this._assertStatus("RUNNING"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),C={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",C);try{if(x=await(f!=null?f.schedule(this.options,this.task,...this.args):this.task(...this.args)),u())return this.doDone(C),await _(this.options,C),this._assertStatus("DONE"),this._resolve(x)}catch(z){return E=z,this._onFailure(E,C,u,b,_)}}doExpire(f,u,b){var _,E;return this._states.jobStatus(this.options.id==="RUNNING")&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),E={args:this.args,options:this.options,retryCount:this.retryCount},_=new y(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(_,E,f,u,b)}async _onFailure(f,u,b,_,E){var C,x;if(b())return C=await this.Events.trigger("failed",f,u),C!=null?(x=~~C,this.Events.trigger("retry",`Retrying ${this.options.id} after ${x} ms`,u),this.retryCount++,_(x)):(this.doDone(u),await E(this.options,u),this._assertStatus("DONE"),this._reject(f))}doDone(f){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",f)}};var R=h,I,G,D;D=o,I=g,G=class{constructor(f,u,b){this.instance=f,this.storeOptions=u,this.clientId=this.instance._randomIndex(),D.load(b,b,this),this._nextRequest=this._lastReservoirRefresh=this._lastReservoirIncrease=Date.now(),this._running=0,this._done=0,this._unblockTime=0,this.ready=this.Promise.resolve(),this.clients={},this._startHeartbeat()}_startHeartbeat(){var f;return this.heartbeat==null&&(this.storeOptions.reservoirRefreshInterval!=null&&this.storeOptions.reservoirRefreshAmount!=null||this.storeOptions.reservoirIncreaseInterval!=null&&this.storeOptions.reservoirIncreaseAmount!=null)?typeof(f=this.heartbeat=setInterval(()=>{var u,b,_,E,C;if(E=Date.now(),this.storeOptions.reservoirRefreshInterval!=null&&E>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=E,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),this.storeOptions.reservoirIncreaseInterval!=null&&E>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval&&({reservoirIncreaseAmount:u,reservoirIncreaseMaximum:_,reservoir:C}=this.storeOptions,this._lastReservoirIncrease=E,b=_!=null?Math.min(u,_-C):u,b>0))return this.storeOptions.reservoir+=b,this.instance._drainAll(this.computeCapacity())},this.heartbeatInterval)).unref=="function"?f.unref():void 0:clearInterval(this.heartbeat)}async __publish__(f){return await this.yieldLoop(),this.instance.Events.trigger("message",f.toString())}async __disconnect__(f){return await this.yieldLoop(),clearInterval(this.heartbeat),this.Promise.resolve()}yieldLoop(f=0){return new this.Promise(function(u,b){return setTimeout(u,f)})}computePenalty(){var f;return(f=this.storeOptions.penalty)!=null?f:15*this.storeOptions.minTime||5e3}async __updateSettings__(f){return await this.yieldLoop(),D.overwrite(f,f,this.storeOptions),this._startHeartbeat(),this.instance._drainAll(this.computeCapacity()),!0}async __running__(){return await this.yieldLoop(),this._running}async __queued__(){return await this.yieldLoop(),this.instance.queued()}async __done__(){return await this.yieldLoop(),this._done}async __groupCheck__(f){return await this.yieldLoop(),this._nextRequest+this.timeout<f}computeCapacity(){var f,u;return{maxConcurrent:f,reservoir:u}=this.storeOptions,f!=null&&u!=null?Math.min(f-this._running,u):f!=null?f-this._running:u??null}conditionsCheck(f){var u;return u=this.computeCapacity(),u==null||f<=u}async __incrementReservoir__(f){var u;return await this.yieldLoop(),u=this.storeOptions.reservoir+=f,this.instance._drainAll(this.computeCapacity()),u}async __currentReservoir__(){return await this.yieldLoop(),this.storeOptions.reservoir}isBlocked(f){return this._unblockTime>=f}check(f,u){return this.conditionsCheck(f)&&this._nextRequest-u<=0}async __check__(f){var u;return await this.yieldLoop(),u=Date.now(),this.check(f,u)}async __register__(f,u,b){var _,E;return await this.yieldLoop(),_=Date.now(),this.conditionsCheck(u)?(this._running+=u,this.storeOptions.reservoir!=null&&(this.storeOptions.reservoir-=u),E=Math.max(this._nextRequest-_,0),this._nextRequest=_+E+this.storeOptions.minTime,{success:!0,wait:E,reservoir:this.storeOptions.reservoir}):{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(f,u){var b,_,E;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&u>this.storeOptions.maxConcurrent)throw new I(`Impossible to add a job having a weight of ${u} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);return _=Date.now(),E=this.storeOptions.highWater!=null&&f===this.storeOptions.highWater&&!this.check(u,_),b=this.strategyIsBlock()&&(E||this.isBlocked(_)),b&&(this._unblockTime=_+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued()),{reachedHWM:E,blocked:b,strategy:this.storeOptions.strategy}}async __free__(f,u){return await this.yieldLoop(),this._running-=u,this._done+=u,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var q=G,Z,pe;Z=g,pe=class{constructor(f){this.status=f,this._jobs={},this.counts=this.status.map(function(){return 0})}next(f){var u,b;if(u=this._jobs[f],b=u+1,u!=null&&b<this.status.length)return this.counts[u]--,this.counts[b]++,this._jobs[f]++;if(u!=null)return this.counts[u]--,delete this._jobs[f]}start(f){var u;return u=0,this._jobs[f]=u,this.counts[u]++}remove(f){var u;return u=this._jobs[f],u!=null&&(this.counts[u]--,delete this._jobs[f]),u!=null}jobStatus(f){var u;return(u=this.status[this._jobs[f]])!=null?u:null}statusJobs(f){var u,b,_,E,C;if(f!=null){if(b=this.status.indexOf(f),b<0)throw new Z(`status must be one of ${this.status.join(", ")}`);_=this._jobs,E=[];for(u in _)C=_[u],C===b&&E.push(u);return E}else return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce(((f,u,b)=>(f[this.status[b]]=u,f)),{})}};var Ne=pe,_e,he;_e=i,he=class{constructor(f,u){this.schedule=this.schedule.bind(this),this.name=f,this.Promise=u,this._running=0,this._queue=new _e}isEmpty(){return this._queue.length===0}async _tryToRun(){var f,u,b,_,E,C,x;if(this._running<1&&this._queue.length>0)return this._running++,{task:x,args:f,resolve:E,reject:_}=this._queue.shift(),u=await(async function(){try{return C=await x(...f),function(){return E(C)}}catch(z){return b=z,function(){return _(b)}}})(),this._running--,this._tryToRun(),u()}schedule(f,...u){var b,_,E;return E=_=null,b=new this.Promise(function(C,x){return E=C,_=x}),this._queue.push({task:f,args:u,resolve:E,reject:_}),this._tryToRun(),b}};var ze=he,be="2.19.5",Ae={version:be},we=Object.freeze({version:be,default:Ae}),M=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),H=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),se=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),j,B,ee,De,ot,We;We=o,j=c,De=M,ee=H,ot=se,B=(function(){class ${constructor(u={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=u,We.load(this.limiterOptions,this.defaults,this),this.Events=new j(this),this.instances={},this.Bottleneck=Xo,this._startAutoCleanup(),this.sharedConnection=this.connection!=null,this.connection==null&&(this.limiterOptions.datastore==="redis"?this.connection=new De(Object.assign({},this.limiterOptions,{Events:this.Events})):this.limiterOptions.datastore==="ioredis"&&(this.connection=new ee(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(u=""){var b;return(b=this.instances[u])!=null?b:(()=>{var _;return _=this.instances[u]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${u}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",_,u),_})()}async deleteKey(u=""){var b,_;return _=this.instances[u],this.connection&&(b=await this.connection.__runCommand__(["del",...ot.allKeys(`${this.id}-${u}`)])),_!=null&&(delete this.instances[u],await _.disconnect()),_!=null||b>0}limiters(){var u,b,_,E;b=this.instances,_=[];for(u in b)E=b[u],_.push({key:u,limiter:E});return _}keys(){return Object.keys(this.instances)}async clusterKeys(){var u,b,_,E,C,x,z,le,ge;if(this.connection==null)return this.Promise.resolve(this.keys());for(x=[],u=null,ge=`b_${this.id}-`.length,b=9;u!==0;)for([le,_]=await this.connection.__runCommand__(["scan",u??0,"match",`b_${this.id}-*_settings`,"count",1e4]),u=~~le,E=0,z=_.length;E<z;E++)C=_[E],x.push(C.slice(ge,-b));return x}_startAutoCleanup(){var u;return clearInterval(this.interval),typeof(u=this.interval=setInterval(async()=>{var b,_,E,C,x,z;x=Date.now(),E=this.instances,C=[];for(_ in E){z=E[_];try{await z._store.__groupCheck__(x)?C.push(this.deleteKey(_)):C.push(void 0)}catch(le){b=le,C.push(z.Events.trigger("error",b))}}return C},this.timeout/2)).unref=="function"?u.unref():void 0}updateSettings(u={}){if(We.overwrite(u,this.defaults,this),We.overwrite(u,u,this.limiterOptions),u.timeout!=null)return this._startAutoCleanup()}disconnect(u=!0){var b;if(!this.sharedConnection)return(b=this.connection)!=null?b.disconnect(u):void 0}}return $.prototype.defaults={timeout:1e3*60*5,connection:null,Promise,id:"group-key"},$}).call(r);var dr=B,Ho,qo,Bo;Bo=o,qo=c,Ho=(function(){class ${constructor(u={}){this.options=u,Bo.load(this.options,this.defaults,this),this.Events=new qo(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((u,b)=>this._resolve=u)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(u){var b;return this._arr.push(u),b=this._promise,this._arr.length===this.maxSize?this._flush():this.maxTime!=null&&this._arr.length===1&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),b}}return $.prototype.defaults={maxTime:null,maxSize:null,Promise},$}).call(r);var fc=Ho,bc=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),yc=e(we),Vo,zo,pr,gr,Wo,mr,Jo,Ko,Yo,hr,He,Qo=[].splice;mr=10,zo=5,He=o,Jo=m,gr=R,Wo=q,Ko=bc,pr=c,Yo=Ne,hr=ze,Vo=(function(){class ${constructor(u={},...b){var _,E;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(u,b),He.load(u,this.instanceDefaults,this),this._queues=new Jo(mr),this._scheduled={},this._states=new Yo(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new pr(this),this._submitLock=new hr("submit",this.Promise),this._registerLock=new hr("register",this.Promise),E=He.load(u,this.storeDefaults,{}),this._store=(function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return _=He.load(u,this.redisStoreDefaults,{}),new Ko(this,E,_);if(this.datastore==="local")return _=He.load(u,this.localStoreDefaults,{}),new Wo(this,E,_);throw new $.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}).call(this),this._queues.on("leftzero",()=>{var C;return(C=this._store.heartbeat)!=null&&typeof C.ref=="function"?C.ref():void 0}),this._queues.on("zero",()=>{var C;return(C=this._store.heartbeat)!=null&&typeof C.unref=="function"?C.unref():void 0})}_validateOptions(u,b){if(!(u!=null&&typeof u=="object"&&b.length===0))throw new $.prototype.BottleneckError("Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.")}ready(){return this._store.ready}clients(){return this._store.clients}channel(){return`b_${this.id}`}channel_client(){return`b_${this.id}_${this._store.clientId}`}publish(u){return this._store.__publish__(u)}disconnect(u=!0){return this._store.__disconnect__(u)}chain(u){return this._limiter=u,this}queued(u){return this._queues.queued(u)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(u){return this._states.jobStatus(u)}jobs(u){return this._states.statusJobs(u)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(u=1){return this._store.__check__(u)}_clearGlobalState(u){return this._scheduled[u]!=null?(clearTimeout(this._scheduled[u].expiration),delete this._scheduled[u],!0):!1}async _free(u,b,_,E){var C,x;try{if({running:x}=await this._store.__free__(u,_.weight),this.Events.trigger("debug",`Freed ${_.id}`,E),x===0&&this.empty())return this.Events.trigger("idle")}catch(z){return C=z,this.Events.trigger("error",C)}}_run(u,b,_){var E,C,x;return b.doRun(),E=this._clearGlobalState.bind(this,u),x=this._run.bind(this,u,b),C=this._free.bind(this,u,b),this._scheduled[u]={timeout:setTimeout(()=>b.doExecute(this._limiter,E,x,C),_),expiration:b.options.expiration!=null?setTimeout(function(){return b.doExpire(E,x,C)},_+b.options.expiration):void 0,job:b}}_drainOne(u){return this._registerLock.schedule(()=>{var b,_,E,C,x;return this.queued()===0?this.Promise.resolve(null):(x=this._queues.getFirst(),{options:C,args:b}=E=x.first(),u!=null&&C.weight>u?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${C.id}`,{args:b,options:C}),_=this._randomIndex(),this._store.__register__(_,C.weight,C.expiration).then(({success:z,wait:le,reservoir:ge})=>{var Ft;return this.Events.trigger("debug",`Drained ${C.id}`,{success:z,args:b,options:C}),z?(x.shift(),Ft=this.empty(),Ft&&this.Events.trigger("empty"),ge===0&&this.Events.trigger("depleted",Ft),this._run(_,E,le),this.Promise.resolve(C.weight)):this.Promise.resolve(null)})))})}_drainAll(u,b=0){return this._drainOne(u).then(_=>{var E;return _!=null?(E=u!=null?u-_:u,this._drainAll(E,b+_)):this.Promise.resolve(b)}).catch(_=>this.Events.trigger("error",_))}_dropAllQueued(u){return this._queues.shiftAll(function(b){return b.doDrop({message:u})})}stop(u={}){var b,_;return u=He.load(u,this.stopDefaults),_=E=>{var C;return C=()=>{var x;return x=this._states.counts,x[0]+x[1]+x[2]+x[3]===E},new this.Promise((x,z)=>C()?x():this.on("done",()=>{if(C())return this.removeAllListeners("done"),x()}))},b=u.dropWaitingJobs?(this._run=function(E,C){return C.doDrop({message:u.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var E,C,x;C=this._scheduled;for(E in C)x=C[E],this.jobStatus(x.job.options.id)==="RUNNING"&&(clearTimeout(x.timeout),clearTimeout(x.expiration),x.job.doDrop({message:u.dropErrorMessage}));return this._dropAllQueued(u.dropErrorMessage),_(0)}))):this.schedule({priority:mr-1,weight:0},()=>_(1)),this._receive=function(E){return E._reject(new $.prototype.BottleneckError(u.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new $.prototype.BottleneckError("stop() has already been called")),b}async _addToQueue(u){var b,_,E,C,x,z,le;({args:b,options:C}=u);try{({reachedHWM:x,blocked:_,strategy:le}=await this._store.__submit__(this.queued(),C.weight))}catch(ge){return E=ge,this.Events.trigger("debug",`Could not queue ${C.id}`,{args:b,options:C,error:E}),u.doDrop({error:E}),!1}return _?(u.doDrop(),!0):x&&(z=le===$.prototype.strategy.LEAK?this._queues.shiftLastFrom(C.priority):le===$.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(C.priority+1):le===$.prototype.strategy.OVERFLOW?u:void 0,z?.doDrop(),z==null||le===$.prototype.strategy.OVERFLOW)?(z==null&&u.doDrop(),x):(u.doQueue(x,_),this._queues.push(u),await this._drainAll(),x)}_receive(u){return this._states.jobStatus(u.options.id)!=null?(u._reject(new $.prototype.BottleneckError(`A job with the same id already exists (id=${u.options.id})`)),!1):(u.doReceive(),this._submitLock.schedule(this._addToQueue,u))}submit(...u){var b,_,E,C,x,z,le;return typeof u[0]=="function"?(x=u,[_,...u]=x,[b]=Qo.call(u,-1),C=He.load({},this.jobDefaults)):(z=u,[C,_,...u]=z,[b]=Qo.call(u,-1),C=He.load(C,this.jobDefaults)),le=(...ge)=>new this.Promise(function(Ft,_c){return _(...ge,function(...Zo){return(Zo[0]!=null?_c:Ft)(Zo)})}),E=new gr(le,u,C,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),E.promise.then(function(ge){return typeof b=="function"?b(...ge):void 0}).catch(function(ge){return Array.isArray(ge)?typeof b=="function"?b(...ge):void 0:typeof b=="function"?b(ge):void 0}),this._receive(E)}schedule(...u){var b,_,E;return typeof u[0]=="function"?([E,...u]=u,_={}):[_,E,...u]=u,b=new gr(E,u,_,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(b),b.promise}wrap(u){var b,_;return b=this.schedule.bind(this),_=function(...E){return b(u.bind(this),...E)},_.withOptions=function(E,...C){return b(E,u,...C)},_}async updateSettings(u={}){return await this._store.__updateSettings__(He.overwrite(u,this.storeDefaults)),He.overwrite(u,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(u=0){return this._store.__incrementReservoir__(u)}}return $.default=$,$.Events=pr,$.version=$.prototype.version=yc.version,$.strategy=$.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},$.BottleneckError=$.prototype.BottleneckError=g,$.Group=$.prototype.Group=dr,$.RedisConnection=$.prototype.RedisConnection=M,$.IORedisConnection=$.prototype.IORedisConnection=H,$.Batcher=$.prototype.Batcher=fc,$.prototype.jobDefaults={priority:zo,weight:1,expiration:null,id:"<no-id>"},$.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:$.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},$.prototype.localStoreDefaults={Promise,timeout:null,heartbeatInterval:250},$.prototype.redisStoreDefaults={Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},$.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise},$.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},$}).call(r);var Xo=Vo,vc=Xo;return vc}))});function Vl(r,e,t){return r.retryLimiter.schedule(zl,r,e,t)}async function zl(r,e,t){let{pathname:s}=new URL(t.url,"http://github.test"),o=Wl(t.method,s),n=!o&&t.method!=="GET"&&t.method!=="HEAD",i=t.method==="GET"&&s.startsWith("/search/"),a=s.startsWith("/graphql"),l=~~e.retryCount>0?{priority:0,weight:0}:{};r.clustering&&(l.expiration=1e3*60),(n||a)&&await r.write.key(r.id).schedule(l,ro),n&&r.triggersNotification(s)&&await r.notifications.key(r.id).schedule(l,ro),i&&await r.search.key(r.id).schedule(l,ro);let d=(o?r.auth:r.global).key(r.id).schedule(l,e,t);if(a){let p=await d;if(p.data.errors!=null&&p.data.errors.some(m=>m.type==="RATE_LIMITED"))throw Object.assign(new Error("GraphQL Rate Limit Exceeded"),{response:p,data:p.data})}return d}function Wl(r,e){return r==="PATCH"&&/^\/applications\/[^/]+\/token\/scoped$/.test(e)||r==="POST"&&(/^\/applications\/[^/]+\/token$/.test(e)||/^\/app\/installations\/[^/]+\/access_tokens$/.test(e)||e==="/login/oauth/access_token")}function Kl(r){let t=`^(?:${r.map(s=>s.split("/").map(o=>o.startsWith("{")?"(?:.+?)":o).join("/")).map(s=>`(?:${s})`).join("|")})[^/]*$`;return new RegExp(t,"i")}function ks(r,e){let{enabled:t=!0,Bottleneck:s=ki.default,id:o="no-id",timeout:n=1e3*60*2,connection:i}=e.throttle||{};if(!t)return{};let a={timeout:n};typeof i<"u"&&(a.connection=i),wt.global==null&&Yl(s,a);let c=Object.assign({clustering:i!=null,triggersNotification:Ai,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new s,id:o,...wt},e.throttle);if(typeof c.onSecondaryRateLimit!="function"||typeof c.onRateLimit!="function")throw new Error(`octokit/plugin-throttling error:
|
|
36
36
|
You must pass the onSecondaryRateLimit and onRateLimit error handlers.
|
|
37
37
|
See https://octokit.github.io/rest.js/#throttling
|
|
38
38
|
|
|
@@ -42,20 +42,20 @@ The gh CLI is recommended - install from https://cli.github.com`);return r}funct
|
|
|
42
42
|
onRateLimit: (retryAfter, options) => {/* ... */}
|
|
43
43
|
}
|
|
44
44
|
})
|
|
45
|
-
`);let l={},p=new s.Events(l);return l.on("secondary-limit",c.onSecondaryRateLimit),l.on("rate-limit",c.onRateLimit),l.on("error",d=>r.log.warn("Error in throttling-plugin limit handler",d)),c.retryLimiter.on("failed",async function(d,m){let[v,y,g]=m.args,{pathname:C}=new URL(g.url,"http://github.test");if(!(C.startsWith("/graphql")&&d.status!==401||d.status===403||d.status===429))return;let k=~~y.retryCount;y.retryCount=k,g.request.retryCount=k;let{wantRetry:E,retryAfter:w=0}=await(async function(){if(/\bsecondary rate\b/i.test(d.message)){let U=Number(d.response.headers["retry-after"])||v.fallbackSecondaryRateRetryAfter;return{wantRetry:await p.trigger("secondary-limit",U,g,r,k),retryAfter:U}}if(d.response.headers!=null&&d.response.headers["x-ratelimit-remaining"]==="0"||(d.response.data?.errors??[]).some(U=>U.type==="RATE_LIMITED")){let U=new Date(~~d.response.headers["x-ratelimit-reset"]*1e3).getTime(),$=Math.max(Math.ceil((U-Date.now())/1e3)+1,0);return{wantRetry:await p.trigger("rate-limit",$,g,r,k),retryAfter:$}}return{}})();if(E)return y.retryCount++,w*v.retryAfterBaseValue}),r.hook.wrap("request",xl.bind(null,c)),{}}var wi,Gl,Zr,Fl,_i,Ri,ft,Ml,Ei=O(()=>{wi=Q(vi(),1),Gl="0.0.0-development",Zr=()=>Promise.resolve();Fl=["/orgs/{org}/invitations","/orgs/{org}/invitations/{invitation_id}","/orgs/{org}/teams/{team_slug}/discussions","/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","/repos/{owner}/{repo}/collaborators/{username}","/repos/{owner}/{repo}/commits/{commit_sha}/comments","/repos/{owner}/{repo}/issues","/repos/{owner}/{repo}/issues/{issue_number}/comments","/repos/{owner}/{repo}/issues/{issue_number}/sub_issue","/repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority","/repos/{owner}/{repo}/pulls","/repos/{owner}/{repo}/pulls/{pull_number}/comments","/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies","/repos/{owner}/{repo}/pulls/{pull_number}/merge","/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","/repos/{owner}/{repo}/pulls/{pull_number}/reviews","/repos/{owner}/{repo}/releases","/teams/{team_id}/discussions","/teams/{team_id}/discussions/{discussion_number}/comments"];_i=Ul(Fl),Ri=_i.test.bind(_i),ft={},Ml=function(r,e){ft.global=new r.Group({id:"octokit-global",maxConcurrent:10,...e}),ft.auth=new r.Group({id:"octokit-auth",maxConcurrent:1,...e}),ft.search=new r.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...e}),ft.write=new r.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...e}),ft.notifications=new r.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...e})};Ts.VERSION=Gl;Ts.triggersNotification=Ri});function Ps(r){return r.toLocaleTimeString("en-US",{hour12:!1})}function _e(r){return Ss&&Ti===r||(Ss=new Ll({auth:r,throttle:{onRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<2?(T(Cs,`Rate limit hit (retry ${o+1}/2, waiting ${e}s, resets at ${Ps(i)}) \u2014 ${n.method} ${n.url}`),!0):(T(Cs,`Rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${Ps(i)})`),!1)},onSecondaryRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<1?(T(Cs,`Secondary rate limit hit (retry ${o+1}/1, waiting ${e}s, resets at ${Ps(i)}) \u2014 ${n.method} ${n.url}`),!0):(T(Cs,`Secondary rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${Ps(i)})`),!1)}}}),Ti=r),Ss}async function eo(r){let e=_e(r),{data:t}=await e.rateLimit.get(),s=t.resources.search;return{remaining:s.remaining,limit:s.limit,resetAt:new Date(s.reset*1e3).toISOString()}}var Cs,Ll,Ss,Ti,Bt=O(()=>{"use strict";yi();Ei();ye();Cs="github",Ll=bi.plugin(Ts),Ss=null,Ti=null});async function ks(r,e,t){let s=0,o=!1,n=async()=>{for(;s<r.length&&!o;){let a=r[s++];try{await e(a)}catch(c){throw o=!0,c}}},i=Math.min(t,r.length);await Promise.all(Array.from({length:i},()=>n()))}var to=O(()=>{"use strict"});async function Fe(r,e=100,t=10){let s=[];for(let o=1;o<=t;o++){let{data:n}=await r(o);if(s.push(...n),n.length<e)break}return s}var Vt=O(()=>{"use strict"});function Ye(){return so||(so=new Os),so}async function zt(r,e,t){let s=r.getInflight(e);if(s)return P(nt,`Dedup hit for ${e}`),await s;let n=(async()=>{let a={},c=r.get(e);c&&(a["if-none-match"]=c.etag);try{let l=await t(a),p=l.headers?.etag;return p&&r.set(e,p,l.data),l.data}catch(l){if(Nl(l)){let p=r.get(e);if(p)return P(nt,`304 cache hit for ${e}`),p.body}throw l}})(),i=r.setInflight(e,n);try{return await n}finally{i()}}async function $s(r,e,t,s){let o=r.getIfFresh(e,t);if(o)return P(nt,`Time-based cache hit for ${e}`),o;let n=await s();return r.set(e,"",n),n}function Nl(r){return me(r)===304}var Se,As,Ci,nt,jl,Os,so,At=O(()=>{"use strict";Se=Q(require("fs"),1),As=Q(require("path"),1),Ci=Q(require("crypto"),1);Ce();ye();ie();nt="http-cache",jl=1440*60*1e3,Os=class{cacheDir;inflightRequests=new Map;constructor(e){this.cacheDir=e??gs()}keyFor(e){return Ci.createHash("sha256").update(e).digest("hex")}pathFor(e){return As.join(this.cacheDir,`${this.keyFor(e)}.json`)}getIfFresh(e,t){let s=this.get(e);if(!s)return null;let o=Date.now()-new Date(s.cachedAt).getTime();return!Number.isFinite(o)||o<0||o>t?null:s.body}get(e){let t=this.pathFor(e);try{let s=Se.readFileSync(t,"utf-8"),o=JSON.parse(s);return o.url!==e?(P(nt,`Cache collision detected for ${e}, ignoring`),null):o}catch{return null}}set(e,t,s){let o={etag:t,url:e,body:s,cachedAt:new Date().toISOString()};try{Se.writeFileSync(this.pathFor(e),JSON.stringify(o),{encoding:"utf-8",mode:384}),P(nt,`Cached response for ${e}`)}catch(n){P(nt,`Failed to write cache for ${e}`,n)}}hasInflight(e){return this.inflightRequests.has(e)}getInflight(e){return this.inflightRequests.get(e)}setInflight(e,t){return this.inflightRequests.set(e,t),()=>{this.inflightRequests.delete(e)}}evictStale(e=jl){let t=0;try{let s=Se.readdirSync(this.cacheDir),o=Date.now();for(let n of s){if(!n.endsWith(".json"))continue;let i=As.join(this.cacheDir,n);try{let a=Se.readFileSync(i,"utf-8"),c=JSON.parse(a);o-new Date(c.cachedAt).getTime()>e&&(Se.unlinkSync(i),t++)}catch{try{Se.unlinkSync(i),t++}catch{}}}}catch{}return t>0&&P(nt,`Evicted ${t} stale cache entries`),t}clear(){try{let e=Se.readdirSync(this.cacheDir);for(let t of e)t.endsWith(".json")&&Se.unlinkSync(As.join(this.cacheDir,t));P(nt,"Cache cleared")}catch{}}size(){try{return Se.readdirSync(this.cacheDir).filter(e=>e.endsWith(".json")).length}catch{return 0}}},so=null});function ro(r,e,t){if(t==="cancelled"||t==="timed_out")return"infrastructure";let s=r.toLowerCase();if(Pi.some(o=>o.test(s)))return"auth_gate";if(Si.some(o=>o.test(s)))return"fork_limitation";if(ki.some(o=>o.test(s)))return"infrastructure";if(e){let o=e.toLowerCase();if(Pi.some(n=>n.test(o)))return"auth_gate";if(Si.some(n=>n.test(o)))return"fork_limitation";if(ki.some(n=>n.test(o)))return"infrastructure"}return"actionable"}function Gs(r,e){return r.map(t=>{let s=e?.get(t);return{name:t,category:ro(t,void 0,s),conclusion:s}})}function Ai(r){let e=!1,t=!1,s=!1,o=[],n=new Map;for(let i of r)i.conclusion==="failure"||i.conclusion==="cancelled"||i.conclusion==="timed_out"?(e=!0,o.push(i.name),n.set(i.name,i.conclusion)):i.conclusion==="action_required"||i.status==="in_progress"||i.status==="queued"?t=!0:i.conclusion==="success"&&(s=!0);return{hasFailingChecks:e,hasPendingChecks:t,hasSuccessfulChecks:s,failingCheckNames:o,failingCheckConclusions:n}}function Oi(r){let e=r.statuses.filter(c=>{let l=(c.description||"").toLowerCase();return!(c.state==="failure"&&(l.includes("authorization required")||l.includes("authorize")))}),t=e.some(c=>c.state==="failure"||c.state==="error"),s=e.some(c=>c.state==="pending"),o=e.some(c=>c.state==="success"),n=t?"failure":s?"pending":o||e.length===0?"success":r.state,i=r.statuses.length>0,a=[];for(let c of e)(c.state==="failure"||c.state==="error")&&a.push(c.context);return{effectiveCombinedState:n,hasStatuses:i,failingStatusNames:a}}function $i(r,e,t){let{hasFailingChecks:s,hasPendingChecks:o,hasSuccessfulChecks:n,failingCheckNames:i,failingCheckConclusions:a}=r,{effectiveCombinedState:c,hasStatuses:l,failingStatusNames:p}=e,d=[...i,...p];return s||c==="failure"||c==="error"?{status:"failing",failingCheckNames:d,failingCheckConclusions:a}:o||c==="pending"?{status:"pending",failingCheckNames:[],failingCheckConclusions:new Map}:n||c==="success"?{status:"passing",failingCheckNames:[],failingCheckConclusions:new Map}:!l&&t===0?{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}:{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}}var Si,Pi,ki,oo=O(()=>{"use strict";Si=[/vercel/i,/netlify/i,/\bpreview\s*deploy/i,/\bdeploy\s*preview/i,/storybook/i,/chromatic/i,/percy/i,/cloudflare pages/i],Pi=[/authoriz/i,/approval/i,/\bcla\b/i,/license\/cla/i],ki=[/\binstall\s*(os\s*)?dep(endenc|s\b)/i,/\bsetup\s+fail(ed|ure)?\b/i,/\bservice\s*unavailable/i,/\binfrastructure/i]});function Ot(r){return r.includes("[bot]")||Hl.has(r.toLowerCase())}function Wt(r){if(!r||r.length>100||r.includes("?"))return!1;let e=r.toLowerCase();return["thanks","thank you","lgtm","looks good","will review","we'll review","we'll get to this","noted","got it","will look","will check"].some(s=>e.includes(s))}var Hl,xs=O(()=>{"use strict";Hl=new Set(["allcontributors","changeset-bot","claassistant","codecov-commenter","greenkeeper","imgbot","netlify","renovate","snyk-bot","sonarcloud","stale","vercel"])});function Gi(r){if(r.length===0)return"review_required";let e=new Map;for(let s of r){let o=s.user?.login,n=s.state;o&&n&&e.set(o,n)}let t=Array.from(e.values());return t.includes("CHANGES_REQUESTED")?"changes_requested":t.includes("APPROVED")?"approved":"review_required"}function xi(r){let e;for(let t of r)t.state==="CHANGES_REQUESTED"&&t.submitted_at&&(!e||t.submitted_at>e)&&(e=t.submitted_at);return e}function ql(r,e){let t=e.filter(o=>o.pull_request_review_id===r);if(t.length===0)return!1;let s=new Map;for(let o of e)o.user?.login&&s.set(o.id,o.user.login.toLowerCase());return t.every(o=>{if(!o.in_reply_to_id)return!1;let n=s.get(o.in_reply_to_id),i=o.user?.login?.toLowerCase();return!(n==null||i==null||n!==i||!o.body||o.body.includes("?"))})}function Bl(r,e){return e.find(t=>t.pull_request_review_id===r&&t.body?.trim())?.body?.trim()}function Di(r,e,t,s){let o=[],n=s.toLowerCase();for(let c of r){let l=c.user?.login||"unknown";o.push({author:l,body:c.body||"",createdAt:c.created_at,isUser:l.toLowerCase()===n})}for(let c of e){if(!c.submitted_at)continue;let l=(c.body||"").trim();if(!l&&c.state!=="COMMENTED"&&c.state!=="CHANGES_REQUESTED")continue;let p=c.user?.login||"unknown";if(!l&&c.state==="COMMENTED"&&c.id!=null&&ql(c.id,t))continue;let d=l||(c.id!=null?Bl(c.id,t):void 0)||(c.state==="CHANGES_REQUESTED"?"(requested changes via inline review comments)":"(posted inline review comments)");o.push({author:p,body:d,createdAt:c.submitted_at,isUser:p.toLowerCase()===n})}o.sort((c,l)=>new Date(c.createdAt).getTime()-new Date(l.createdAt).getTime());let i=null;for(let c of o)c.isUser&&(i=new Date(c.createdAt));let a;for(let c of o){if(c.isUser||c.author==="unknown"||Ot(c.author))continue;let l=new Date(c.createdAt);(!i||l>i)&&(a={author:c.author,body:c.body.slice(0,200)+(c.body.length>200?"...":""),createdAt:c.createdAt})}return a&&Wt(a.body)&&(a=void 0),{hasUnrespondedComment:!!a,lastMaintainerComment:a}}var Ii=O(()=>{"use strict";xs()});function Fi(r){return Vl.test(r.toLowerCase())}function Ui(r){if(!r)return{hasIncompleteChecklist:!1};let e=/- \[x\]/gi,t=/^.*- \[ \].*$/gm,s=r.match(e)||[],o=r.match(t)||[],n=s.length,i=n+o.length;return i===0?{hasIncompleteChecklist:!1}:{hasIncompleteChecklist:o.filter(c=>!Fi(c)).length>0,checklistStats:{checked:n,total:i}}}var Vl,no=O(()=>{"use strict";Vl=/\(if\s|\bif applicable\b|\bif needed\b|\bif relevant\b|\bonly if\b|\bwhen applicable\b|\(optional\)|- \[ \]\s*optional\b|\bn\/a\b|\bnot applicable\b|\bif required\b|\bif necessary\b/});function Mi(r,e){let t=[];if(e==="changes_requested"&&t.push("changes_requested"),!r)return t;let s=r.toLowerCase();return["screenshot","demo","recording","screen recording","before/after","before and after","gif","video","screencast","show me","can you show"].some(c=>s.includes(c))&&t.push("demo_requested"),["add test","test coverage","unit test","missing test","add a test","write test","needs test","need test"].some(c=>s.includes(c))&&t.push("tests_requested"),["documentation","readme","jsdoc","docstring","add docs","update docs","document this"].some(c=>s.includes(c))&&t.push("docs_requested"),["rebase","merge conflict","out of date","behind main","behind master"].some(c=>s.includes(c))&&t.push("rebase_requested"),t}var Li=O(()=>{"use strict"});function Ds(r){let e=Wl[r.status];return e?{displayLabel:e.label,displayDescription:e.description(r)}:(T(zl,`Unknown status "${r.status}" for PR #${r.number} (${r.url})`),{displayLabel:`[${r.status}]`,displayDescription:"Unknown status"})}var zl,Wl,io=O(()=>{"use strict";ye();zl="display-utils",Wl={needs_response:{label:"[Needs Response]",description:r=>r.lastMaintainerComment?`@${r.lastMaintainerComment.author} commented`:"Maintainer awaiting response"},needs_changes:{label:"[Needs Changes]",description:()=>"Review requested changes \u2014 push commits to address"},failing_ci:{label:"[CI Failing]",description:r=>{let e=r.classifiedChecks||[],t=e.filter(n=>n.category==="actionable");if(t.length>0)return`${t.length} check${t.length===1?"":"s"} failed: ${t.map(n=>n.name).join(", ")}`;let s=e.filter(n=>n.category==="infrastructure");if(s.length>0)return`${s.length} check${s.length===1?"":"s"} cancelled/timed out (infrastructure)`;let o=r.failingCheckNames||[];return o.length>0?`${o.length} check${o.length===1?"":"s"} failed`:"One or more CI checks are failing"}},ci_blocked:{label:"[CI Blocked]",description:r=>{let e=r.classifiedChecks||[];return e.length>0&&e.every(t=>t.category!=="actionable")?`All failing checks are non-actionable (${[...new Set(e.map(s=>s.category))].join(", ")})`:"CI checks are failing but no action is needed from you"}},ci_not_running:{label:"[CI Not Running]",description:()=>"No CI checks have been triggered"},merge_conflict:{label:"[Merge Conflict]",description:()=>"PR has merge conflicts with the base branch"},needs_rebase:{label:"[Needs Rebase]",description:()=>"PR branch is significantly behind upstream"},missing_required_files:{label:"[Missing Files]",description:r=>r.missingRequiredFiles?`Missing: ${r.missingRequiredFiles.join(", ")}`:"Required files are missing"},incomplete_checklist:{label:"[Incomplete Checklist]",description:r=>r.checklistStats?`${r.checklistStats.checked}/${r.checklistStats.total} items checked`:"PR body has unchecked required checkboxes"},changes_addressed:{label:"[Changes Addressed]",description:r=>r.lastMaintainerComment?`Waiting for @${r.lastMaintainerComment.author} to re-review`:"Waiting for maintainer re-review"},waiting:{label:"[Waiting]",description:()=>"CI pending or awaiting review"},waiting_on_maintainer:{label:"[Waiting on Maintainer]",description:()=>"Approved and CI passes \u2014 waiting for merge"},healthy:{label:"[Healthy]",description:()=>"Everything looks good \u2014 normal review cycle"},approaching_dormant:{label:"[Approaching Dormant]",description:r=>`No activity for ${r.daysSinceActivity} days`},dormant:{label:"[Dormant]",description:r=>`No activity for ${r.daysSinceActivity} days`}}});function bt(){return{repos:new Map,monthlyCounts:{},monthlyOpenedCounts:{},dailyActivityCounts:{}}}function Kl(r){if(typeof r!="object"||r===null)return!1;let e=r;return Array.isArray(e.reposEntries)&&typeof e.monthlyCounts=="object"&&e.monthlyCounts!==null&&typeof e.monthlyOpenedCounts=="object"&&e.monthlyOpenedCounts!==null&&typeof e.dailyActivityCounts=="object"&&e.dailyActivityCounts!==null}async function ji(r,e,t,s,o){if(!e)return bt();let n=Ye(),i=`pr-counts:${s}:${e}`,a=n.getIfFresh(i,Jl);if(a&&Kl(a))return P(Ue,`Using cached ${s} PR counts for @${e}`),{repos:new Map(a.reposEntries),monthlyCounts:a.monthlyCounts,monthlyOpenedCounts:a.monthlyOpenedCounts,dailyActivityCounts:a.dailyActivityCounts};P(Ue,`Fetching ${s} PR counts for @${e}...`);let c=new Map,l={},p={},d={},m=1,v=0,y;for(;;){let{data:g}=await r.search.issuesAndPullRequests({q:`is:pr ${t} author:${e}`,sort:"updated",order:"desc",per_page:100,page:m});y=g.total_count;for(let C of g.items){let h=ut(C.html_url);if(!h){T(Ue,`Skipping ${s} PR with unparseable URL: ${C.html_url}`);continue}let{owner:k}=h,E=`${k}/${h.repo}`;if(pt(k,e))continue;let w=o(c,E,C);if(w){let U=w.slice(0,7);l[U]=(l[U]||0)+1;let $=w.slice(0,10);$.length===10&&(d[$]=(d[$]||0)+1)}if(C.created_at){let U=C.created_at.slice(0,7);p[U]=(p[U]||0)+1;let $=C.created_at.slice(0,10);$.length===10&&(d[$]=(d[$]||0)+1)}}if(v+=g.items.length,v>=g.total_count||v>=1e3||g.items.length===0||m>=ao)break;m++}return v<y&&m>=ao&&T(Ue,`Pagination capped at ${ao} pages: fetched ${v} of ${y} ${s} PRs. Stats may be incomplete for prolific contributors.`),P(Ue,`Found ${v} ${s} PRs across ${c.size} repos`),n.set(i,"",{reposEntries:Array.from(c.entries()),monthlyCounts:l,monthlyOpenedCounts:p,dailyActivityCounts:d}),{repos:c,monthlyCounts:l,monthlyOpenedCounts:p,dailyActivityCounts:d}}function Ni(r,e){return ji(r,e,"is:merged","merged",(t,s,o)=>{o.pull_request?.merged_at||T(Ue,`merged_at missing for merged PR ${o.html_url}${o.closed_at?", falling back to closed_at":", no date available"}`);let n=o.pull_request?.merged_at||o.closed_at||"",i=t.get(s);return i?(i.count+=1,n&&n>i.lastMergedAt&&(i.lastMergedAt=n)):t.set(s,{count:1,lastMergedAt:n}),n})}function Hi(r,e){return ji(r,e,"is:closed is:unmerged","closed",(t,s,o)=>(t.set(s,(t.get(s)||0)+1),o.closed_at||""))}async function qi(r,e,t,s,o,n){if(!e.githubUsername)return T(Ue,`Skipping recently ${s} PRs fetch: no githubUsername configured. Run /setup-oss to configure.`),[];let i=new Date;i.setDate(i.getDate()-o);let a=i.toISOString().split("T")[0];P(Ue,`Fetching recently ${s} PRs for @${e.githubUsername} (since ${a})...`);let{data:c}=await r.search.issuesAndPullRequests({q:t.replace("{username}",e.githubUsername).replace("{since}",a),sort:"updated",order:"desc",per_page:100}),l=[];for(let p of c.items){let d=ve(p.html_url);if(!d){T(Ue,`Could not parse GitHub URL from API response: ${p.html_url}`);continue}let m=`${d.owner}/${d.repo}`;pt(d.owner,e.githubUsername)||e.excludeRepos.includes(m)||e.excludeOrgs?.some(v=>d.owner.toLowerCase()===v.toLowerCase())||l.push(n(p,{owner:d.owner,repo:m,number:d.number}))}return P(Ue,`Found ${l.length} recently ${s} PRs`),l}async function Bi(r,e,t=7){return qi(r,e,"is:pr is:closed is:unmerged author:{username} closed:>={since}","closed",t,(s,{repo:o,number:n})=>({url:s.html_url,repo:o,number:n,title:s.title,closedAt:s.closed_at||""}))}async function Vi(r,e,t=7){return qi(r,e,"is:pr is:merged author:{username} merged:>={since}","merged",t,(s,{repo:o,number:n})=>{let i=s.pull_request?.merged_at;return i||T(Ue,`merged_at missing for merged PR ${s.html_url}${s.closed_at?", falling back to closed_at":", no date available"}`),{url:s.html_url,repo:o,number:n,title:s.title,mergedAt:i||s.closed_at||""}})}var Ue,Jl,ao,Is=O(()=>{"use strict";Ce();ye();At();Ue="github-stats",Jl=1440*60*1e3,ao=3});var Fs,Ql,yt,zi=O(()=>{"use strict";Bt();Lt();Ce();to();ie();Vt();ye();At();oo();Ii();no();Li();io();Is();io();oo();no();Fs="pr-monitor",Ql=5,yt=class{octokit;stateManager;constructor(e){this.octokit=_e(e),this.stateManager=L()}async fetchUserOpenPRs(){let e=this.stateManager.getState().config;if(!e.githubUsername)throw new Je("No GitHub username configured. Run setup first.");P("pr-monitor",`Fetching open PRs for @${e.githubUsername}...`);let t=[],s=1,o=100,n=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open author:${e.githubUsername}`,sort:"updated",order:"desc",per_page:o,page:1});t.push(...n.data.items);let i=n.data.total_count;P("pr-monitor",`Found ${i} open PRs`);let a=Math.min(Math.ceil(i/o),10);for(;s<a;){s++;let m=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open author:${e.githubUsername}`,sort:"updated",order:"desc",per_page:o,page:s});t.push(...m.data.items)}let c=[],l=[],p=new Set(e.shelvedPRUrls||[]),d=t.filter(m=>{if(!m.pull_request)return!1;let v=ut(m.html_url);if(!v)return T("pr-monitor",`Skipping PR with unparseable URL: ${m.html_url}`),!1;let y=v.owner.toLowerCase();if(y===e.githubUsername.toLowerCase())return!1;let g=`${v.owner}/${v.repo}`,C=p.has(m.html_url);return!(e.excludeRepos.includes(g)&&!C||e.excludeOrgs?.some(h=>y===h.toLowerCase())&&!C)});return P("pr-monitor",`Filtered to ${d.length} PRs after excluding own repos, shelved, and excluded orgs/repos`),await Gr("pr-monitor",`Fetch details for ${d.length} PRs`,async()=>{await ks(d,async m=>{try{P("pr-monitor",`Fetching details for ${m.html_url}`);let v=await this.fetchPRDetails(m.html_url);v&&c.push(v)}catch(v){let y=A(v);T("pr-monitor",`Error fetching ${m.html_url}: ${y}`),l.push({prUrl:m.html_url,error:y})}},Ql)}),c.sort((m,v)=>{let y={needs_response:0,needs_changes:1,failing_ci:2,ci_blocked:3,ci_not_running:4,merge_conflict:5,needs_rebase:6,missing_required_files:7,incomplete_checklist:8,changes_addressed:9,approaching_dormant:10,dormant:11,waiting:12,waiting_on_maintainer:13,healthy:14};return y[m.status]-y[v.status]}),{prs:c,failures:l}}async fetchPRDetails(e){let t=ve(e);if(!t||t.type!=="pull")throw new J(`Invalid PR URL format: ${e}`);let{owner:s,repo:o,number:n}=t,i=this.stateManager.getState().config,[a,c,l,p]=await Promise.all([this.octokit.pulls.get({owner:s,repo:o,pull_number:n}),Fe(z=>this.octokit.issues.listComments({owner:s,repo:o,issue_number:n,per_page:100,page:z})),this.octokit.pulls.listReviews({owner:s,repo:o,pull_number:n}),Fe(z=>this.octokit.pulls.listReviewComments({owner:s,repo:o,pull_number:n,per_page:100,page:z})).catch(z=>{let ne=me(z);if(ne===429)throw z;if(ne===403){let D=A(z).toLowerCase();if(D.includes("rate limit")||D.includes("abuse detection"))throw z;return T("pr-monitor",`403 fetching review comments for ${s}/${o}#${n}: ${D}`),[]}return ne===404?P("pr-monitor",`Review comments 404 for ${s}/${o}#${n} (likely no inline comments)`):T("pr-monitor",`Failed to fetch review comments for ${s}/${o}#${n} (status ${ne??"unknown"}): self-reply detection will be skipped`),[]})]),d=a.data,m=l.data,v=Gi(m),y=this.hasMergeConflict(d.mergeable,d.mergeable_state),{hasUnrespondedComment:g,lastMaintainerComment:C}=Di(c,m,p,i.githubUsername),h=this.getCIStatus(s,o,d.head.sha),E=g||v==="changes_requested"?this.octokit.repos.getCommit({owner:s,repo:o,ref:d.head.sha}).then(z=>z.data.commit.author?.date).catch(z=>{let ne=me(z);if(ne===429)throw z;if(ne===403){let D=A(z).toLowerCase();if(D.includes("rate limit")||D.includes("abuse detection"))throw z;T("pr-monitor",`403 fetching commit date for ${s}/${o}@${d.head.sha.slice(0,7)}: ${A(z)}`);return}T("pr-monitor",`Failed to fetch commit date for ${s}/${o}@${d.head.sha.slice(0,7)}: ${A(z)}`)}):Promise.resolve(void 0),[{status:w,failingCheckNames:U,failingCheckConclusions:$},I]=await Promise.all([h,E]),{hasIncompleteChecklist:j,checklistStats:H}=Ui(d.body||""),he=Mi(C?.body,v),xe=$e(new Date(d.updated_at),new Date),Re=xi(m),fe=Gs(U,$),Be=w==="failing"&&fe.some(z=>z.category==="actionable"),Ee=this.determineStatus({ciStatus:w,hasMergeConflict:y,hasUnrespondedComment:g,hasIncompleteChecklist:j,reviewDecision:v,daysSinceActivity:xe,dormantThreshold:i.dormantThresholdDays,approachingThreshold:i.approachingDormantDays,latestCommitDate:I,lastMaintainerCommentDate:C?.createdAt,latestChangesRequestedDate:Re,hasActionableCIFailure:Be});return this.buildFetchedPR({id:d.id,url:e,repo:`${s}/${o}`,number:n,title:d.title,status:Ee,createdAt:d.created_at,updatedAt:d.updated_at,daysSinceActivity:xe,ciStatus:w,failingCheckNames:U,classifiedChecks:fe,hasMergeConflict:y,reviewDecision:v,hasUnrespondedComment:g,lastMaintainerComment:C,latestCommitDate:I,hasIncompleteChecklist:j,checklistStats:H,maintainerActionHints:he})}buildFetchedPR(e){let t={...e,displayLabel:"",displayDescription:""},{displayLabel:s,displayDescription:o}=Ds(t);return t.displayLabel=s,t.displayDescription=o,t}determineStatus(e){let{ciStatus:t,hasMergeConflict:s,hasUnrespondedComment:o,hasIncompleteChecklist:n,reviewDecision:i,daysSinceActivity:a,dormantThreshold:c,approachingThreshold:l,latestCommitDate:p,lastMaintainerCommentDate:d,latestChangesRequestedDate:m,hasActionableCIFailure:v=!0}=e;return o?p&&d&&p>d?m&&p<m?"needs_response":t==="failing"&&v?"failing_ci":"changes_addressed":"needs_response":i==="changes_requested"&&m?!p||p<m?"needs_changes":t==="failing"&&v?"failing_ci":"changes_addressed":t==="failing"?v?"failing_ci":"ci_blocked":s?"merge_conflict":n?"incomplete_checklist":a>=c?"dormant":a>=l?"approaching_dormant":i==="approved"&&(t==="passing"||t==="unknown")?"waiting_on_maintainer":t==="pending"?"waiting":"healthy"}hasMergeConflict(e,t){return e===!1||t==="dirty"}async getCIStatus(e,t,s){if(!s)return{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map};try{let[o,n]=await Promise.all([this.octokit.repos.getCombinedStatusForRef({owner:e,repo:t,ref:s}),this.octokit.checks.listForRef({owner:e,repo:t,ref:s}).catch(m=>{let v=me(m);if(v===429)throw m;if(v===403){let y=A(m).toLowerCase();if(y.includes("rate limit")||y.includes("abuse detection"))throw m}return v===404?P("pr-monitor",`Check runs 404 for ${e}/${t}@${s.slice(0,7)} (no checks configured)`):T("pr-monitor",`Non-404 error fetching check runs for ${e}/${t}@${s.slice(0,7)}: ${v??m}`),null})]),i=o.data,a=n?.data?.check_runs||[],c=new Map;for(let m of a){let v=c.get(m.name);(!v||new Date(m.started_at??0)>new Date(v.started_at??0))&&c.set(m.name,m)}let l=[...c.values()],p=Ai(l),d=Oi(i);return $i(p,d,l.length)}catch(o){let n=me(o);if(n===401||n===403||n===429)throw o;return n===404?(P("pr-monitor",`CI check 404 for ${e}/${t} (no CI configured)`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}):(T("pr-monitor",`Failed to check CI for ${e}/${t}@${s.slice(0,7)}: ${A(o)}`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map})}}async fetchUserMergedPRCounts(){let e=this.stateManager.getState().config;return Ni(this.octokit,e.githubUsername)}async fetchUserClosedPRCounts(){let e=this.stateManager.getState().config;return Hi(this.octokit,e.githubUsername)}async fetchRepoStarCounts(e){if(e.length===0)return new Map;P(Fs,`Fetching star counts for ${e.length} repos...`);let t=new Map,s=Ye(),o=[...new Set(e)],n=10;for(let i=0;i<o.length;i+=n){let a=o.slice(i,i+n),c=await Promise.allSettled(a.map(async p=>{let d=p.split("/");if(d.length!==2||!d[0]||!d[1])throw new J(`Malformed repo identifier: "${p}"`);let[m,v]=d,y=`/repos/${m}/${v}`,g=await zt(s,y,C=>this.octokit.repos.get({owner:m,repo:v,headers:C}));return{repo:p,stars:g.stargazers_count}})),l=0;for(let p=0;p<c.length;p++){let d=c[p];d.status==="fulfilled"?t.set(d.value.repo,d.value.stars):(l++,T(Fs,`Failed to fetch stars for ${a[p]}: ${A(d.reason)}`))}if(l===a.length&&a.length>0){let p=e.length-i-n;p>0&&T(Fs,`Entire chunk failed, aborting remaining ${p} repos`);break}}return P(Fs,`Fetched star counts for ${t.size}/${e.length} repos`),t}async fetchRecentlyClosedPRs(e=7){let t=this.stateManager.getState().config;return Bi(this.octokit,t,e)}async fetchRecentlyMergedPRs(e=7){let t=this.stateManager.getState().config;return Vi(this.octokit,t,e)}generateDigest(e,t=[],s=[]){let o=new Date().toISOString(),n=e.filter(w=>w.status==="needs_response"),i=e.filter(w=>w.status==="failing_ci"),a=e.filter(w=>w.status==="merge_conflict"),c=e.filter(w=>w.status==="approaching_dormant"),l=e.filter(w=>w.status==="dormant"),p=e.filter(w=>w.status==="healthy"||w.status==="waiting"),d=this.stateManager.getStats(),m=e.filter(w=>w.status==="ci_blocked"),v=e.filter(w=>w.status==="ci_not_running"),y=e.filter(w=>w.status==="needs_rebase"),g=e.filter(w=>w.status==="missing_required_files"),C=e.filter(w=>w.status==="incomplete_checklist"),h=e.filter(w=>w.status==="needs_changes"),k=e.filter(w=>w.status==="changes_addressed"),E=e.filter(w=>w.status==="waiting_on_maintainer");return{generatedAt:o,openPRs:e,prsNeedingResponse:n,ciFailingPRs:i,ciBlockedPRs:m,ciNotRunningPRs:v,mergeConflictPRs:a,needsRebasePRs:y,missingRequiredFilesPRs:g,incompleteChecklistPRs:C,needsChangesPRs:h,changesAddressedPRs:k,waitingOnMaintainerPRs:E,approachingDormant:c,dormantPRs:l,healthyPRs:p,recentlyClosedPRs:t,recentlyMergedPRs:s,shelvedPRs:[],autoUnshelvedPRs:[],summary:{totalActivePRs:e.length,totalNeedingAttention:n.length+h.length+i.length+a.length+y.length+g.length+C.length,totalMergedAllTime:d.mergedPRs,mergeRate:parseFloat(d.mergeRate)}}}async updateRepoScoreFromObservedPR(e,t){t?this.stateManager.incrementMergedCount(e):this.stateManager.incrementClosedCount(e)}}});function Us(r){if(!r.labels||!Array.isArray(r.labels)||r.labels.length===0)return!1;let t=r.labels.map(s=>(typeof s=="string"?s:s.name||"").toLowerCase()).filter(s=>s.length>0);return t.length===0?!1:t.every(s=>co.has(s))}function Ji(r){return!r.labels||!Array.isArray(r.labels)?!1:r.labels.map(s=>(typeof s=="string"?s:s.name||"").toLowerCase()).filter(s=>Wi.has(s)).length>=5}function Ki(r){return r?/^.+\s+(question|fact|point|item|task|entry|post|challenge|exercise|example|problem|tip|recipe|snippet)\s+#?\d+$/i.test(r):!1}function lo(r){let e=new Set,t=new Map;for(let s of r){let o=s.repository_url.split("/").slice(-2).join("/");if(Ji(s)){e.add(o);continue}s.title&&Ki(s.title)&&t.set(o,(t.get(o)||0)+1)}for(let[s,o]of t)o>=3&&e.add(s);return e}function Ms(r,e){let t=new Map,s=[];for(let o of r){let n=t.get(o.issue.repo)||0;n<e&&(s.push(o),t.set(o.issue.repo,n+1))}return s}var co,Wi,uo=O(()=>{"use strict";co=new Set(["documentation","docs","typo","spelling"]);Wi=new Set(["good first issue","hacktoberfest","easy","up-for-grabs","first-timers-only","beginner-friendly","beginner","starter","newbie","low-hanging-fruit","community"])});function po(r,e){let t=0;return r>=5e3?t+=8:r>=500?t+=5:r>=50&&(t+=3),e>=500?t+=4:e>=50&&(t+=2),t}function Jt(r){let e=50;r.repoScore!==null&&(e+=r.repoScore*2),e+=r.repoQualityBonus??0,r.mergedPRCount>0&&(e+=15),r.clearRequirements&&(e+=15);let t=new Date(r.issueUpdatedAt),s=$e(t);return s<=14?e+=15:s<=30&&(e+=Math.round(15*(1-(s-14)/16))),r.hasContributionGuidelines&&(e+=10),r.orgHasMergedPRs&&(e+=5),r.hasExistingPR&&(e-=30),r.isClaimed&&(e-=20),r.closedWithoutMergeCount>0&&r.mergedPRCount===0&&(e-=15),Math.max(0,Math.min(100,e))}var Ls=O(()=>{"use strict";Ce()});function Yi(){let r=Date.now();for(let[e,t]of Xe.entries())r-t.fetchedAt>Xi&&Xe.delete(e);if(Xe.size>Qi){let t=Array.from(Xe.entries()).sort((s,o)=>s[1].fetchedAt-o[1].fetchedAt).slice(0,Xe.size-Qi);for(let[s]of t)Xe.delete(s)}}var it,Yl,Xe,Xi,Xl,Qi,at,Zi=O(()=>{"use strict";Vt();Ce();ie();ye();At();Ls();it="issue-vetting",Yl=5,Xe=new Map,Xi=3600*1e3,Xl=14400*1e3,Qi=100;at=class r{octokit;stateManager;constructor(e,t){this.octokit=e,this.stateManager=t}async vetIssue(e){let t=ve(e);if(!t||t.type!=="issues")throw new J(`Invalid issue URL: ${e}`);let{owner:s,repo:o,number:n}=t,i=`${s}/${o}`,{data:a}=await this.octokit.issues.get({owner:s,repo:o,issue_number:n}),[c,l,p,d,m]=await Promise.all([this.checkNoExistingPR(s,o,n),this.checkNotClaimed(s,o,n,a.comments),this.checkProjectHealth(s,o),this.fetchContributionGuidelines(s,o),this.checkUserMergedPRsInRepo(s,o)]),v=c.passed,y=l.passed,g=this.analyzeRequirements(a.body||""),C=p.checkFailed?!0:p.isActive,h={passedAllChecks:v&&y&&C&&g,checks:{noExistingPR:v,notClaimed:y,projectActive:C,clearRequirements:g,contributionGuidelinesFound:!!d},contributionGuidelines:d,notes:[]};v||h.notes.push("Existing PR found for this issue"),y||h.notes.push("Issue appears to be claimed by someone"),c.inconclusive&&h.notes.push(`Could not verify absence of existing PRs: ${c.reason||"API error"}`),l.inconclusive&&h.notes.push(`Could not verify claim status: ${l.reason||"API error"}`),p.checkFailed?h.notes.push(`Could not verify project activity: ${p.failureReason||"API error"}`):p.isActive||h.notes.push("Project may be inactive"),g||h.notes.push("Issue requirements are unclear"),d||h.notes.push("No CONTRIBUTING.md found");let k={id:a.id,url:e,repo:i,number:n,title:a.title,status:"candidate",labels:a.labels.map(ne=>typeof ne=="string"?ne:ne.name||""),createdAt:a.created_at,updatedAt:a.updated_at,vetted:!0,vettingResult:h},E=[],w=[];v||E.push("Has existing PR"),y||E.push("Already claimed"),!p.isActive&&!p.checkFailed&&E.push("Inactive project"),g||E.push("Unclear requirements"),v&&w.push("No existing PR"),y&&w.push("Not claimed"),p.isActive&&!p.checkFailed&&w.push("Active project"),g&&w.push("Clear requirements"),d&&w.push("Has contribution guidelines");let U=this.stateManager.getState().config,$=this.stateManager.getRepoScore(i),I=$&&$.mergedPRCount>0?$.mergedPRCount:m;I>0?w.push(`Trusted project (${I} PR${I>1?"s":""} merged)`):U.trustedProjects.includes(i)&&w.push("Trusted project (previous PR merged)"),$&&($.closedWithoutMergeCount>0&&I===0?E.push("User has rejected PR(s) in this repo with no successful merges"):$.closedWithoutMergeCount>0&&I>0&&h.notes.push(`Mixed history: ${I} merged, ${$.closedWithoutMergeCount} closed without merge`));let j=i.split("/")[0],H=!1;j&&i.includes("/")&&(H=Object.values(this.stateManager.getState().repoScores).some(ne=>ne.repo&&ne.mergedPRCount>0&&ne.repo.startsWith(j+"/")&&ne.repo!==i)),H&&w.push(`Org affinity (merged PRs in other ${j} repos)`);let he;h.passedAllChecks?he="approve":E.length>2?he="skip":he="needs_review";let xe=p.checkFailed||c.inconclusive||l.inconclusive;he==="approve"&&xe&&(he="needs_review",h.notes.push("Recommendation downgraded: one or more checks were inconclusive"));let Re=po(p.stargazersCount??0,p.forksCount??0);p.checkFailed&&Re===0&&h.notes.push("Repo quality bonus unavailable: could not fetch star/fork counts due to API error");let fe=this.getRepoScore(i),Be=Jt({repoScore:fe,hasExistingPR:!v,isClaimed:!y,clearRequirements:g,hasContributionGuidelines:!!d,issueUpdatedAt:a.updated_at,closedWithoutMergeCount:$?.closedWithoutMergeCount??0,mergedPRCount:I,orgHasMergedPRs:H,repoQualityBonus:Re}),Ee=this.stateManager.getStarredRepos(),z="normal";return I>0?z="merged_pr":Ee.includes(i)&&(z="starred"),{issue:k,vettingResult:h,projectHealth:p,recommendation:he,reasonsToSkip:E,reasonsToApprove:w,viabilityScore:Be,searchPriority:z}}async vetIssuesParallel(e,t,s){let o=[],n=[],i=0,a=0,c=0;for(let p of e){if(o.length>=t)break;c++;let d=this.vetIssue(p).then(m=>{o.length<t&&(s&&(m.searchPriority=s),o.push(m))}).catch(m=>{i++,r.isRateLimitError(m)&&a++,T(it,`Error vetting issue ${p}:`,A(m))});if(n.push(d),n.length>=Yl){let m=await Promise.race(n.map((v,y)=>v.then(()=>y)));n.splice(m,1)}}await Promise.allSettled(n);let l=i===c&&c>0;return l&&T(it,`All ${c} issue(s) failed vetting. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:o.slice(0,t),allFailed:l,rateLimitHit:a>0}}static isRateLimitError(e){let t=me(e);return t===429?!0:t===403?A(e).toLowerCase().includes("rate limit"):!1}async checkNoExistingPR(e,t,s){try{let{data:o}=await this.octokit.search.issuesAndPullRequests({q:`repo:${e}/${t} is:pr ${s}`,per_page:5}),i=(await Fe(a=>this.octokit.issues.listEventsForTimeline({owner:e,repo:t,issue_number:s,per_page:100,page:a}))).filter(a=>{let c=a;return c.event==="cross-referenced"&&c.source?.issue?.pull_request});return{passed:o.total_count===0&&i.length===0}}catch(o){let n=A(o);return T(it,`Failed to check for existing PRs on ${e}/${t}#${s}: ${n}. Assuming no existing PR.`),{passed:!0,inconclusive:!0,reason:n}}}async checkUserMergedPRsInRepo(e,t){try{let{data:s}=await this.octokit.search.issuesAndPullRequests({q:`repo:${e}/${t} is:pr is:merged author:@me`,per_page:1});return s.total_count}catch(s){let o=A(s);return T(it,`Could not check merged PRs in ${e}/${t}: ${o}. Defaulting to 0.`),0}}async checkNotClaimed(e,t,s,o){if(o===0)return{passed:!0};try{let i=(await this.octokit.paginate(this.octokit.issues.listComments,{owner:e,repo:t,issue_number:s,per_page:100},c=>c.data)).slice(-100),a=["i'm working on this","i am working on this","i'll take this","i will take this","working on it","i'd like to work on","i would like to work on","can i work on","may i work on","assigned to me","i'm on it","i'll submit a pr","i will submit a pr","working on a fix","working on a pr"];for(let c of i){let l=(c.body||"").toLowerCase();if(a.some(p=>l.includes(p)))return{passed:!1}}return{passed:!0}}catch(n){let i=A(n);return T(it,`Failed to check claim status on ${e}/${t}#${s}: ${i}. Assuming not claimed.`),{passed:!0,inconclusive:!0,reason:i}}}async checkProjectHealth(e,t){let s=Ye(),o=`health:${e}/${t}`;try{return await $s(s,o,Xl,async()=>{let n=`/repos/${e}/${t}`,i=await zt(s,n,m=>this.octokit.repos.get({owner:e,repo:t,headers:m})),{data:a}=await this.octokit.repos.listCommits({owner:e,repo:t,per_page:1}),l=a[0]?.commit?.author?.date||i.pushed_at,p=$e(new Date(l)),d="unknown";try{let{data:m}=await this.octokit.actions.listRepoWorkflows({owner:e,repo:t,per_page:1});m.total_count>0&&(d="passing")}catch(m){let v=A(m);T(it,`Failed to check CI status for ${e}/${t}: ${v}. Defaulting to unknown.`)}return{repo:`${e}/${t}`,lastCommitAt:l,daysSinceLastCommit:p,openIssuesCount:i.open_issues_count,avgIssueResponseDays:0,ciStatus:d,isActive:p<30,stargazersCount:i.stargazers_count,forksCount:i.forks_count}})}catch(n){let i=A(n);return T(it,`Error checking project health for ${e}/${t}: ${i}`),{repo:`${e}/${t}`,lastCommitAt:"",daysSinceLastCommit:999,openIssuesCount:0,avgIssueResponseDays:0,ciStatus:"unknown",isActive:!1,checkFailed:!0,failureReason:i}}}async fetchContributionGuidelines(e,t){let s=`${e}/${t}`,o=Xe.get(s);if(o&&Date.now()-o.fetchedAt<Xi)return o.guidelines;let n=["CONTRIBUTING.md",".github/CONTRIBUTING.md","docs/CONTRIBUTING.md","contributing.md"];for(let i of n)try{let{data:a}=await this.octokit.repos.getContent({owner:e,repo:t,path:i});if("content"in a){let c=Buffer.from(a.content,"base64").toString("utf-8"),l=this.parseContributionGuidelines(c);return Xe.set(s,{guidelines:l,fetchedAt:Date.now()}),Yi(),l}}catch(a){a instanceof Error&&!a.message.includes("404")&&!a.message.includes("Not Found")&&T(it,`Unexpected error fetching ${i} from ${e}/${t}: ${a.message}`)}Xe.set(s,{guidelines:void 0,fetchedAt:Date.now()}),Yi()}parseContributionGuidelines(e){let t={rawContent:e},s=e.toLowerCase();if(s.includes("branch")){let o=e.match(/branch[^\n]*(?:named?|format|convention)[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.branchNamingConvention=o[1])}if(s.includes("conventional commit"))t.commitMessageFormat="conventional commits";else if(s.includes("commit message")){let o=e.match(/commit message[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.commitMessageFormat=o[1])}return s.includes("jest")?t.testFramework="Jest":s.includes("rspec")?t.testFramework="RSpec":s.includes("pytest")?t.testFramework="pytest":s.includes("mocha")&&(t.testFramework="Mocha"),s.includes("eslint")?t.linter="ESLint":s.includes("rubocop")?t.linter="RuboCop":s.includes("prettier")&&(t.formatter="Prettier"),(s.includes("cla")||s.includes("contributor license agreement"))&&(t.claRequired=!0),t}analyzeRequirements(e){if(!e||e.length<50)return!1;let t=/\d+\.|[-*]\s/.test(e),s=/```/.test(e),o=/expect|should|must|want/i.test(e);return[t,s,o,e.length>200].filter(Boolean).length>=2}getRepoScore(e){return this.stateManager.getState().repoScores?.[e]?.score??null}}});var ea,ta,K,Zl,vt,sa=O(()=>{"use strict";ea=Q(require("fs"),1),ta=Q(require("path"),1);Bt();Lt();Ce();us();ie();ye();At();uo();Zi();Ls();uo();Ls();K="issue-discovery",Zl=900*1e3,vt=class{octokit;stateManager;githubToken;vetter;rateLimitWarning=null;constructor(e){this.githubToken=e,this.octokit=_e(e),this.stateManager=L(),this.vetter=new at(this.octokit,this.stateManager)}async cachedSearch(e){let t=`search:${e.q}:${e.sort}:${e.order}:${e.per_page}`;return $s(Ye(),t,Zl,async()=>{let{data:s}=await this.octokit.search.issuesAndPullRequests(e);return s})}async fetchStarredRepos(){de(K,"Fetching starred repositories...");let e=[];try{let t=this.octokit.paginate.iterator(this.octokit.activity.listReposStarredByAuthenticatedUser,{per_page:100}),s=0;for await(let{data:o}of t){for(let n of o){let i;"full_name"in n&&typeof n.full_name=="string"?i=n.full_name:"repo"in n&&n.repo&&typeof n.repo=="object"&&"full_name"in n.repo&&(i=n.repo.full_name),i&&e.push(i)}if(s++,s>=5){de(K,"Reached pagination limit for starred repos (500)");break}}return de(K,`Fetched ${e.length} starred repositories`),this.stateManager.setStarredRepos(e),e}catch(t){let s=this.stateManager.getStarredRepos(),o=A(t);return T(K,"Error fetching starred repos:",o),s.length===0?T(K,`Failed to fetch starred repositories from GitHub API. No cached repos available. Error: ${o}
|
|
46
|
-
Tip: Ensure your GITHUB_TOKEN has the 'read:user' scope and try again.`):
|
|
45
|
+
`);let l={},d=new s.Events(l);return l.on("secondary-limit",c.onSecondaryRateLimit),l.on("rate-limit",c.onRateLimit),l.on("error",p=>r.log.warn("Error in throttling-plugin limit handler",p)),c.retryLimiter.on("failed",async function(p,m){let[w,g,y]=m.args,{pathname:S}=new URL(y.url,"http://github.test");if(!(S.startsWith("/graphql")&&p.status!==401||p.status===403||p.status===429))return;let k=~~g.retryCount;g.retryCount=k,y.request.retryCount=k;let{wantRetry:T,retryAfter:R=0}=await(async function(){if(/\bsecondary rate\b/i.test(p.message)){let I=Number(p.response.headers["retry-after"])||w.fallbackSecondaryRateRetryAfter;return{wantRetry:await d.trigger("secondary-limit",I,y,r,k),retryAfter:I}}if(p.response.headers!=null&&p.response.headers["x-ratelimit-remaining"]==="0"||(p.response.data?.errors??[]).some(I=>I.type==="RATE_LIMITED")){let I=new Date(~~p.response.headers["x-ratelimit-reset"]*1e3).getTime(),G=Math.max(Math.ceil((I-Date.now())/1e3)+1,0);return{wantRetry:await d.trigger("rate-limit",G,y,r,k),retryAfter:G}}return{}})();if(T)return g.retryCount++,R*w.retryAfterBaseValue}),r.hook.wrap("request",Vl.bind(null,c)),{}}var ki,Bl,ro,Jl,Pi,Ai,wt,Yl,Oi=O(()=>{ki=K(Ci(),1),Bl="0.0.0-development",ro=()=>Promise.resolve();Jl=["/orgs/{org}/invitations","/orgs/{org}/invitations/{invitation_id}","/orgs/{org}/teams/{team_slug}/discussions","/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","/repos/{owner}/{repo}/collaborators/{username}","/repos/{owner}/{repo}/commits/{commit_sha}/comments","/repos/{owner}/{repo}/issues","/repos/{owner}/{repo}/issues/{issue_number}/comments","/repos/{owner}/{repo}/issues/{issue_number}/sub_issue","/repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority","/repos/{owner}/{repo}/pulls","/repos/{owner}/{repo}/pulls/{pull_number}/comments","/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies","/repos/{owner}/{repo}/pulls/{pull_number}/merge","/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","/repos/{owner}/{repo}/pulls/{pull_number}/reviews","/repos/{owner}/{repo}/releases","/teams/{team_id}/discussions","/teams/{team_id}/discussions/{discussion_number}/comments"];Pi=Kl(Jl),Ai=Pi.test.bind(Pi),wt={},Yl=function(r,e){wt.global=new r.Group({id:"octokit-global",maxConcurrent:10,...e}),wt.auth=new r.Group({id:"octokit-auth",maxConcurrent:1,...e}),wt.search=new r.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...e}),wt.write=new r.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...e}),wt.notifications=new r.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...e})};ks.VERSION=Bl;ks.triggersNotification=Ai});function Gs(r){return r.toLocaleTimeString("en-US",{hour12:!1})}function ve(r){return Os&&Gi===r||(Os=new Ql({auth:r,throttle:{onRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<2?(v(As,`Rate limit hit (retry ${o+1}/2, waiting ${e}s, resets at ${Gs(i)}) \u2014 ${n.method} ${n.url}`),!0):(v(As,`Rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${Gs(i)})`),!1)},onSecondaryRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<1?(v(As,`Secondary rate limit hit (retry ${o+1}/1, waiting ${e}s, resets at ${Gs(i)}) \u2014 ${n.method} ${n.url}`),!0):(v(As,`Secondary rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${Gs(i)})`),!1)}}}),Gi=r),Os}async function oo(r){let e=ve(r),{data:t}=await e.rateLimit.get(),s=t.resources.search;return{remaining:s.remaining,limit:s.limit,resetAt:new Date(s.reset*1e3).toISOString()}}var As,Ql,Os,Gi,zt=O(()=>{"use strict";Si();Oi();me();As="github",Ql=Ti.plugin(ks),Os=null,Gi=null});async function xs(r,e,t){let s=0,o=!1,n=async()=>{for(;s<r.length&&!o;){let a=r[s++];try{await e(a)}catch(c){throw o=!0,c}}},i=Math.min(t,r.length);await Promise.all(Array.from({length:i},()=>n()))}var no=O(()=>{"use strict"});async function Fe(r,e=100,t=10){let s=[];for(let o=1;o<=t;o++){let{data:n}=await r(o);if(s.push(...n),n.length<e)break}return s}var Wt=O(()=>{"use strict"});function Ze(){return io||(io=new Ds),io}async function Jt(r,e,t){let s=r.getInflight(e);if(s)return P(lt,`Dedup hit for ${e}`),await s;let n=(async()=>{let a={},c=r.get(e);c&&(a["if-none-match"]=c.etag);try{let l=await t(a),d=l.headers?.etag;return d&&r.set(e,d,l.data),l.data}catch(l){if(Zl(l)){let d=r.get(e);if(d)return P(lt,`304 cache hit for ${e}`),d.body}throw l}})(),i=r.setInflight(e,n);try{return await n}finally{i()}}async function Is(r,e,t,s){let o=r.getIfFresh(e,t);if(o)return P(lt,`Time-based cache hit for ${e}`),o;let n=await s();return r.set(e,"",n),n}function Zl(r){return Ge(r)===304}var Se,$s,xi,lt,Xl,Ds,io,Ot=O(()=>{"use strict";Se=K(require("fs"),1),$s=K(require("path"),1),xi=K(require("crypto"),1);Te();me();ie();lt="http-cache",Xl=1440*60*1e3,Ds=class{cacheDir;inflightRequests=new Map;constructor(e){this.cacheDir=e??bs()}keyFor(e){return xi.createHash("sha256").update(e).digest("hex")}pathFor(e){return $s.join(this.cacheDir,`${this.keyFor(e)}.json`)}getIfFresh(e,t){let s=this.get(e);if(!s)return null;let o=Date.now()-new Date(s.cachedAt).getTime();return!Number.isFinite(o)||o<0||o>t?null:s.body}get(e){let t=this.pathFor(e);try{let s=Se.readFileSync(t,"utf-8"),o=JSON.parse(s);return o.url!==e?(P(lt,`Cache collision detected for ${e}, ignoring`),null):o}catch{return null}}set(e,t,s){let o={etag:t,url:e,body:s,cachedAt:new Date().toISOString()};try{Se.writeFileSync(this.pathFor(e),JSON.stringify(o),{encoding:"utf-8",mode:384}),P(lt,`Cached response for ${e}`)}catch(n){P(lt,`Failed to write cache for ${e}`,n)}}hasInflight(e){return this.inflightRequests.has(e)}getInflight(e){return this.inflightRequests.get(e)}setInflight(e,t){return this.inflightRequests.set(e,t),()=>{this.inflightRequests.delete(e)}}evictStale(e=Xl){let t=0;try{let s=Se.readdirSync(this.cacheDir),o=Date.now();for(let n of s){if(!n.endsWith(".json"))continue;let i=$s.join(this.cacheDir,n);try{let a=Se.readFileSync(i,"utf-8"),c=JSON.parse(a);o-new Date(c.cachedAt).getTime()>e&&(Se.unlinkSync(i),t++)}catch{try{Se.unlinkSync(i),t++}catch{}}}}catch{}return t>0&&P(lt,`Evicted ${t} stale cache entries`),t}clear(){try{let e=Se.readdirSync(this.cacheDir);for(let t of e)t.endsWith(".json")&&Se.unlinkSync($s.join(this.cacheDir,t));P(lt,"Cache cleared")}catch{}}size(){try{return Se.readdirSync(this.cacheDir).filter(e=>e.endsWith(".json")).length}catch{return 0}}},io=null});function ao(r,e,t){if(t==="cancelled"||t==="timed_out")return"infrastructure";let s=r.toLowerCase();if(Di.some(o=>o.test(s)))return"auth_gate";if($i.some(o=>o.test(s)))return"fork_limitation";if(Ii.some(o=>o.test(s)))return"infrastructure";if(e){let o=e.toLowerCase();if(Di.some(n=>n.test(o)))return"auth_gate";if($i.some(n=>n.test(o)))return"fork_limitation";if(Ii.some(n=>n.test(o)))return"infrastructure"}return"actionable"}function Fs(r,e){return r.map(t=>{let s=e?.get(t);return{name:t,category:ao(t,void 0,s),conclusion:s}})}function Fi(r){let e=!1,t=!1,s=!1,o=[],n=new Map;for(let i of r)i.conclusion==="failure"||i.conclusion==="cancelled"||i.conclusion==="timed_out"?(e=!0,o.push(i.name),n.set(i.name,i.conclusion)):i.conclusion==="action_required"||i.status==="in_progress"||i.status==="queued"?t=!0:i.conclusion==="success"&&(s=!0);return{hasFailingChecks:e,hasPendingChecks:t,hasSuccessfulChecks:s,failingCheckNames:o,failingCheckConclusions:n}}function Ui(r){let e=r.statuses.filter(c=>{let l=(c.description||"").toLowerCase();return!(c.state==="failure"&&(l.includes("authorization required")||l.includes("authorize")))}),t=e.some(c=>c.state==="failure"||c.state==="error"),s=e.some(c=>c.state==="pending"),o=e.some(c=>c.state==="success"),n=t?"failure":s?"pending":o||e.length===0?"success":r.state,i=r.statuses.length>0,a=[];for(let c of e)(c.state==="failure"||c.state==="error")&&a.push(c.context);return{effectiveCombinedState:n,hasStatuses:i,failingStatusNames:a}}function Mi(r,e,t){let{hasFailingChecks:s,hasPendingChecks:o,hasSuccessfulChecks:n,failingCheckNames:i,failingCheckConclusions:a}=r,{effectiveCombinedState:c,hasStatuses:l,failingStatusNames:d}=e,p=[...i,...d];return s||c==="failure"||c==="error"?{status:"failing",failingCheckNames:p,failingCheckConclusions:a}:o||c==="pending"?{status:"pending",failingCheckNames:[],failingCheckConclusions:new Map}:n||c==="success"?{status:"passing",failingCheckNames:[],failingCheckConclusions:new Map}:!l&&t===0?{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}:{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}}var $i,Di,Ii,co=O(()=>{"use strict";$i=[/vercel/i,/netlify/i,/\bpreview\s*deploy/i,/\bdeploy\s*preview/i,/storybook/i,/chromatic/i,/percy/i,/cloudflare pages/i],Di=[/authoriz/i,/approval/i,/\bcla\b/i,/license\/cla/i],Ii=[/\binstall\s*(os\s*)?dep(endenc|s\b)/i,/\bsetup\s+fail(ed|ure)?\b/i,/\bservice\s*unavailable/i,/\binfrastructure/i]});function Gt(r){return r.includes("[bot]")||eu.has(r.toLowerCase())}function Kt(r){if(!r||r.length>100||r.includes("?"))return!1;let e=r.toLowerCase();return["thanks","thank you","lgtm","looks good","will review","we'll review","we'll get to this","noted","got it","will look","will check"].some(s=>e.includes(s))}var eu,Us=O(()=>{"use strict";eu=new Set(["allcontributors","changeset-bot","claassistant","codecov-commenter","greenkeeper","imgbot","netlify","renovate","snyk-bot","sonarcloud","stale","vercel"])});function Li(r){if(r.length===0)return"review_required";let e=new Map;for(let s of r){let o=s.user?.login,n=s.state;o&&n&&e.set(o,n)}let t=Array.from(e.values());return t.includes("CHANGES_REQUESTED")?"changes_requested":t.includes("APPROVED")?"approved":"review_required"}function ji(r){let e;for(let t of r)t.state==="CHANGES_REQUESTED"&&t.submitted_at&&(!e||t.submitted_at>e)&&(e=t.submitted_at);return e}function tu(r,e){let t=e.filter(o=>o.pull_request_review_id===r);if(t.length===0)return!1;let s=new Map;for(let o of e)o.user?.login&&s.set(o.id,o.user.login.toLowerCase());return t.every(o=>{if(!o.in_reply_to_id)return!1;let n=s.get(o.in_reply_to_id),i=o.user?.login?.toLowerCase();return!(n==null||i==null||n!==i||!o.body||o.body.includes("?"))})}function su(r,e){return e.find(t=>t.pull_request_review_id===r&&t.body?.trim())?.body?.trim()}function Ni(r,e,t,s){let o=[],n=s.toLowerCase();for(let c of r){let l=c.user?.login||"unknown";o.push({author:l,body:c.body||"",createdAt:c.created_at,isUser:l.toLowerCase()===n})}for(let c of e){if(!c.submitted_at)continue;let l=(c.body||"").trim();if(!l&&c.state!=="COMMENTED"&&c.state!=="CHANGES_REQUESTED")continue;let d=c.user?.login||"unknown";if(!l&&c.state==="COMMENTED"&&c.id!=null&&tu(c.id,t))continue;let p=l||(c.id!=null?su(c.id,t):void 0)||(c.state==="CHANGES_REQUESTED"?"(requested changes via inline review comments)":"(posted inline review comments)");o.push({author:d,body:p,createdAt:c.submitted_at,isUser:d.toLowerCase()===n})}o.sort((c,l)=>new Date(c.createdAt).getTime()-new Date(l.createdAt).getTime());let i=null;for(let c of o)c.isUser&&(i=new Date(c.createdAt));let a;for(let c of o){if(c.isUser||c.author==="unknown"||Gt(c.author))continue;let l=new Date(c.createdAt);(!i||l>i)&&(a={author:c.author,body:c.body.slice(0,200)+(c.body.length>200?"...":""),createdAt:c.createdAt})}return a&&Kt(a.body)&&(a=void 0),{hasUnrespondedComment:!!a,lastMaintainerComment:a}}var Hi=O(()=>{"use strict";Us()});function qi(r){return ru.test(r.toLowerCase())}function Bi(r){if(!r)return{hasIncompleteChecklist:!1};let e=/- \[x\]/gi,t=/^.*- \[ \].*$/gm,s=r.match(e)||[],o=r.match(t)||[],n=s.length;if(n+o.length===0)return{hasIncompleteChecklist:!1};let a=o.filter(l=>!qi(l)),c=n+a.length;return{hasIncompleteChecklist:a.length>0,checklistStats:{checked:n,total:c}}}var ru,lo=O(()=>{"use strict";ru=/\(if\s|\bif applicable\b|\bif needed\b|\bif relevant\b|\bonly if\b|\bwhen applicable\b|\(optional\)|- \[ \]\s*optional\b|\bn\/a\b|\bnot applicable\b|\bif required\b|\bif necessary\b/});function Vi(r,e){let t=[];if(e==="changes_requested"&&t.push("changes_requested"),!r)return t;let s=r.toLowerCase();return["screenshot","demo","recording","screen recording","before/after","before and after","gif","video","screencast","show me","can you show"].some(c=>s.includes(c))&&t.push("demo_requested"),["add test","test coverage","unit test","missing test","add a test","write test","needs test","need test"].some(c=>s.includes(c))&&t.push("tests_requested"),["documentation","readme","jsdoc","docstring","add docs","update docs","document this"].some(c=>s.includes(c))&&t.push("docs_requested"),["rebase","merge conflict","out of date","behind main","behind master"].some(c=>s.includes(c))&&t.push("rebase_requested"),t}var zi=O(()=>{"use strict"});function Ms(r){if(r.status==="needs_addressing"&&r.actionReason){let e=ou[r.actionReason];if(e)return{displayLabel:e.label,displayDescription:e.description(r)}}if(r.status==="waiting_on_maintainer"&&r.waitReason){let e=nu[r.waitReason];if(e)return{displayLabel:e.label,displayDescription:e.description(r)}}return v("display-utils",`PR ${r.url} has status "${r.status}" but no matching reason (actionReason=${r.actionReason}, waitReason=${r.waitReason})`),r.status==="needs_addressing"?{displayLabel:"[Needs Addressing]",displayDescription:"Action required"}:{displayLabel:"[Waiting on Maintainer]",displayDescription:"Awaiting maintainer action"}}var ou,nu,uo=O(()=>{"use strict";me();ou={needs_response:{label:"[Needs Response]",description:r=>r.lastMaintainerComment?`@${r.lastMaintainerComment.author} commented`:"Maintainer awaiting response"},needs_changes:{label:"[Needs Changes]",description:()=>"Review requested changes \u2014 push commits to address"},failing_ci:{label:"[CI Failing]",description:r=>{let e=r.classifiedChecks||[],t=e.filter(n=>n.category==="actionable");if(t.length>0)return`${t.length} check${t.length===1?"":"s"} failed: ${t.map(n=>n.name).join(", ")}`;let s=e.filter(n=>n.category==="infrastructure");if(s.length>0)return`${s.length} check${s.length===1?"":"s"} cancelled/timed out (infrastructure)`;let o=r.failingCheckNames||[];return o.length>0?`${o.length} check${o.length===1?"":"s"} failed`:"One or more CI checks are failing"}},merge_conflict:{label:"[Merge Conflict]",description:()=>"PR has merge conflicts with the base branch"},incomplete_checklist:{label:"[Incomplete Checklist]",description:r=>r.checklistStats?`${r.checklistStats.checked}/${r.checklistStats.total} items checked`:"PR body has unchecked required checkboxes"},ci_not_running:{label:"[CI Not Running]",description:()=>"No CI checks have been triggered"},needs_rebase:{label:"[Needs Rebase]",description:()=>"PR branch is significantly behind upstream"},missing_required_files:{label:"[Missing Files]",description:r=>r.missingRequiredFiles?`Missing: ${r.missingRequiredFiles.join(", ")}`:"Required files are missing"}},nu={pending_review:{label:"[Waiting on Maintainer]",description:()=>"Awaiting review"},pending_merge:{label:"[Waiting on Maintainer]",description:()=>"Approved and CI passes \u2014 waiting for merge"},changes_addressed:{label:"[Waiting on Maintainer]",description:r=>r.hasUnrespondedComment&&r.lastMaintainerComment?`Changes addressed \u2014 waiting for @${r.lastMaintainerComment.author} to re-review`:"Changes addressed \u2014 awaiting re-review"},ci_blocked:{label:"[CI Blocked]",description:r=>{let e=r.classifiedChecks||[];return e.length>0&&e.every(t=>t.category!=="actionable")?`All failing checks are non-actionable (${[...new Set(e.map(s=>s.category))].join(", ")})`:"CI checks are failing but no action is needed from you"}}}});function Et(){return{repos:new Map,monthlyCounts:{},monthlyOpenedCounts:{},dailyActivityCounts:{}}}function au(r){if(typeof r!="object"||r===null)return!1;let e=r;return Array.isArray(e.reposEntries)&&typeof e.monthlyCounts=="object"&&e.monthlyCounts!==null&&typeof e.monthlyOpenedCounts=="object"&&e.monthlyOpenedCounts!==null&&typeof e.dailyActivityCounts=="object"&&e.dailyActivityCounts!==null}async function Wi(r,e,t,s,o,n){if(!e)return Et();let i=Ze(),a=n?`:stars${n.minStars}`:"",c=`pr-counts:v3:${s}:${e}${a}`,l=i.getIfFresh(c,iu);if(l&&au(l))return P(Ue,`Using cached ${s} PR counts for @${e}`),{repos:new Map(l.reposEntries),monthlyCounts:l.monthlyCounts,monthlyOpenedCounts:l.monthlyOpenedCounts,dailyActivityCounts:l.dailyActivityCounts};P(Ue,`Fetching ${s} PR counts for @${e}...`);let d=new Map,p={},m={},w={},g=1,y=0,S;for(;;){let{data:h}=await r.search.issuesAndPullRequests({q:`is:pr ${t} author:${e} -user:${e}`,sort:"updated",order:"desc",per_page:100,page:g});S=h.total_count;for(let k of h.items){let T=ht(k.html_url);if(!T){v(Ue,`Skipping ${s} PR with unparseable URL: ${k.html_url}`);continue}let{owner:R}=T,I=`${R}/${T.repo}`;if(ft(R,e)||n&&nt(n.knownStarCounts.get(I),n.minStars))continue;let G=o(d,I,k);if(G){let D=G.slice(0,7);p[D]=(p[D]||0)+1;let q=G.slice(0,10);q.length===10&&(w[q]=(w[q]||0)+1)}if(k.created_at){let D=k.created_at.slice(0,7);m[D]=(m[D]||0)+1;let q=k.created_at.slice(0,10);q.length===10&&(w[q]=(w[q]||0)+1)}}if(y+=h.items.length,y>=h.total_count||y>=1e3||h.items.length===0||g>=po)break;g++}return y<S&&g>=po&&v(Ue,`Pagination capped at ${po} pages: fetched ${y} of ${S} ${s} PRs. Stats may be incomplete for prolific contributors.`),P(Ue,`Found ${y} ${s} PRs across ${d.size} repos`),i.set(c,"",{reposEntries:Array.from(d.entries()),monthlyCounts:p,monthlyOpenedCounts:m,dailyActivityCounts:w}),{repos:d,monthlyCounts:p,monthlyOpenedCounts:m,dailyActivityCounts:w}}function Ji(r,e,t){return Wi(r,e,"is:merged","merged",(s,o,n)=>{n.pull_request?.merged_at||v(Ue,`merged_at missing for merged PR ${n.html_url}${n.closed_at?", falling back to closed_at":", no date available"}`);let i=n.pull_request?.merged_at||n.closed_at||"",a=s.get(o);return a?(a.count+=1,i&&i>a.lastMergedAt&&(a.lastMergedAt=i)):s.set(o,{count:1,lastMergedAt:i}),i},t)}function Ki(r,e,t){return Wi(r,e,"is:closed is:unmerged","closed",(s,o,n)=>(s.set(o,(s.get(o)||0)+1),n.closed_at||""),t)}async function Yi(r,e,t,s,o,n){if(!e.githubUsername)return v(Ue,`Skipping recently ${s} PRs fetch: no githubUsername configured. Run /setup-oss to configure.`),[];let i=new Date;i.setDate(i.getDate()-o);let a=i.toISOString().split("T")[0];P(Ue,`Fetching recently ${s} PRs for @${e.githubUsername} (since ${a})...`);let{data:c}=await r.search.issuesAndPullRequests({q:t.replace("{username}",e.githubUsername).replace("{since}",a),sort:"updated",order:"desc",per_page:100}),l=[];for(let d of c.items){let p=ye(d.html_url);if(!p){v(Ue,`Could not parse GitHub URL from API response: ${d.html_url}`);continue}let m=`${p.owner}/${p.repo}`;ft(p.owner,e.githubUsername)||e.excludeRepos.includes(m)||e.excludeOrgs?.some(w=>p.owner.toLowerCase()===w.toLowerCase())||l.push(n(d,{owner:p.owner,repo:m,number:p.number}))}return P(Ue,`Found ${l.length} recently ${s} PRs`),l}async function Qi(r,e,t=7){return Yi(r,e,"is:pr is:closed is:unmerged author:{username} closed:>={since}","closed",t,(s,{repo:o,number:n})=>({url:s.html_url,repo:o,number:n,title:s.title,closedAt:s.closed_at||""}))}async function Xi(r,e,t=7){return Yi(r,e,"is:pr is:merged author:{username} merged:>={since}","merged",t,(s,{repo:o,number:n})=>{let i=s.pull_request?.merged_at;return i||v(Ue,`merged_at missing for merged PR ${s.html_url}${s.closed_at?", falling back to closed_at":", no date available"}`),{url:s.html_url,repo:o,number:n,title:s.title,mergedAt:i||s.closed_at||""}})}var Ue,iu,po,Ls=O(()=>{"use strict";Te();pt();me();Ot();Ue="github-stats",iu=1440*60*1e3,po=3});var js,cu,Rt,Zi=O(()=>{"use strict";zt();Nt();Te();no();ie();Wt();me();Ot();co();Hi();lo();zi();uo();Ls();uo();co();lo();js="pr-monitor",cu=it,Rt=class r{octokit;stateManager;constructor(e){this.octokit=ve(e),this.stateManager=U()}async fetchUserOpenPRs(){let e=this.stateManager.getState().config;if(!e.githubUsername)throw new Ye("No GitHub username configured. Run setup first.");P("pr-monitor",`Fetching open PRs for @${e.githubUsername}...`);let t=[],s=1,o=100,n=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open author:${e.githubUsername}`,sort:"updated",order:"desc",per_page:o,page:1});t.push(...n.data.items);let i=n.data.total_count;P("pr-monitor",`Found ${i} open PRs`);let a=Math.min(Math.ceil(i/o),10);for(;s<a;){s++;let m=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open author:${e.githubUsername}`,sort:"updated",order:"desc",per_page:o,page:s});t.push(...m.data.items)}let c=[],l=[],d=new Set(e.shelvedPRUrls||[]),p=t.filter(m=>{if(!m.pull_request)return!1;let w=ht(m.html_url);if(!w)return v("pr-monitor",`Skipping PR with unparseable URL: ${m.html_url}`),!1;let g=w.owner.toLowerCase();if(g===e.githubUsername.toLowerCase())return!1;let y=`${w.owner}/${w.repo}`,S=d.has(m.html_url);return!(e.excludeRepos.includes(y)&&!S||e.excludeOrgs?.some(h=>g===h.toLowerCase())&&!S)});return P("pr-monitor",`Filtered to ${p.length} PRs after excluding own repos, shelved, and excluded orgs/repos`),await Fr("pr-monitor",`Fetch details for ${p.length} PRs`,async()=>{await xs(p,async m=>{try{P("pr-monitor",`Fetching details for ${m.html_url}`);let w=await this.fetchPRDetails(m.html_url);w&&c.push(w)}catch(w){let g=A(w);v("pr-monitor",`Error fetching ${m.html_url}: ${g}`),l.push({prUrl:m.html_url,error:g})}},cu)}),c.sort((m,w)=>m.status===w.status?0:m.status==="needs_addressing"?-1:1),{prs:c,failures:l}}async fetchPRDetails(e){let t=ye(e);if(!t||t.type!=="pull")throw new Y(`Invalid PR URL format: ${e}`);let{owner:s,repo:o,number:n}=t,i=this.stateManager.getState().config,[a,c,l,d]=await Promise.all([this.octokit.pulls.get({owner:s,repo:o,pull_number:n}),Fe(j=>this.octokit.issues.listComments({owner:s,repo:o,issue_number:n,per_page:100,page:j})),this.octokit.pulls.listReviews({owner:s,repo:o,pull_number:n}),Fe(j=>this.octokit.pulls.listReviewComments({owner:s,repo:o,pull_number:n,per_page:100,page:j})).catch(j=>{let B=Ge(j);if(B===429)throw j;if(B===403){let ee=A(j).toLowerCase();if(ee.includes("rate limit")||ee.includes("abuse detection"))throw j;return v("pr-monitor",`403 fetching review comments for ${s}/${o}#${n}: ${ee}`),[]}return B===404?P("pr-monitor",`Review comments 404 for ${s}/${o}#${n} (likely no inline comments)`):v("pr-monitor",`Failed to fetch review comments for ${s}/${o}#${n} (status ${B??"unknown"}): self-reply detection will be skipped`),[]})]),p=a.data,m=l.data,w=Li(m),g=this.hasMergeConflict(p.mergeable,p.mergeable_state),{hasUnrespondedComment:y,lastMaintainerComment:S}=Ni(c,m,d,i.githubUsername),h=this.getCIStatus(s,o,p.head.sha),T=y||w==="changes_requested"?this.octokit.repos.getCommit({owner:s,repo:o,ref:p.head.sha}).then(j=>({date:j.data.commit.author?.date,author:j.data.author?.login})).catch(j=>{let B=Ge(j);if(B===429)throw j;if(B===403){let ee=A(j).toLowerCase();if(ee.includes("rate limit")||ee.includes("abuse detection"))throw j;v("pr-monitor",`403 fetching commit date for ${s}/${o}@${p.head.sha.slice(0,7)}: ${A(j)}`);return}v("pr-monitor",`Failed to fetch commit date for ${s}/${o}@${p.head.sha.slice(0,7)}: ${A(j)}`)}):Promise.resolve(void 0),[{status:R,failingCheckNames:I,failingCheckConclusions:G},D]=await Promise.all([h,T]),q=D?.date,Z=D?.author,{hasIncompleteChecklist:pe,checklistStats:Ne}=Bi(p.body||""),_e=Vi(S?.body,w),he=$e(new Date(p.updated_at),new Date),ze=ji(m),be=Fs(I,G),Ae=R==="failing"&&be.some(j=>j.category==="actionable"),{status:we,actionReason:M,waitReason:H,stalenessTier:se}=this.determineStatus({ciStatus:R,hasMergeConflict:g,hasUnrespondedComment:y,hasIncompleteChecklist:pe,reviewDecision:w,daysSinceActivity:he,dormantThreshold:i.dormantThresholdDays,approachingThreshold:i.approachingDormantDays,latestCommitDate:q,latestCommitAuthor:Z,contributorUsername:i.githubUsername,lastMaintainerCommentDate:S?.createdAt,latestChangesRequestedDate:ze,hasActionableCIFailure:Ae});return this.buildFetchedPR({id:p.id,url:e,repo:`${s}/${o}`,number:n,title:p.title,status:we,actionReason:M,waitReason:H,stalenessTier:se,createdAt:p.created_at,updatedAt:p.updated_at,daysSinceActivity:he,ciStatus:R,failingCheckNames:I,classifiedChecks:be,hasMergeConflict:g,reviewDecision:w,hasUnrespondedComment:y,lastMaintainerComment:S,latestCommitDate:q,hasIncompleteChecklist:pe,checklistStats:Ne,maintainerActionHints:_e})}buildFetchedPR(e){let t={...e,displayLabel:"",displayDescription:""},{displayLabel:s,displayDescription:o}=Ms(t);return t.displayLabel=s,t.displayDescription=o,t}determineStatus(e){let{ciStatus:t,hasMergeConflict:s,hasUnrespondedComment:o,hasIncompleteChecklist:n,reviewDecision:i,daysSinceActivity:a,dormantThreshold:c,approachingThreshold:l,latestCommitDate:d,latestCommitAuthor:p,contributorUsername:m,lastMaintainerCommentDate:w,latestChangesRequestedDate:g,hasActionableCIFailure:y=!0}=e,S="active";a>=c?S="dormant":a>=l&&(S="approaching_dormant");let h=d&&this.isContributorCommit(p,m)?d:void 0;return o?h&&w&&this.isCommitAfterComment(h,w)?g&&h<g?{status:"needs_addressing",actionReason:"needs_response",stalenessTier:S}:t==="failing"&&y?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:S}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:S}:{status:"needs_addressing",actionReason:"needs_response",stalenessTier:S}:i==="changes_requested"&&g?!h||h<g?{status:"needs_addressing",actionReason:"needs_changes",stalenessTier:S}:t==="failing"&&y?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:S}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:S}:t==="failing"?y?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:S}:{status:"waiting_on_maintainer",waitReason:"ci_blocked",stalenessTier:S}:s?{status:"needs_addressing",actionReason:"merge_conflict",stalenessTier:S}:n?{status:"needs_addressing",actionReason:"incomplete_checklist",stalenessTier:S}:i==="approved"&&(t==="passing"||t==="unknown")?{status:"waiting_on_maintainer",waitReason:"pending_merge",stalenessTier:S}:{status:"waiting_on_maintainer",waitReason:"pending_review",stalenessTier:S}}static CI_FIX_BOTS=new Set(["autofix-ci[bot]","prettier-ci[bot]","pre-commit-ci[bot]"]);isContributorCommit(e,t){if(!e||!t)return!0;let s=e.toLowerCase();return r.CI_FIX_BOTS.has(s)?!0:s===t.toLowerCase()}static MIN_RESPONSE_GAP_MS=120*1e3;isCommitAfterComment(e,t){let s=new Date(e).getTime(),o=new Date(t).getTime();return Number.isNaN(s)||Number.isNaN(o)?e>t:s-o>=r.MIN_RESPONSE_GAP_MS}hasMergeConflict(e,t){return e===!1||t==="dirty"}async getCIStatus(e,t,s){if(!s)return{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map};try{let[o,n]=await Promise.all([this.octokit.repos.getCombinedStatusForRef({owner:e,repo:t,ref:s}),this.octokit.checks.listForRef({owner:e,repo:t,ref:s}).catch(m=>{let w=Ge(m);if(w===429)throw m;if(w===403){let g=A(m).toLowerCase();if(g.includes("rate limit")||g.includes("abuse detection"))throw m}return w===404?P("pr-monitor",`Check runs 404 for ${e}/${t}@${s.slice(0,7)} (no checks configured)`):v("pr-monitor",`Non-404 error fetching check runs for ${e}/${t}@${s.slice(0,7)}: ${w??m}`),null})]),i=o.data,a=n?.data?.check_runs||[],c=new Map;for(let m of a){let w=c.get(m.name);(!w||new Date(m.started_at??0)>new Date(w.started_at??0))&&c.set(m.name,m)}let l=[...c.values()],d=Fi(l),p=Ui(i);return Mi(d,p,l.length)}catch(o){let n=Ge(o);if(n===401||n===403||n===429)throw o;return n===404?(P("pr-monitor",`CI check 404 for ${e}/${t} (no CI configured)`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}):(v("pr-monitor",`Failed to check CI for ${e}/${t}@${s.slice(0,7)}: ${A(o)}`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map})}}async fetchUserMergedPRCounts(e){let t=this.stateManager.getState().config;return Ji(this.octokit,t.githubUsername,e)}async fetchUserClosedPRCounts(e){let t=this.stateManager.getState().config;return Ki(this.octokit,t.githubUsername,e)}async fetchRepoStarCounts(e){if(e.length===0)return new Map;P(js,`Fetching star counts for ${e.length} repos...`);let t=new Map,s=Ze(),o=[...new Set(e)],n=10;for(let i=0;i<o.length;i+=n){let a=o.slice(i,i+n),c=await Promise.allSettled(a.map(async d=>{let p=d.split("/");if(p.length!==2||!p[0]||!p[1])throw new Y(`Malformed repo identifier: "${d}"`);let[m,w]=p,g=`/repos/${m}/${w}`,y=await Jt(s,g,S=>this.octokit.repos.get({owner:m,repo:w,headers:S}));return{repo:d,stars:y.stargazers_count}})),l=0;for(let d=0;d<c.length;d++){let p=c[d];p.status==="fulfilled"?t.set(p.value.repo,p.value.stars):(l++,v(js,`Failed to fetch stars for ${a[d]}: ${A(p.reason)}`))}if(l===a.length&&a.length>0){let d=o.length-i-n;d>0&&v(js,`Entire chunk failed, aborting remaining ${d} repos`);break}}return P(js,`Fetched star counts for ${t.size}/${e.length} repos`),t}async fetchRecentlyClosedPRs(e=7){let t=this.stateManager.getState().config;return Qi(this.octokit,t,e)}async fetchRecentlyMergedPRs(e=7){let t=this.stateManager.getState().config;return Xi(this.octokit,t,e)}generateDigest(e,t=[],s=[]){let o=new Date().toISOString(),n=e.filter(c=>c.status==="needs_addressing"),i=e.filter(c=>c.status==="waiting_on_maintainer"),a=this.stateManager.getStats();return{generatedAt:o,openPRs:e,needsAddressingPRs:n,waitingOnMaintainerPRs:i,recentlyClosedPRs:t,recentlyMergedPRs:s,shelvedPRs:[],autoUnshelvedPRs:[],summary:{totalActivePRs:e.length,totalNeedingAttention:n.length,totalMergedAllTime:a.mergedPRs,mergeRate:parseFloat(a.mergeRate)}}}async updateRepoScoreFromObservedPR(e,t){t?this.stateManager.incrementMergedCount(e):this.stateManager.incrementClosedCount(e)}}});function Ns(r){if(!r.labels||!Array.isArray(r.labels)||r.labels.length===0)return!1;let t=r.labels.map(s=>(typeof s=="string"?s:s.name||"").toLowerCase()).filter(s=>s.length>0);return t.length===0?!1:t.every(s=>go.has(s))}function ta(r){return!r.labels||!Array.isArray(r.labels)?!1:r.labels.map(s=>(typeof s=="string"?s:s.name||"").toLowerCase()).filter(s=>ea.has(s)).length>=5}function sa(r){return r?/^.+\s+(question|fact|point|item|task|entry|post|challenge|exercise|example|problem|tip|recipe|snippet)\s+#?\d+$/i.test(r):!1}function mo(r){let e=new Set,t=new Map;for(let s of r){let o=s.repository_url.split("/").slice(-2).join("/");if(ta(s)){e.add(o);continue}s.title&&sa(s.title)&&t.set(o,(t.get(o)||0)+1)}for(let[s,o]of t)o>=3&&e.add(s);return e}function Hs(r,e){let t=new Map,s=[];for(let o of r){let n=t.get(o.issue.repo)||0;n<e&&(s.push(o),t.set(o.issue.repo,n+1))}return s}var go,ea,ho=O(()=>{"use strict";go=new Set(["documentation","docs","typo","spelling"]);ea=new Set(["good first issue","hacktoberfest","easy","up-for-grabs","first-timers-only","beginner-friendly","beginner","starter","newbie","low-hanging-fruit","community"])});function fo(r,e){let t=0;return r>=5e3?t+=8:r>=500?t+=5:r>=50&&(t+=3),e>=500?t+=4:e>=50&&(t+=2),t}function Yt(r){let e=50;r.repoScore!==null&&(e+=r.repoScore*2),e+=r.repoQualityBonus??0,r.mergedPRCount>0&&(e+=15),r.clearRequirements&&(e+=15);let t=new Date(r.issueUpdatedAt),s=$e(t);return s<=14?e+=15:s<=30&&(e+=Math.round(15*(1-(s-14)/16))),r.hasContributionGuidelines&&(e+=10),r.orgHasMergedPRs&&(e+=5),r.hasExistingPR&&(e-=30),r.isClaimed&&(e-=20),r.closedWithoutMergeCount>0&&r.mergedPRCount===0&&(e-=15),Math.max(0,Math.min(100,e))}var qs=O(()=>{"use strict";Te()});function oa(){let r=Date.now();for(let[e,t]of et.entries())r-t.fetchedAt>na&&et.delete(e);if(et.size>ra){let t=Array.from(et.entries()).sort((s,o)=>s[1].fetchedAt-o[1].fetchedAt).slice(0,et.size-ra);for(let[s]of t)et.delete(s)}}var ut,lu,et,na,uu,ra,Bs,ia=O(()=>{"use strict";Wt();Te();ie();me();Ot();qs();ut="issue-vetting",lu=it,et=new Map,na=3600*1e3,uu=14400*1e3,ra=100;Bs=class{octokit;stateManager;constructor(e,t){this.octokit=e,this.stateManager=t}async vetIssue(e){let t=ye(e);if(!t||t.type!=="issues")throw new Y(`Invalid issue URL: ${e}`);let{owner:s,repo:o,number:n}=t,i=`${s}/${o}`,{data:a}=await this.octokit.issues.get({owner:s,repo:o,issue_number:n}),[c,l,d,p,m]=await Promise.all([this.checkNoExistingPR(s,o,n),this.checkNotClaimed(s,o,n,a.comments),this.checkProjectHealth(s,o),this.fetchContributionGuidelines(s,o),this.checkUserMergedPRsInRepo(s,o)]),w=c.passed,g=l.passed,y=this.analyzeRequirements(a.body||""),S=d.checkFailed?!0:d.isActive,h={passedAllChecks:w&&g&&S&&y,checks:{noExistingPR:w,notClaimed:g,projectActive:S,clearRequirements:y,contributionGuidelinesFound:!!p},contributionGuidelines:p,notes:[]};w||h.notes.push("Existing PR found for this issue"),g||h.notes.push("Issue appears to be claimed by someone"),c.inconclusive&&h.notes.push(`Could not verify absence of existing PRs: ${c.reason||"API error"}`),l.inconclusive&&h.notes.push(`Could not verify claim status: ${l.reason||"API error"}`),d.checkFailed?h.notes.push(`Could not verify project activity: ${d.failureReason||"API error"}`):d.isActive||h.notes.push("Project may be inactive"),y||h.notes.push("Issue requirements are unclear"),p||h.notes.push("No CONTRIBUTING.md found");let k={id:a.id,url:e,repo:i,number:n,title:a.title,status:"candidate",labels:a.labels.map(we=>typeof we=="string"?we:we.name||""),createdAt:a.created_at,updatedAt:a.updated_at,vetted:!0,vettingResult:h},T=[],R=[];w||T.push("Has existing PR"),g||T.push("Already claimed"),!d.isActive&&!d.checkFailed&&T.push("Inactive project"),y||T.push("Unclear requirements"),w&&R.push("No existing PR"),g&&R.push("Not claimed"),d.isActive&&!d.checkFailed&&R.push("Active project"),y&&R.push("Clear requirements"),p&&R.push("Has contribution guidelines");let I=this.stateManager.getState().config,G=this.stateManager.getRepoScore(i),D=G&&G.mergedPRCount>0?G.mergedPRCount:m;D>0?R.push(`Trusted project (${D} PR${D>1?"s":""} merged)`):I.trustedProjects.includes(i)&&R.push("Trusted project (previous PR merged)"),G&&(G.closedWithoutMergeCount>0&&D===0?T.push("User has rejected PR(s) in this repo with no successful merges"):G.closedWithoutMergeCount>0&&D>0&&h.notes.push(`Mixed history: ${D} merged, ${G.closedWithoutMergeCount} closed without merge`));let q=i.split("/")[0],Z=!1;q&&i.includes("/")&&(Z=Object.values(this.stateManager.getState().repoScores).some(we=>we.repo&&we.mergedPRCount>0&&we.repo.startsWith(q+"/")&&we.repo!==i)),Z&&R.push(`Org affinity (merged PRs in other ${q} repos)`);let pe;h.passedAllChecks?pe="approve":T.length>2?pe="skip":pe="needs_review";let Ne=d.checkFailed||c.inconclusive||l.inconclusive;pe==="approve"&&Ne&&(pe="needs_review",h.notes.push("Recommendation downgraded: one or more checks were inconclusive"));let _e=fo(d.stargazersCount??0,d.forksCount??0);d.checkFailed&&_e===0&&h.notes.push("Repo quality bonus unavailable: could not fetch star/fork counts due to API error");let he=this.getRepoScore(i),ze=Yt({repoScore:he,hasExistingPR:!w,isClaimed:!g,clearRequirements:y,hasContributionGuidelines:!!p,issueUpdatedAt:a.updated_at,closedWithoutMergeCount:G?.closedWithoutMergeCount??0,mergedPRCount:D,orgHasMergedPRs:Z,repoQualityBonus:_e}),be=this.stateManager.getStarredRepos(),Ae="normal";return D>0?Ae="merged_pr":be.includes(i)&&(Ae="starred"),{issue:k,vettingResult:h,projectHealth:d,recommendation:pe,reasonsToSkip:T,reasonsToApprove:R,viabilityScore:ze,searchPriority:Ae}}async vetIssuesParallel(e,t,s){let o=[],n=new Map,i=0,a=0,c=0;for(let d of e){if(o.length>=t)break;c++;let p=this.vetIssue(d).then(m=>{o.length<t&&(s&&(m.searchPriority=s),o.push(m))}).catch(m=>{i++,gt(m)&&a++,v(ut,`Error vetting issue ${d}:`,A(m))}).finally(()=>n.delete(d));n.set(d,p),n.size>=lu&&await Promise.race(n.values())}await Promise.allSettled(n.values());let l=i===c&&c>0;return l&&v(ut,`All ${c} issue(s) failed vetting. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:o.slice(0,t),allFailed:l,rateLimitHit:a>0}}async checkNoExistingPR(e,t,s){try{let{data:o}=await this.octokit.search.issuesAndPullRequests({q:`repo:${e}/${t} is:pr ${s}`,per_page:5}),i=(await Fe(a=>this.octokit.issues.listEventsForTimeline({owner:e,repo:t,issue_number:s,per_page:100,page:a}))).filter(a=>{let c=a;return c.event==="cross-referenced"&&c.source?.issue?.pull_request});return{passed:o.total_count===0&&i.length===0}}catch(o){let n=A(o);return v(ut,`Failed to check for existing PRs on ${e}/${t}#${s}: ${n}. Assuming no existing PR.`),{passed:!0,inconclusive:!0,reason:n}}}async checkUserMergedPRsInRepo(e,t){try{let{data:s}=await this.octokit.search.issuesAndPullRequests({q:`repo:${e}/${t} is:pr is:merged author:@me`,per_page:1});return s.total_count}catch(s){let o=A(s);return v(ut,`Could not check merged PRs in ${e}/${t}: ${o}. Defaulting to 0.`),0}}async checkNotClaimed(e,t,s,o){if(o===0)return{passed:!0};try{let i=(await this.octokit.paginate(this.octokit.issues.listComments,{owner:e,repo:t,issue_number:s,per_page:100},c=>c.data)).slice(-100),a=["i'm working on this","i am working on this","i'll take this","i will take this","working on it","i'd like to work on","i would like to work on","can i work on","may i work on","assigned to me","i'm on it","i'll submit a pr","i will submit a pr","working on a fix","working on a pr"];for(let c of i){let l=(c.body||"").toLowerCase();if(a.some(d=>l.includes(d)))return{passed:!1}}return{passed:!0}}catch(n){let i=A(n);return v(ut,`Failed to check claim status on ${e}/${t}#${s}: ${i}. Assuming not claimed.`),{passed:!0,inconclusive:!0,reason:i}}}async checkProjectHealth(e,t){let s=Ze(),o=`health:${e}/${t}`;try{return await Is(s,o,uu,async()=>{let n=`/repos/${e}/${t}`,i=await Jt(s,n,m=>this.octokit.repos.get({owner:e,repo:t,headers:m})),{data:a}=await this.octokit.repos.listCommits({owner:e,repo:t,per_page:1}),l=a[0]?.commit?.author?.date||i.pushed_at,d=$e(new Date(l)),p="unknown";try{let{data:m}=await this.octokit.actions.listRepoWorkflows({owner:e,repo:t,per_page:1});m.total_count>0&&(p="passing")}catch(m){let w=A(m);v(ut,`Failed to check CI status for ${e}/${t}: ${w}. Defaulting to unknown.`)}return{repo:`${e}/${t}`,lastCommitAt:l,daysSinceLastCommit:d,openIssuesCount:i.open_issues_count,avgIssueResponseDays:0,ciStatus:p,isActive:d<30,stargazersCount:i.stargazers_count,forksCount:i.forks_count}})}catch(n){let i=A(n);return v(ut,`Error checking project health for ${e}/${t}: ${i}`),{repo:`${e}/${t}`,lastCommitAt:"",daysSinceLastCommit:999,openIssuesCount:0,avgIssueResponseDays:0,ciStatus:"unknown",isActive:!1,checkFailed:!0,failureReason:i}}}async fetchContributionGuidelines(e,t){let s=`${e}/${t}`,o=et.get(s);if(o&&Date.now()-o.fetchedAt<na)return o.guidelines;let n=["CONTRIBUTING.md",".github/CONTRIBUTING.md","docs/CONTRIBUTING.md","contributing.md"],i=await Promise.allSettled(n.map(a=>this.octokit.repos.getContent({owner:e,repo:t,path:a}).then(({data:c})=>"content"in c?Buffer.from(c.content,"base64").toString("utf-8"):null)));for(let a=0;a<i.length;a++){let c=i[a];if(c.status==="fulfilled"&&c.value){let l=this.parseContributionGuidelines(c.value);return et.set(s,{guidelines:l,fetchedAt:Date.now()}),oa(),l}if(c.status==="rejected"){let l=c.reason instanceof Error?c.reason.message:String(c.reason);!l.includes("404")&&!l.includes("Not Found")&&v(ut,`Unexpected error fetching ${n[a]} from ${e}/${t}: ${l}`)}}et.set(s,{guidelines:void 0,fetchedAt:Date.now()}),oa()}parseContributionGuidelines(e){let t={rawContent:e},s=e.toLowerCase();if(s.includes("branch")){let o=e.match(/branch[^\n]*(?:named?|format|convention)[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.branchNamingConvention=o[1])}if(s.includes("conventional commit"))t.commitMessageFormat="conventional commits";else if(s.includes("commit message")){let o=e.match(/commit message[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.commitMessageFormat=o[1])}return s.includes("jest")?t.testFramework="Jest":s.includes("rspec")?t.testFramework="RSpec":s.includes("pytest")?t.testFramework="pytest":s.includes("mocha")&&(t.testFramework="Mocha"),s.includes("eslint")?t.linter="ESLint":s.includes("rubocop")?t.linter="RuboCop":s.includes("prettier")&&(t.formatter="Prettier"),(s.includes("cla")||s.includes("contributor license agreement"))&&(t.claRequired=!0),t}analyzeRequirements(e){if(!e||e.length<50)return!1;let t=/\d\.|[-*]\s/.test(e),s=/```/.test(e),o=/expect|should|must|want/i.test(e);return[t,s,o,e.length>200].filter(Boolean).length>=2}getRepoScore(e){return this.stateManager.getState().repoScores?.[e]?.score??null}}});var aa,ca,J,du,Tt,la=O(()=>{"use strict";aa=K(require("fs"),1),ca=K(require("path"),1);zt();Nt();Te();pt();ie();me();Ot();ho();ia();qs();ho();qs();J="issue-discovery",du=900*1e3,Tt=class{octokit;stateManager;githubToken;vetter;rateLimitWarning=null;constructor(e){this.githubToken=e,this.octokit=ve(e),this.stateManager=U(),this.vetter=new Bs(this.octokit,this.stateManager)}async cachedSearch(e){let t=`search:${e.q}:${e.sort}:${e.order}:${e.per_page}`;return Is(Ze(),t,du,async()=>{let{data:s}=await this.octokit.search.issuesAndPullRequests(e);return s})}async fetchStarredRepos(){ue(J,"Fetching starred repositories...");let e=[];try{let t=this.octokit.paginate.iterator(this.octokit.activity.listReposStarredByAuthenticatedUser,{per_page:100}),s=0;for await(let{data:o}of t){for(let n of o){let i;"full_name"in n&&typeof n.full_name=="string"?i=n.full_name:"repo"in n&&n.repo&&typeof n.repo=="object"&&"full_name"in n.repo&&(i=n.repo.full_name),i&&e.push(i)}if(s++,s>=5){ue(J,"Reached pagination limit for starred repos (500)");break}}return ue(J,`Fetched ${e.length} starred repositories`),this.stateManager.setStarredRepos(e),e}catch(t){let s=this.stateManager.getStarredRepos(),o=A(t);return v(J,"Error fetching starred repos:",o),s.length===0?v(J,`Failed to fetch starred repositories from GitHub API. No cached repos available. Error: ${o}
|
|
46
|
+
Tip: Ensure your GITHUB_TOKEN has the 'read:user' scope and try again.`):v(J,`Failed to fetch starred repositories from GitHub API. Using ${s.length} cached repos instead. Error: ${o}`),s}}async getStarredReposWithRefresh(){return this.stateManager.isStarredReposStale()?this.fetchStarredRepos():this.stateManager.getStarredRepos()}async filterVetAndScore(e,t,s,o,n,i){let a=mo(e);if(a.size>0){let g=e.filter(y=>a.has(y.repository_url.split("/").slice(-2).join("/"))).length;P(J,`[SPAM_FILTER] Filtered ${g} issues from ${a.size} label-farming repos: ${[...a].join(", ")}`)}let c=t(e).filter(g=>{let y=g.repository_url.split("/").slice(-2).join("/");return a.has(y)?!1:s.every(S=>!S.has(y))}).slice(0,o*2);if(c.length===0)return P(J,`[${i}] All ${e.length} items filtered before vetting`),{candidates:[],allVetFailed:!1,rateLimitHit:!1};let{candidates:l,allFailed:d,rateLimitHit:p}=await this.vetter.vetIssuesParallel(c.map(g=>g.html_url),o,"normal"),m=l.filter(g=>g.projectHealth.checkFailed?!0:(g.projectHealth.stargazersCount??0)>=n),w=l.length-m.length;return w>0&&P(J,`[STAR_FILTER] Filtered ${w} ${i} candidates below ${n} stars`),{candidates:m,allVetFailed:d,rateLimitHit:p}}async searchIssues(e={}){let t=this.stateManager.getState().config,s=e.languages||t.languages,o=e.labels||t.labels,n=e.maxResults||10,i=t.minStars??50,a=[],c=null,l=null,d=!1;this.rateLimitWarning=null;try{let M=await oo(this.githubToken);if(M.remaining<5){let H=new Date(M.resetAt).toLocaleTimeString("en-US",{hour12:!1});this.rateLimitWarning=`GitHub search API quota low (${M.remaining}/${M.limit} remaining, resets at ${H}). Search may be slow.`,v(J,this.rateLimitWarning)}}catch(M){if(Ge(M)===401)throw M;v(J,"Could not check rate limit:",A(M))}let p=this.stateManager.getReposWithMergedPRs(),m=new Set(p),w=this.stateManager.getReposWithOpenPRs(),g=await this.getStarredReposWithRefresh(),y=new Set(g),S=new Set(this.stateManager.getLowScoringRepos(3)),h=new Set(this.stateManager.getState().activeIssues.map(M=>M.url)),k=new Set(t.excludeRepos),T=t.maxIssueAgeDays||90,R=new Date,I=o.map(M=>`label:"${M}"`).join(" "),D=s.some(M=>M.toLowerCase()==="any")?"":s.map(M=>`language:${M}`).join(" "),q=`is:issue is:open ${D} no:assignee`.replace(/ +/g," ").trim(),Z=`is:issue is:open ${I} ${D} no:assignee`.replace(/ +/g," ").trim(),pe=t.includeDocIssues??!0,Ne=new Set(t.aiPolicyBlocklist??dt.aiPolicyBlocklist??[]);Ne.size>0&&P(J,`[AI_POLICY_FILTER] Filtering issues from ${Ne.size} blocklisted repo(s): ${[...Ne].join(", ")}`);let _e=M=>M.filter(H=>{if(h.has(H.html_url))return!1;let se=H.repository_url.split("/").slice(-2).join("/");if(k.has(se)||Ne.has(se)||S.has(se))return!1;let j=new Date(H.updated_at);return!($e(j,R)>T||!pe&&Ns(H))}),he=[...p,...w.filter(M=>!m.has(M))].slice(0,10),ze=new Set(he);if(he.length>0){let M=Math.min(p.length,he.length),H=he.length-M;ue(J,`Phase 0: Searching issues in ${he.length} repos (${M} merged-PR, ${H} open-PR, no label filter)...`);let se=he.slice(0,M);if(se.length>0){let B=n-a.length;if(B>0){let{candidates:ee,allBatchesFailed:De,rateLimitHit:ot}=await this.searchInRepos(se,q,B,"merged_pr",_e);a.push(...ee),De&&(c="All merged-PR repo batches failed"),ot&&(d=!0),ue(J,`Found ${ee.length} candidates from merged-PR repos`)}}let j=he.slice(M);if(j.length>0&&a.length<n){let B=n-a.length;if(B>0){let{candidates:ee,allBatchesFailed:De,rateLimitHit:ot}=await this.searchInRepos(j,q,B,"starred",_e);if(a.push(...ee),De){let We="All open-PR repo batches failed";c=c?`${c}; ${We}`:We}ot&&(d=!0),ue(J,`Found ${ee.length} candidates from open-PR repos`)}}}if(a.length<n&&g.length>0){let M=g.filter(H=>!ze.has(H));if(M.length>0){ue(J,`Phase 1: Searching issues in ${M.length} starred repos...`);let H=n-a.length;if(H>0){let{candidates:se,allBatchesFailed:j,rateLimitHit:B}=await this.searchInRepos(M.slice(0,10),Z,H,"starred",_e);a.push(...se),j&&(l="All starred repo batches failed"),B&&(d=!0),ue(J,`Found ${se.length} candidates from starred repos`)}}}let be=null;if(a.length<n){ue(J,"Phase 2: General issue search...");let M=n-a.length;try{let H=await this.cachedSearch({q:Z,sort:"created",order:"desc",per_page:M*3});ue(J,`Found ${H.total_count} issues in general search, processing top ${H.items.length}...`);let se=new Set(a.map(De=>De.issue.repo)),{candidates:j,allVetFailed:B,rateLimitHit:ee}=await this.filterVetAndScore(H.items,_e,[ze,y,se],M,i,"Phase 2");a.push(...j),B&&(be=(be?be+"; ":"")+"all vetting failed"),ee&&(d=!0),ue(J,`Found ${j.length} candidates from general search`)}catch(H){let se=A(H);be=se,gt(H)&&(d=!0),v(J,`Error in general issue search: ${se}`)}}let Ae=null;if(a.length<n){ue(J,"Phase 3: Searching actively maintained repos...");let M=n-a.length,H=new Date;H.setDate(H.getDate()-30);let se=H.toISOString().split("T")[0],j=`is:issue is:open no:assignee ${D} stars:>=${i} pushed:>=${se} archived:false`.replace(/ +/g," ").trim();try{let B=await this.cachedSearch({q:j,sort:"updated",order:"desc",per_page:M*3});ue(J,`Found ${B.total_count} issues in maintained-repo search, processing top ${B.items.length}...`);let ee=new Set(a.map(dr=>dr.issue.repo)),{candidates:De,allVetFailed:ot,rateLimitHit:We}=await this.filterVetAndScore(B.items,_e,[ze,y,ee],M,i,"Phase 3");a.push(...De),ot&&(Ae="all vetting failed"),We&&(d=!0),ue(J,`Found ${De.length} candidates from maintained-repo search`)}catch(B){let ee=A(B);Ae=ee,gt(B)&&(d=!0),v(J,`Error in maintained-repo search: ${ee}`)}}if(a.length===0){let M=[c?`Phase 0 (merged-PR repos): ${c}`:null,l?`Phase 1 (starred repos): ${l}`:null,be?`Phase 2 (general): ${be}`:null,Ae?`Phase 3 (maintained repos): ${Ae}`:null].filter(Boolean),H=M.length>0?` ${M.join(". ")}.`:"";if(d)return this.rateLimitWarning=`Search returned no results due to GitHub API rate limits.${H} Try again after the rate limit resets.`,[];throw new Y(`No issue candidates found across all search phases.${H} Try adjusting your search criteria (languages, labels) or check your network connection.`)}return d&&(this.rateLimitWarning=`Search results may be incomplete: GitHub API rate limits were hit during search. Found ${a.length} candidate${a.length===1?"":"s"} but some search phases failed. Try again after the rate limit resets for complete results.`),a.sort((M,H)=>{let se={merged_pr:0,starred:1,normal:2},j=se[M.searchPriority]-se[H.searchPriority];if(j!==0)return j;let B={approve:0,needs_review:1,skip:2},ee=B[M.recommendation]-B[H.recommendation];return ee!==0?ee:H.viabilityScore-M.viabilityScore}),Hs(a,2).slice(0,n)}async searchInRepos(e,t,s,o,n){let i=[],c=this.batchRepos(e,5),l=0,d=0;for(let w of c){if(i.length>=s)break;try{let g=w.map(h=>`repo:${h}`).join(" OR "),y=`${t} (${g})`,S=await this.cachedSearch({q:y,sort:"created",order:"desc",per_page:Math.min(30,(s-i.length)*3)});if(S.items.length>0){let h=n(S.items),k=s-i.length,{candidates:T}=await this.vetter.vetIssuesParallel(h.slice(0,k*2).map(R=>R.html_url),k,o);i.push(...T)}}catch(g){l++,gt(g)&&d++;let y=w.join(", ");v(J,`Error searching issues in batch [${y}]:`,A(g))}}let p=l===c.length&&c.length>0,m=d>0;return p&&v(J,`All ${c.length} batch(es) failed for ${o} phase. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:i,allBatchesFailed:p,rateLimitHit:m}}batchRepos(e,t){let s=[];for(let o=0;o<e.length;o+=t)s.push(e.slice(o,o+t));return s}async vetIssue(e){return this.vetter.vetIssue(e)}analyzeRequirements(e){return this.vetter.analyzeRequirements(e)}calculateViabilityScore(e){return Yt(e)}saveSearchResults(e){let t=[...e].sort((a,c)=>c.viabilityScore-a.viabilityScore),s=xe(),o=ca.join(s,"found-issues.md"),n=new Date().toISOString(),i=`# Found Issues
|
|
47
47
|
|
|
48
48
|
`;i+=`> Generated at: ${n}
|
|
49
49
|
|
|
50
50
|
`,i+=`| Score | Repo | Issue | Title | Labels | Updated | Recommendation |
|
|
51
51
|
`,i+=`|-------|------|-------|-------|--------|---------|----------------|
|
|
52
|
-
`;for(let a of t){let{issue:c,viabilityScore:l,recommendation:
|
|
52
|
+
`;for(let a of t){let{issue:c,viabilityScore:l,recommendation:d}=a,p=c.labels.slice(0,3).join(", "),m=p.length>30?p.substring(0,27)+"...":p,w=c.title.length>50?c.title.substring(0,47)+"...":c.title,g=new Date(c.updatedAt).toLocaleDateString(),y=d==="approve"?"Y":d==="skip"?"N":"?";i+=`| ${l} | ${c.repo} | [#${c.number}](${c.url}) | ${w} | ${m} | ${g} | ${y} |
|
|
53
53
|
`}return i+=`
|
|
54
54
|
## Legend
|
|
55
55
|
|
|
56
56
|
`,i+=`- **Score**: Viability score (0-100)
|
|
57
57
|
`,i+=`- **Recommendation**: Y = approve, N = skip, ? = needs_review
|
|
58
|
-
`,
|
|
58
|
+
`,aa.writeFileSync(o,i,"utf-8"),ue(J,`Saved ${t.length} issues to ${o}`),o}formatCandidate(e){let{issue:t,vettingResult:s,projectHealth:o,recommendation:n,reasonsToApprove:i,reasonsToSkip:a}=e;return`
|
|
59
59
|
## ${n==="approve"?"\u2705":n==="skip"?"\u274C":"\u26A0\uFE0F"} Issue Candidate: ${t.repo}#${t.number}
|
|
60
60
|
|
|
61
61
|
**Title:** ${t.title}
|
|
@@ -64,7 +64,7 @@ Tip: Ensure your GITHUB_TOKEN has the 'read:user' scope and try again.`):T(K,`Fa
|
|
|
64
64
|
**URL:** ${t.url}
|
|
65
65
|
|
|
66
66
|
### Vetting Results
|
|
67
|
-
${Object.entries(s.checks).map(([l,
|
|
67
|
+
${Object.entries(s.checks).map(([l,d])=>`- ${d?"\u2713":"\u2717"} ${l.replace(/([A-Z])/g," $1").toLowerCase()}`).join(`
|
|
68
68
|
`)}
|
|
69
69
|
|
|
70
70
|
### Project Health
|
|
@@ -85,14 +85,14 @@ ${s.notes.length>0?`
|
|
|
85
85
|
**Notes:**
|
|
86
86
|
${s.notes.map(l=>`- ${l}`).join(`
|
|
87
87
|
`)}`:""}
|
|
88
|
-
`}}});var Ze,eu,ra,_t,oa=O(()=>{"use strict";Bt();xs();Vt();Lt();Ce();to();ie();ye();Ze="issue-conversation",eu=5,ra=new Set(["OWNER","MEMBER","COLLABORATOR"]),_t=class{octokit;stateManager;constructor(e){this.octokit=_e(e),this.stateManager=L()}async fetchCommentedIssues(e=30){let t=this.stateManager.getState().config;if(!t.githubUsername)throw new Je("No GitHub username configured. Run setup first.");let s=t.githubUsername,o=new Date;o.setDate(o.getDate()-e);let n=o.toISOString().split("T")[0];P(Ze,`Fetching commented issues for @${s} (last ${e} days)...`);let{data:i}=await this.octokit.search.issuesAndPullRequests({q:`commenter:${s} type:issue state:open updated:>=${n}`,sort:"updated",order:"desc",per_page:100});i.total_count>100&&T(Ze,`Search returned ${i.total_count} results but only first 100 were fetched. Some commented issues may be missing.`);let a=this.stateManager.getState().activeIssues||[],c=new Set(a.filter(y=>y.status==="claimed"||y.status==="in_progress"||y.status==="pr_submitted").map(y=>`${y.repo}#${y.number}`)),l=new Set((t.aiPolicyBlocklist||[]).map(y=>y.toLowerCase())),p=[];for(let y of i.items){if(y.pull_request)continue;let g=ut(y.html_url);if(!g){T(Ze,`Skipping issue with unparseable URL: ${y.html_url}`);continue}let{owner:C,repo:h}=g,k=`${C}/${h}`;pt(C,s)||y.user?.login?.toLowerCase()!==s.toLowerCase()&&(t.excludeRepos.includes(k)||t.excludeOrgs?.some(E=>C.toLowerCase()===E.toLowerCase())||l.has(k.toLowerCase())||c.has(`${k}#${y.number}`)||p.push({item:y,repoFullName:k}))}P(Ze,`Found ${p.length} commented issues to check`);let d=[],m=[];await ks(p,async({item:y,repoFullName:g})=>{try{let C=await this.analyzeIssueConversation(y,g,s);C?d.push(C):m.push({issueUrl:y.html_url,error:"No user comment found despite commenter: search match (possible pagination or eventual consistency)"})}catch(C){let h=A(C);m.push({issueUrl:y.html_url,error:h}),T(Ze,`Error analyzing issue ${y.html_url}: ${h}`)}},eu),m.length>0&&T(Ze,`${m.length}/${p.length} issue analysis call(s) failed`),m.length===p.length&&p.length>0&&T(Ze,`All ${p.length} issue analysis call(s) failed. Possible systemic issue (rate limit, auth, network).`);let v={new_response:0,waiting:1,acknowledged:2};return d.sort((y,g)=>v[y.status]-v[g.status]),P(Ze,`Analyzed ${d.length} issue conversations (${d.filter(y=>y.status==="new_response").length} with new responses)`),{issues:d,failures:m}}async analyzeIssueConversation(e,t,s){let{owner:o,repo:n}=hs(t),i=await Fe(h=>this.octokit.issues.listComments({owner:o,repo:n,issue_number:e.number,per_page:100,page:h})),a=[];for(let h of i){if(!h.user?.login)continue;let k=h.user.login;a.push({author:k,body:h.body||"",createdAt:h.created_at,isUser:k.toLowerCase()===s.toLowerCase(),authorAssociation:String(h.author_association??"")})}a.sort((h,k)=>new Date(h.createdAt).getTime()-new Date(k.createdAt).getTime());let c;for(let h of a)h.isUser&&(c=h);if(!c)return T(Ze,`No user comment found for ${e.html_url} despite commenter: search match`),null;let l=new Date(c.createdAt),p=`@${s.toLowerCase()}`;function d(h){return ra.has(h.authorAssociation)||h.body.toLowerCase().includes(p)}let m;for(let h of a){if(h.isUser||Ot(h.author))continue;if(new Date(h.createdAt)>l){if(Wt(h.body)||!d(h))continue;m={author:h.author,body:h.body.slice(0,200)+(h.body.length>200?"...":""),createdAt:h.createdAt,authorAssociation:h.authorAssociation}}}let v=(e.labels||[]).map(h=>h.name||"").filter(Boolean),y={repo:t,number:e.number,title:e.title,url:e.html_url,userLastCommentedAt:c.createdAt,labels:v,daysSinceUserComment:$e(l,new Date)};if(m)return{...y,status:"new_response",lastResponseAuthor:m.author,lastResponseBody:m.body,lastResponseAt:m.createdAt,isFromMaintainer:ra.has(m.authorAssociation)};let C=[...a].reverse().find(h=>Ot(h.author)?!1:h.isUser?!0:d(h))?.isUser?"acknowledged":"waiting";return{...y,status:C}}}});function na(r,e){let t=new Map;for(let s of r){if(!s.repo){T(e,`Skipping PR #${s.number} (${s.url}) with empty repo field`);continue}let o=t.get(s.repo)||[];o.push(s),t.set(s.repo,o)}return t}function et(r){return{number:r.number,url:r.url,title:r.title,repo:r.repo,daysSinceActivity:r.daysSinceActivity,status:r.status}}function Kt(r){let e=na(r,"GROUP_BY_REPO"),t=[];for(let[s,o]of e)t.push({repo:s,prs:o});return t}function Qt(r){let e=na(r,"COMPUTE_SIGNALS"),t=new Map;for(let[s,o]of e){let n=o.some(a=>a.lastMaintainerComment&&!su.has(a.status)),i=o.some(a=>tu.has(a.status));t.set(s,{isResponsive:n,hasActiveMaintainers:i})}return t}function Yt(r,e,t){let s=r.length,o=r.filter(p=>$t.has(p.status)).length,n=s<e,i=o===0,a=n&&i,c,l=t>0?` + ${t} shelved`:"";if(a)c=`You have capacity: ${s}/${e} active PRs${l}, no critical issues`;else{let p=[];n||p.push(`at PR limit (${s}/${e}${l})`),i||p.push(`${o} critical issue${o===1?"":"s"} need attention`),c=`No capacity: ${p.join(", ")}`}return{hasCapacity:a,activePRCount:s,maxActivePRs:e,shelvedPRCount:t,criticalIssueCount:o,reason:c}}function Xt(r,e=new Set){let t=[];for(let s of r)s.status==="needs_response"&&t.push({type:"needs_response",pr:s,label:"[Needs Response]"});for(let s of r)s.status==="needs_changes"&&t.push({type:"needs_changes",pr:s,label:"[Needs Changes]"});for(let s of r)if(s.status==="failing_ci"&&!e.has(s.url)){let o=s.failingCheckNames.length>0?` (${s.failingCheckNames.join(", ")})`:"";t.push({type:"ci_failing",pr:s,label:`[CI Failing${o}]`})}for(let s of r)s.status==="merge_conflict"&&t.push({type:"merge_conflict",pr:s,label:"[Merge Conflict]"});for(let s of r)if(s.status==="incomplete_checklist"){let o=s.checklistStats?` (${s.checklistStats.checked}/${s.checklistStats.total})`:"";t.push({type:"incomplete_checklist",pr:s,label:`[Incomplete Checklist${o}]`})}return t}function go(r){switch(r){case"demo_requested":return"demo/screenshot requested";case"tests_requested":return"tests requested";case"changes_requested":return"code changes requested";case"docs_requested":return"documentation requested";case"rebase_requested":return"rebase requested"}}function Zt(r,e,t=[]){let s=t.filter(a=>a.status==="new_response"),o=[],n=r.length>0,i=s.length>0;return n&&o.push({key:"address_all",label:`Work through all ${r.length} issue${r.length===1?"":"s"} (Recommended)`,description:"Run maintenance in parallel, then address code changes one at a time"}),i&&o.push({key:"issue_replies",label:`Review ${s.length} issue repl${s.length===1?"y":"ies"}`,description:"Maintainers responded to your comments on issues"}),o.push({key:"search",label:"Search for new issues",description:"Look for new contribution opportunities"}),o.push({key:"done",label:"Done for now",description:"End session with summary"}),{items:o,context:{hasActionableIssues:n,actionableCount:r.length,hasCapacity:e.hasCapacity,hasIssueResponses:i,issueResponseCount:s.length}}}function es(r,e,t=0){let s=e>0?`${e} need${e===1?"s":""} attention`:"all healthy",o=t>0?` | ${t} issue repl${t===1?"y":"ies"}`:"";return`\u{1F4CA} ${r.summary.totalActivePRs} Active PRs | ${s}${o}`}function ts(r,e,t=[]){let s=[];if(s.push("## OSS Dashboard"),s.push(""),s.push(`\u{1F4CA} **${r.summary.totalActivePRs} Active PRs** | ${r.summary.totalMergedAllTime} Merged | ${r.summary.mergeRate}% Merge Rate`),s.push('\u2713 Dashboard generated \u2014 say "open dashboard" to view in browser'),s.push(""),r.ciFailingPRs.length>0){s.push("### \u274C CI Failing");for(let a of r.ciFailingPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),a.failingCheckNames.length>0&&s.push(` \u2514\u2500 Failing: ${a.failingCheckNames.join(", ")}`);s.push("")}if(r.mergeConflictPRs.length>0){s.push("### \u26A0\uFE0F Merge Conflicts");for(let a of r.mergeConflictPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);s.push("")}if(r.prsNeedingResponse.length>0){s.push("### \u{1F4AC} Needs Response");for(let a of r.prsNeedingResponse){let c=a.lastMaintainerComment?.author||"maintainer";if(s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),s.push(` \u2514\u2500 @${c} commented`),a.maintainerActionHints.length>0){let l=a.maintainerActionHints.map(go).join(", ");s.push(` \u2514\u2500 Action: ${l}`)}}s.push("")}if(r.needsChangesPRs.length>0){s.push("### \u{1F527} Needs Changes");for(let a of r.needsChangesPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),s.push(" \u2514\u2500 Review requested changes \u2014 push commits to address");s.push("")}if(r.incompleteChecklistPRs.length>0){s.push("### \u{1F4CB} Incomplete Checklist");for(let a of r.incompleteChecklistPRs){let c=a.checklistStats?` (${a.checklistStats.checked}/${a.checklistStats.total} checked)`:"";s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c}`)}s.push("")}if(r.changesAddressedPRs.length>0){s.push("### \u{1F4E4} Changes Addressed");for(let a of r.changesAddressedPRs){let c=a.lastMaintainerComment?.author||"maintainer";s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),s.push(` \u2514\u2500 Waiting for @${c} to re-review`)}s.push("")}if(r.waitingOnMaintainerPRs.length>0){s.push("### \u23F3 Waiting on Maintainer");for(let a of r.waitingOnMaintainerPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title} (approved)`);s.push("")}if(r.healthyPRs.length>0){s.push("### \u2705 Healthy");for(let a of r.healthyPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);s.push("")}if(r.recentlyMergedPRs.length>0){s.push("### \u{1F389} Recently Merged");for(let a of r.recentlyMergedPRs){let c=a.mergedAt?new Date(a.mergedAt).toLocaleDateString():"";s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (merged ${c})`:""}`)}s.push("")}if(r.recentlyClosedPRs.length>0){s.push("### \u{1F6AB} Recently Closed");for(let a of r.recentlyClosedPRs){let c=a.closedAt?new Date(a.closedAt).toLocaleDateString():"";s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (closed ${c})`:""}`)}s.push("")}if(r.autoUnshelvedPRs.length>0){s.push("### \u{1F514} Auto-Unshelved"),s.push("> These PRs were shelved but a maintainer engaged \u2014 moved back to active.");for(let a of r.autoUnshelvedPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title} (${a.status.replace(/_/g," ")})`);s.push("")}if(r.shelvedPRs.length>0){s.push("### \u{1F4E6} Shelved");for(let a of r.shelvedPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);s.push("")}if(t.length>0){s.push("### \u{1F4AC} Issue Replies");for(let a of t){s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);let c=fs(a.lastResponseAt);s.push(` \u2514\u2500 @${a.lastResponseAuthor}: "${a.lastResponseBody.slice(0,80)}${a.lastResponseBody.length>80?"...":""}"${c?` (${c})`:""}`)}s.push("")}let o=e.hasCapacity?"\u2705":"\u26A0\uFE0F",n=e.hasCapacity?"Ready for new work":"Focus on existing PRs",i=e.shelvedPRCount>0?` + ${e.shelvedPRCount} shelved`:"";return s.push(`**Capacity:** ${o} ${n} (${e.activePRCount}/${e.maxActivePRs} PRs${i})`),s.join(`
|
|
89
|
-
`)}function
|
|
88
|
+
`}}});var tt,pu,ua,St,da=O(()=>{"use strict";zt();Us();Wt();Nt();Te();no();ie();me();tt="issue-conversation",pu=it,ua=new Set(["OWNER","MEMBER","COLLABORATOR"]),St=class{octokit;stateManager;constructor(e){this.octokit=ve(e),this.stateManager=U()}async fetchCommentedIssues(e=30){let t=this.stateManager.getState().config;if(!t.githubUsername)throw new Ye("No GitHub username configured. Run setup first.");let s=t.githubUsername,o=new Date;o.setDate(o.getDate()-e);let n=o.toISOString().split("T")[0];P(tt,`Fetching commented issues for @${s} (last ${e} days)...`);let{data:i}=await this.octokit.search.issuesAndPullRequests({q:`commenter:${s} type:issue state:open updated:>=${n}`,sort:"updated",order:"desc",per_page:100});i.total_count>100&&v(tt,`Search returned ${i.total_count} results but only first 100 were fetched. Some commented issues may be missing.`);let a=this.stateManager.getState().activeIssues||[],c=new Set(a.filter(g=>g.status==="claimed"||g.status==="in_progress"||g.status==="pr_submitted").map(g=>`${g.repo}#${g.number}`)),l=new Set((t.aiPolicyBlocklist||[]).map(g=>g.toLowerCase())),d=[];for(let g of i.items){if(g.pull_request)continue;let y=ht(g.html_url);if(!y){v(tt,`Skipping issue with unparseable URL: ${g.html_url}`);continue}let{owner:S,repo:h}=y,k=`${S}/${h}`;ft(S,s)||g.user?.login?.toLowerCase()!==s.toLowerCase()&&(t.excludeRepos.includes(k)||t.excludeOrgs?.some(T=>S.toLowerCase()===T.toLowerCase())||l.has(k.toLowerCase())||c.has(`${k}#${g.number}`)||d.push({item:g,repoFullName:k}))}P(tt,`Found ${d.length} commented issues to check`);let p=[],m=[];await xs(d,async({item:g,repoFullName:y})=>{try{let S=await this.analyzeIssueConversation(g,y,s);S?p.push(S):m.push({issueUrl:g.html_url,error:"No user comment found despite commenter: search match (possible pagination or eventual consistency)"})}catch(S){let h=A(S);m.push({issueUrl:g.html_url,error:h}),v(tt,`Error analyzing issue ${g.html_url}: ${h}`)}},pu),m.length>0&&v(tt,`${m.length}/${d.length} issue analysis call(s) failed`),m.length===d.length&&d.length>0&&v(tt,`All ${d.length} issue analysis call(s) failed. Possible systemic issue (rate limit, auth, network).`);let w={new_response:0,waiting:1,acknowledged:2};return p.sort((g,y)=>w[g.status]-w[y.status]),P(tt,`Analyzed ${p.length} issue conversations (${p.filter(g=>g.status==="new_response").length} with new responses)`),{issues:p,failures:m}}async analyzeIssueConversation(e,t,s){let{owner:o,repo:n}=vs(t),i=await Fe(h=>this.octokit.issues.listComments({owner:o,repo:n,issue_number:e.number,per_page:100,page:h})),a=[];for(let h of i){if(!h.user?.login)continue;let k=h.user.login;a.push({author:k,body:h.body||"",createdAt:h.created_at,isUser:k.toLowerCase()===s.toLowerCase(),authorAssociation:String(h.author_association??"")})}a.sort((h,k)=>new Date(h.createdAt).getTime()-new Date(k.createdAt).getTime());let c;for(let h of a)h.isUser&&(c=h);if(!c)return v(tt,`No user comment found for ${e.html_url} despite commenter: search match`),null;let l=new Date(c.createdAt),d=`@${s.toLowerCase()}`;function p(h){return ua.has(h.authorAssociation)||h.body.toLowerCase().includes(d)}let m;for(let h of a){if(h.isUser||Gt(h.author))continue;if(new Date(h.createdAt)>l){if(Kt(h.body)||!p(h))continue;m={author:h.author,body:h.body.slice(0,200)+(h.body.length>200?"...":""),createdAt:h.createdAt,authorAssociation:h.authorAssociation}}}let w=(e.labels||[]).map(h=>h.name||"").filter(Boolean),g={repo:t,number:e.number,title:e.title,url:e.html_url,userLastCommentedAt:c.createdAt,labels:w,daysSinceUserComment:$e(l,new Date)};if(m)return{...g,status:"new_response",lastResponseAuthor:m.author,lastResponseBody:m.body,lastResponseAt:m.createdAt,isFromMaintainer:ua.has(m.authorAssociation)};let S=[...a].reverse().find(h=>Gt(h.author)?!1:h.isUser?!0:p(h))?.isUser?"acknowledged":"waiting";return{...g,status:S}}}});function ga(r,e){let t=new Map;for(let s of r){if(!s.repo){v(e,`Skipping PR #${s.number} (${s.url}) with empty repo field`);continue}let o=t.get(s.repo)||[];o.push(s),t.set(s.repo,o)}return t}function st(r){return{number:r.number,url:r.url,title:r.title,repo:r.repo,daysSinceActivity:r.daysSinceActivity,status:r.status}}function Qt(r){let e=ga(r,"GROUP_BY_REPO"),t=[];for(let[s,o]of e)t.push({repo:s,prs:o});return t}function Xt(r){let e=ga(r,"COMPUTE_SIGNALS"),t=new Map;for(let[s,o]of e){let n=o.some(a=>a.lastMaintainerComment&&!pa.has(a.stalenessTier)),i=o.some(a=>!pa.has(a.stalenessTier));t.set(s,{isResponsive:n,hasActiveMaintainers:i})}return t}function Zt(r,e,t){let s=r.length,o=r.filter(d=>d.status==="needs_addressing"&&d.actionReason&&gu.has(d.actionReason)).length,n=s<e,i=o===0,a=n&&i,c,l=t>0?` + ${t} shelved`:"";if(a)c=`You have capacity: ${s}/${e} active PRs${l}, no critical issues`;else{let d=[];n||d.push(`at PR limit (${s}/${e}${l})`),i||d.push(`${o} critical issue${o===1?"":"s"} need attention`),c=`No capacity: ${d.join(", ")}`}return{hasCapacity:a,activePRCount:s,maxActivePRs:e,shelvedPRCount:t,criticalIssueCount:o,reason:c}}function es(r,e=new Set){let t=[],s=r.filter(n=>n.status==="needs_addressing"),o=["needs_response","needs_changes","failing_ci","merge_conflict","incomplete_checklist"];for(let n of o)for(let i of s){if(i.actionReason!==n||n==="failing_ci"&&e.has(i.url))continue;let a,c;switch(n){case"needs_response":a="[Needs Response]",c="needs_response";break;case"needs_changes":a="[Needs Changes]",c="needs_changes";break;case"failing_ci":{a=`[CI Failing${i.failingCheckNames.length>0?` (${i.failingCheckNames.join(", ")})`:""}]`,c="ci_failing";break}case"merge_conflict":a="[Merge Conflict]",c="merge_conflict";break;case"incomplete_checklist":{a=`[Incomplete Checklist${i.checklistStats?` (${i.checklistStats.checked}/${i.checklistStats.total})`:""}]`,c="incomplete_checklist";break}default:v("daily-logic",`Unhandled ActionReason "${n}" for PR ${i.url} \u2014 falling back to needs_response`),a=`[${n}]`,c="needs_response"}t.push({type:c,pr:i,label:a})}return t}function ts(r,e,t=[]){let s=t.filter(a=>a.status==="new_response"),o=[],n=r.length>0,i=s.length>0;return n&&o.push({key:"address_all",label:`Work through all ${r.length} issue${r.length===1?"":"s"} (Recommended)`,description:"Run maintenance in parallel, then address code changes one at a time"}),i&&o.push({key:"issue_replies",label:`Review ${s.length} issue repl${s.length===1?"y":"ies"}`,description:"Maintainers responded to your comments on issues"}),o.push({key:"search",label:"Search for new issues",description:"Look for new contribution opportunities"}),o.push({key:"done",label:"Done for now",description:"End session with summary"}),{items:o,context:{hasActionableIssues:n,actionableCount:r.length,hasCapacity:e.hasCapacity,hasIssueResponses:i,issueResponseCount:s.length}}}function ss(r,e,t=0){let s=e>0?`${e} need${e===1?"s":""} attention`:"all on track",o=t>0?` | ${t} issue repl${t===1?"y":"ies"}`:"";return`\u{1F4CA} ${r.summary.totalActivePRs} Active PRs | ${s}${o}`}function rs(r,e,t=[]){let s=[];if(s.push("## OSS Dashboard"),s.push(""),s.push(`\u{1F4CA} **${r.summary.totalActivePRs} Active PRs** | ${r.summary.totalMergedAllTime} Merged | ${r.summary.mergeRate}% Merge Rate`),s.push('\u2713 Dashboard generated \u2014 say "open dashboard" to view in browser'),s.push(""),r.needsAddressingPRs.length>0){s.push("### \u274C Needs Addressing");for(let a of r.needsAddressingPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),s.push(` \u2514\u2500 ${a.displayLabel} ${a.displayDescription}`);s.push("")}if(r.waitingOnMaintainerPRs.length>0){s.push("### \u23F3 Waiting on Maintainer");for(let a of r.waitingOnMaintainerPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),s.push(` \u2514\u2500 ${a.displayDescription}`);s.push("")}if(r.recentlyMergedPRs.length>0){s.push("### \u{1F389} Recently Merged");for(let a of r.recentlyMergedPRs){let c=a.mergedAt?new Date(a.mergedAt).toLocaleDateString():"";s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (merged ${c})`:""}`)}s.push("")}if(r.recentlyClosedPRs.length>0){s.push("### \u{1F6AB} Recently Closed");for(let a of r.recentlyClosedPRs){let c=a.closedAt?new Date(a.closedAt).toLocaleDateString():"";s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (closed ${c})`:""}`)}s.push("")}if(r.autoUnshelvedPRs.length>0){s.push("### \u{1F514} Auto-Unshelved"),s.push("> These PRs were shelved but a maintainer engaged \u2014 moved back to active.");for(let a of r.autoUnshelvedPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title} (${a.status.replace(/_/g," ")})`);s.push("")}if(r.shelvedPRs.length>0){s.push("### \u{1F4E6} Shelved");for(let a of r.shelvedPRs)s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);s.push("")}if(t.length>0){s.push("### \u{1F4AC} Issue Replies");for(let a of t){s.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);let c=_s(a.lastResponseAt);s.push(` \u2514\u2500 @${a.lastResponseAuthor}: "${a.lastResponseBody.slice(0,80)}${a.lastResponseBody.length>80?"...":""}"${c?` (${c})`:""}`)}s.push("")}let o=e.hasCapacity?"\u2705":"\u26A0\uFE0F",n=e.hasCapacity?"Ready for new work":"Focus on existing PRs",i=e.shelvedPRCount>0?` + ${e.shelvedPRCount} shelved`:"";return s.push(`**Capacity:** ${o} ${n} (${e.activePRCount}/${e.maxActivePRs} PRs${i})`),s.join(`
|
|
89
|
+
`)}function bo(r,e,t=[]){if(console.log(`
|
|
90
90
|
\u{1F4CA} OSS Daily Check
|
|
91
91
|
`),console.log(`Active PRs: ${r.summary.totalActivePRs}`),console.log(`Needing Attention: ${r.summary.totalNeedingAttention}`),console.log(`Merged (all time): ${r.summary.totalMergedAllTime}`),console.log(`Merge Rate: ${r.summary.mergeRate}%`),console.log(`
|
|
92
92
|
Capacity: ${e.hasCapacity?"\u2705 Ready for new work":"\u26A0\uFE0F Focus on existing work"}`),console.log(` ${e.reason}
|
|
93
|
-
`),r.ciFailingPRs.length>0){console.log("\u274C CI Failing:");for(let o of r.ciFailingPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`),o.failingCheckNames.length>0&&console.log(` Failing: ${o.failingCheckNames.join(", ")}`);console.log("")}if(r.mergeConflictPRs.length>0){console.log("\u26A0\uFE0F Merge Conflicts:");for(let o of r.mergeConflictPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`);console.log("")}if(r.prsNeedingResponse.length>0){console.log("\u{1F4AC} Needs Response:");for(let o of r.prsNeedingResponse)if(console.log(` - ${o.repo}#${o.number}: ${o.title}`),o.maintainerActionHints.length>0){let n=o.maintainerActionHints.map(go).join(", ");console.log(` Action: ${n}`)}console.log("")}if(r.needsChangesPRs.length>0){console.log("\u{1F527} Needs Changes:");for(let o of r.needsChangesPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`),console.log(" Review requested changes \u2014 push commits to address");console.log("")}if(r.incompleteChecklistPRs.length>0){console.log("\u{1F4CB} Incomplete Checklist:");for(let o of r.incompleteChecklistPRs){let n=o.checklistStats?` (${o.checklistStats.checked}/${o.checklistStats.total} checked)`:"";console.log(` - ${o.repo}#${o.number}: ${o.title}${n}`)}console.log("")}if(r.changesAddressedPRs.length>0){console.log("\u{1F4E4} Changes Addressed:");for(let o of r.changesAddressedPRs){let n=o.lastMaintainerComment?.author||"maintainer";console.log(` - ${o.repo}#${o.number}: ${o.title}`),console.log(` Waiting for @${n} to re-review`)}console.log("")}if(r.waitingOnMaintainerPRs.length>0){console.log("\u23F3 Waiting on Maintainer:");for(let o of r.waitingOnMaintainerPRs)console.log(` - ${o.repo}#${o.number}: ${o.title} (approved)`);console.log("")}if(r.recentlyMergedPRs.length>0){console.log("\u{1F389} Recently Merged:");for(let o of r.recentlyMergedPRs){let n=o.mergedAt?new Date(o.mergedAt).toLocaleDateString():"";console.log(` - ${o.repo}#${o.number}: ${o.title}${n?` (merged ${n})`:""}`)}console.log("")}if(r.recentlyClosedPRs.length>0){console.log("\u{1F6AB} Recently Closed:");for(let o of r.recentlyClosedPRs){let n=o.closedAt?new Date(o.closedAt).toLocaleDateString():"";console.log(` - ${o.repo}#${o.number}: ${o.title}${n?` (closed ${n})`:""}`)}console.log("")}if(r.autoUnshelvedPRs.length>0){console.log("\u{1F514} Auto-Unshelved:");for(let o of r.autoUnshelvedPRs)console.log(` - ${o.repo}#${o.number}: ${o.title} (${o.status.replace(/_/g," ")})`);console.log("")}if(r.shelvedPRs.length>0){console.log("\u{1F4E6} Shelved:");for(let o of r.shelvedPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`);console.log("")}let s=t.filter(o=>o.status==="new_response");if(s.length>0){console.log("\u{1F4AC} Issue Replies:");for(let o of s)console.log(` - ${o.repo}#${o.number}: ${o.title}`),console.log(` @${o.lastResponseAuthor}: ${o.lastResponseBody.slice(0,80)}${o.lastResponseBody.length>80?"...":""}`);console.log("")}console.log("Run with --json for structured output"),console.log('Run "dashboard serve" for browser view')}var $t,tu,su,ia=O(()=>{"use strict";Ce();ye();$t=new Set(["needs_response","needs_changes","failing_ci","merge_conflict"]),tu=new Set(["healthy","waiting_on_maintainer","changes_addressed","needs_response","needs_changes"]),su=new Set(["dormant","approaching_dormant"])});var se=O(()=>{"use strict";Lt();zi();sa();oa();xs();Bt();Ce();ie();ye();At();ia();us()});function aa(r){let e=t=>t.map(s=>s.url);return{generatedAt:r.generatedAt,openPRs:r.openPRs,prsNeedingResponse:e(r.prsNeedingResponse),ciFailingPRs:e(r.ciFailingPRs),ciBlockedPRs:e(r.ciBlockedPRs),ciNotRunningPRs:e(r.ciNotRunningPRs),mergeConflictPRs:e(r.mergeConflictPRs),needsRebasePRs:e(r.needsRebasePRs),missingRequiredFilesPRs:e(r.missingRequiredFilesPRs),incompleteChecklistPRs:e(r.incompleteChecklistPRs),needsChangesPRs:e(r.needsChangesPRs),changesAddressedPRs:e(r.changesAddressedPRs),waitingOnMaintainerPRs:e(r.waitingOnMaintainerPRs),approachingDormant:e(r.approachingDormant),dormantPRs:e(r.dormantPRs),healthyPRs:e(r.healthyPRs),recentlyClosedPRs:r.recentlyClosedPRs,recentlyMergedPRs:r.recentlyMergedPRs,shelvedPRs:r.shelvedPRs,autoUnshelvedPRs:r.autoUnshelvedPRs,summary:r.summary}}function ca(r){return r.map(e=>({type:e.type,prUrl:e.pr.url,label:e.label}))}function la(r){return r.map(e=>({repo:e.repo,prUrls:e.prs.map(t=>t.url)}))}function ru(r){return{success:!0,data:r,timestamp:new Date().toISOString()}}function ou(r){return{success:!1,error:r,timestamp:new Date().toISOString()}}function Y(r){console.log(JSON.stringify(ru(r),null,2))}function ua(r){console.log(JSON.stringify(ou(r),null,2))}var ho=O(()=>{"use strict"});var fo={};re(fo,{CRITICAL_STATUSES:()=>$t,assessCapacity:()=>Yt,collectActionableIssues:()=>Xt,computeActionMenu:()=>Zt,computeRepoSignals:()=>Qt,executeDailyCheck:()=>js,formatBriefSummary:()=>es,formatSummary:()=>ts,groupPRsByRepo:()=>Kt,printDigest:()=>mo,runDaily:()=>pu,runDailyForDisplay:()=>du,toShelvedPRRef:()=>et});function ss(r){let e=me(r);if(e===401||e===429)return!0;if(e===403){let t=A(r).toLowerCase();return t.includes("rate limit")||t.includes("abuse detection")}return!1}async function nu(r,e){let{prs:t,failures:s}=await r.fetchUserOpenPRs();s.length>0&&T(B,`${s.length} PR fetch(es) failed`);let o=new _t(e),[n,i,a,c,l]=await Promise.all([r.fetchUserMergedPRCounts().catch(h=>{if(ss(h))throw h;return T(B,`Failed to fetch merged PR counts: ${A(h)}`),bt()}),r.fetchUserClosedPRCounts().catch(h=>{if(ss(h))throw h;return T(B,`Failed to fetch closed PR counts: ${A(h)}`),bt()}),r.fetchRecentlyClosedPRs().catch(h=>{if(ss(h))throw h;return T(B,`Failed to fetch recently closed PRs: ${A(h)}`),[]}),r.fetchRecentlyMergedPRs().catch(h=>{if(ss(h))throw h;return T(B,`Failed to fetch recently merged PRs: ${A(h)}`),[]}),o.fetchCommentedIssues().catch(h=>{if(ss(h))throw h;let k=A(h);return k.includes("No GitHub username configured")?T(B,`Issue conversation tracking requires setup: ${k}`):T(B,`Issue conversation fetch failed: ${k}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${k}`}]}})]),p=l.issues;l.failures.length>0&&T(B,`${l.failures.length} issue conversation check(s) failed`);let{repos:d,monthlyCounts:m,monthlyOpenedCounts:v}=n,{repos:y,monthlyCounts:g,monthlyOpenedCounts:C}=i;return{prs:t,failures:s,mergedCounts:d,closedCounts:y,monthlyCounts:m,monthlyClosedCounts:g,openedFromMerged:v,openedFromClosed:C,recentlyClosedPRs:a,recentlyMergedPRs:c,commentedIssues:p}}async function iu(r,e,t,s){let o=L(),n=Object.values(o.getState().repoScores).filter(g=>g.mergedPRCount>0);if(t.size===0&&n.length>0)T(B,`Skipping stale repo reset: API returned 0 merged PR results but state has ${n.length} repo(s) with merges. Possible API issue.`);else for(let g of Object.values(o.getState().repoScores))t.has(g.repo)||o.updateRepoScore(g.repo,{mergedPRCount:0});let i=0;for(let[g,{count:C,lastMergedAt:h}]of t)try{o.updateRepoScore(g,{mergedPRCount:C,lastMergedAt:h||void 0})}catch(k){i++,T(B,`Failed to update merged count for ${g}: ${A(k)}`)}i===t.size&&t.size>0&&T(B,`[ALL_MERGED_COUNT_UPDATES_FAILED] All ${t.size} merged count update(s) failed.`);let a=Object.values(o.getState().repoScores).filter(g=>(g.closedWithoutMergeCount||0)>0);s.size===0&&a.length>0&&T(B,`API returned 0 closed PR results but state has ${a.length} repo(s) with closed PRs. Possible transient API issue.`);let c=0;for(let[g,C]of s)try{o.updateRepoScore(g,{closedWithoutMergeCount:C})}catch(h){c++,T(B,`Failed to update closed count for ${g}: ${A(h)}`)}c===s.size&&s.size>0&&T(B,`[ALL_CLOSED_COUNT_UPDATES_FAILED] All ${s.size} closed count update(s) failed.`);let l=Qt(e),p=0;for(let[g,C]of l)try{o.updateRepoScore(g,{signals:C})}catch(h){p++,T(B,`Failed to update signals for ${g}: ${A(h)}`)}p===l.size&&l.size>0&&T(B,`[ALL_SIGNAL_UPDATES_FAILED] All ${l.size} signal update(s) failed. This may indicate corrupted state.`);let d=Object.keys(o.getState().repoScores),m;try{m=await r.fetchRepoStarCounts(d)}catch(g){T(B,`Failed to fetch repo star counts: ${A(g)}`),T(B,"Dashboard minStars filter will use cached star counts (or be skipped for repos without cached data)."),m=new Map}let v=0;for(let[g,C]of m)try{o.updateRepoScore(g,{stargazersCount:C})}catch(h){v++,T(B,`Failed to update star count for ${g}: ${A(h)}`)}v===m.size&&m.size>0&&T(B,`[ALL_STAR_COUNT_UPDATES_FAILED] All ${m.size} star count update(s) failed.`);let y=0;for(let[g]of t)try{o.addTrustedProject(g)}catch(C){y++,T(B,`Failed to sync trusted project ${g}: ${A(C)}`)}y===t.size&&t.size>0&&T(B,`[ALL_TRUST_SYNCS_FAILED] All ${t.size} trusted project sync(s) failed. This may indicate corrupted state.`)}function au(r,e,t,s,o){let n=L();try{Object.keys(e).length>0&&n.setMonthlyMergedCounts(e)}catch(i){T(B,`Failed to store monthly merged counts: ${A(i)}`)}try{Object.keys(t).length>0&&n.setMonthlyClosedCounts(t)}catch(i){T(B,`Failed to store monthly closed counts: ${A(i)}`)}try{let i={...s};for(let[a,c]of Object.entries(o))i[a]=(i[a]||0)+c;for(let a of r)if(a.createdAt){let c=a.createdAt.slice(0,7);i[c]=(i[c]||0)+1}Object.keys(i).length>0&&n.setMonthlyOpenedCounts(i)}catch(i){T(B,`Failed to compute/store monthly opened counts: ${A(i)}`)}}function cu(r,e,t,s){let o=L();try{let l=o.expireSnoozes();if(l.length>0){let p=l.map(d=>` - ${d}`).join(`
|
|
94
|
-
`);
|
|
95
|
-
${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n=[],i=[],a=[];for(let l of e)o.isPRShelved(l.url)?$t.has(l.status)?(o.unshelvePR(l.url),i.push(et(l)),a.push(l)):n.push(et(l)):l.status==="dormant"?n.push(et(l)):a.push(l);let c=r.generateDigest(e,t,s);return c.shelvedPRs=n,c.autoUnshelvedPRs=i,c.summary.totalActivePRs=a.length,o.setLastDigest(c),o.save(),{activePRs:a,shelvedPRs:n,autoUnshelvedPRs:i,digest:c}}function lu(r,e,t,s,o){let n=L(),i=Yt(e,n.getState().config.maxActivePRs,t.length),a=!1,c=s.filter(h=>{let k=n.getIssueDismissedAt(h.url);if(!k)return!0;if(h.status==="new_response"){let E=new Date(h.lastResponseAt).getTime(),w=new Date(k).getTime();if(isNaN(E)||isNaN(w))return T(B,`Invalid timestamp in dismiss check for ${h.url}, including issue`),!0;if(E>w)return T(B,`Auto-undismissing issue ${h.url}: new response at ${h.lastResponseAt} after dismiss at ${k}`),n.undismissIssue(h.url),a=!0,!0}return!1}),l=c.filter(h=>h.status==="new_response"),p=ts(r,i,l),d=new Set(Object.keys(n.getState().config.snoozedPRs??{}).filter(h=>n.isSnoozed(h))),m=e.filter(h=>{let k=n.getIssueDismissedAt(h.url);if(!k)return!0;let E=new Date(h.updatedAt).getTime(),w=new Date(k).getTime();return isNaN(E)||isNaN(w)?(T(B,`Invalid timestamp in PR dismiss check for ${h.url}, including PR`),!0):E>w?(T(B,`Auto-undismissing PR ${h.url}: new activity at ${h.updatedAt} after dismiss at ${k}`),n.undismissIssue(h.url),a=!0,!0):!1});if(a)try{n.save()}catch(h){T(B,`Failed to persist auto-undismissed state: ${A(h)}`)}let v=Xt(m,d);r.summary.totalNeedingAttention=v.length;let y=es(r,v.length,l.length),g=Zt(v,i,c),C=Kt(e);return{digest:r,capacity:i,summary:p,briefSummary:y,actionableIssues:v,actionMenu:g,commentedIssues:c,repoGroups:C,failures:o}}function uu(r){return{digest:aa(r.digest),capacity:r.capacity,summary:r.summary,briefSummary:r.briefSummary,actionableIssues:ca(r.actionableIssues),actionMenu:r.actionMenu,commentedIssues:r.commentedIssues,repoGroups:la(r.repoGroups),failures:r.failures}}async function js(r){let e=await pa(r);return uu(e)}async function pa(r){let e=new yt(r),{prs:t,failures:s,mergedCounts:o,closedCounts:n,monthlyCounts:i,monthlyClosedCounts:a,openedFromMerged:c,openedFromClosed:l,recentlyClosedPRs:p,recentlyMergedPRs:d,commentedIssues:m}=await nu(e,r);await iu(e,t,o,n),au(t,i,a,c,l);let{activePRs:v,shelvedPRs:y,digest:g}=cu(e,t,p,d);return lu(g,v,y,m,s)}async function pu(){let r=be();return js(r)}async function du(){let r=be();return pa(r)}var B,rs=O(()=>{"use strict";se();ie();ye();Is();ho();se();B="daily"});var da={};re(da,{runStatus:()=>gu});async function gu(r){let e=L(),t=e.getStats(),s=e.getState(),o=s.lastDigestAt||s.lastRunAt,{totalTracked:n,...i}=t,a={stats:i,lastRunAt:s.lastRunAt};return r.offline&&(a.offline=!0,a.lastUpdated=o),a}var ga=O(()=>{"use strict";se()});var ma={};re(ma,{runSearch:()=>mu});async function mu(r){let e=be(),t=new vt(e),s=await t.searchIssues({maxResults:r.maxResults}),o=L(),{config:n}=o.getState(),i=n.excludeRepos||[],a=n.aiPolicyBlocklist??ct.aiPolicyBlocklist??[],c={candidates:s.map(l=>{let p=o.getRepoScore(l.issue.repo);return{issue:{repo:l.issue.repo,number:l.issue.number,title:l.issue.title,url:l.issue.url,labels:l.issue.labels},recommendation:l.recommendation,reasonsToApprove:l.reasonsToApprove,reasonsToSkip:l.reasonsToSkip,searchPriority:l.searchPriority,viabilityScore:l.viabilityScore,repoScore:p?{score:p.score,mergedPRCount:p.mergedPRCount,closedWithoutMergeCount:p.closedWithoutMergeCount,isResponsive:p.signals?.isResponsive??!1,lastMergedAt:p.lastMergedAt}:void 0}}),excludedRepos:i,aiPolicyBlocklist:a};return t.rateLimitWarning&&(c.rateLimitWarning=t.rateLimitWarning),c}var ha=O(()=>{"use strict";se()});function oe(r,e,t){if(e.test(r))return;let s={PR:"https://github.com/owner/repo/pull/123",issue:"https://github.com/owner/repo/issues/123","issue or PR":"https://github.com/owner/repo/issues/123 or https://github.com/owner/repo/pull/123"};throw new J(`Invalid ${t} URL: ${r}. Expected format: ${s[t]}`)}function ee(r){if(r.length>fa)throw new J(`URL exceeds maximum length of ${fa} characters`);return r}function Rt(r){if(r.length>ba)throw new J(`Message exceeds maximum length of ${ba} characters`);return r}function Gt(r){if(!r||r.trim().length===0)throw new J("GitHub username cannot be empty.");let e=r.trim();if(e.length>ya)throw new J(`GitHub username must be at most ${ya} characters (got ${e.length}).`);if(!hu.test(e))throw new J("GitHub username can only contain alphanumeric characters and hyphens.");if(e.startsWith("-"))throw new J("GitHub username cannot start with a hyphen.");if(e.endsWith("-"))throw new J("GitHub username cannot end with a hyphen.");if(fu.test(e))throw new J("GitHub username cannot contain consecutive hyphens.");return e}var we,Ns,wt,fa,ba,ya,hu,fu,Ge=O(()=>{"use strict";ie();we=/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+$/,Ns=/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/,wt=/^https:\/\/github\.com\/[^/]+\/[^/]+\/(issues|pull)\/\d+$/,fa=2048,ba=1e3;ya=39,hu=/^[a-zA-Z0-9-]+$/,fu=/--/});var va={};re(va,{runVet:()=>bu});async function bu(r){ee(r.issueUrl),oe(r.issueUrl,Ns,"issue");let e=be(),s=await new vt(e).vetIssue(r.issueUrl);return{issue:{repo:s.issue.repo,number:s.issue.number,title:s.issue.title,url:s.issue.url,labels:s.issue.labels},recommendation:s.recommendation,reasonsToApprove:s.reasonsToApprove,reasonsToSkip:s.reasonsToSkip,projectHealth:s.projectHealth,vettingResult:s.vettingResult}}var _a=O(()=>{"use strict";se();Ge()});var bo={};re(bo,{runTrack:()=>yu,runUntrack:()=>vu});async function yu(r){ee(r.prUrl),oe(r.prUrl,we,"PR");let e=be(),t=_e(e),s=ve(r.prUrl);if(!s||s.type!=="pull")throw new Error(`Invalid PR URL: ${r.prUrl}`);let{owner:o,repo:n,number:i}=s,{data:a}=await t.pulls.get({owner:o,repo:n,pull_number:i});return{pr:{repo:`${o}/${n}`,number:i,title:a.title,url:r.prUrl}}}async function vu(r){return ee(r.prUrl),oe(r.prUrl,we,"PR"),{removed:!1,url:r.prUrl,message:"In v2, PRs are fetched fresh on each daily run \u2014 there is no local tracking list to remove from."}}var yo=O(()=>{"use strict";se();Ge();Ce()});var wa={};re(wa,{runRead:()=>_u});async function _u(r){if(!r.all&&!r.prUrl)throw new Error("PR URL or --all flag required");return r.prUrl&&ee(r.prUrl),r.all?{markedAsRead:0,all:!0,message:"In v2, PR read state is not tracked locally."}:{marked:!1,url:r.prUrl,message:"In v2, PR read state is not tracked locally."}}var Ra=O(()=>{"use strict";Ge()});var Hs={};re(Hs,{runClaim:()=>Eu,runComments:()=>wu,runPost:()=>Ru});async function wu(r){ee(r.prUrl),oe(r.prUrl,we,"PR");let e=be(),t=L(),s=_e(e),o=ve(r.prUrl);if(!o||o.type!=="pull")throw new Error("Invalid PR URL format");let{owner:n,repo:i,number:a}=o,{data:c}=await s.pulls.get({owner:n,repo:i,pull_number:a}),[l,p,d]=await Promise.all([Fe(h=>s.pulls.listReviewComments({owner:n,repo:i,pull_number:a,per_page:100,page:h})),Fe(h=>s.issues.listComments({owner:n,repo:i,issue_number:a,per_page:100,page:h})),Fe(h=>s.pulls.listReviews({owner:n,repo:i,pull_number:a,per_page:100,page:h}))]),m=t.getState().config.githubUsername,v=h=>!(!h.user||h.user.login===m||h.user.type==="Bot"&&!r.showBots),y=l.filter(v).sort((h,k)=>new Date(k.created_at).getTime()-new Date(h.created_at).getTime()),g=p.filter(v).sort((h,k)=>new Date(k.created_at).getTime()-new Date(h.created_at).getTime()),C=d.filter(h=>v(h)&&h.body&&h.body.trim()).sort((h,k)=>new Date(k.submitted_at||0).getTime()-new Date(h.submitted_at||0).getTime());return{pr:{title:c.title,state:c.state,mergeable:c.mergeable,head:c.head.ref,base:c.base.ref,url:c.html_url},reviews:C.map(h=>({user:h.user?.login,state:h.state,body:h.body??null,submittedAt:h.submitted_at??null})),reviewComments:y.map(h=>({user:h.user?.login,body:h.body,path:h.path,createdAt:h.created_at})),issueComments:g.map(h=>({user:h.user?.login,body:h.body,createdAt:h.created_at})),summary:{reviewCount:C.length,inlineCommentCount:y.length,discussionCommentCount:g.length}}}async function Ru(r){if(ee(r.url),oe(r.url,wt,"issue or PR"),!r.message.trim())throw new Error("No message provided");Rt(r.message);let e=be(),t=ve(r.url);if(!t)throw new Error("Invalid GitHub URL format");let{owner:s,repo:o,number:n}=t,i=_e(e),{data:a}=await i.issues.createComment({owner:s,repo:o,issue_number:n,body:r.message});return{commentUrl:a.html_url,url:r.url}}async function Eu(r){ee(r.issueUrl),oe(r.issueUrl,Ns,"issue");let e=be(),t=r.message||"Hi! I'd like to work on this issue. Could you assign it to me?";Rt(t);let s=ve(r.issueUrl);if(!s||s.type!=="issues")throw new Error("Invalid issue URL format (must be an issue, not a PR)");let{owner:o,repo:n,number:i}=s,a=_e(e),{data:c}=await a.issues.createComment({owner:o,repo:n,issue_number:i,body:t});try{let l=L();l.addIssue({id:i,url:r.issueUrl,repo:`${o}/${n}`,number:i,title:"(claimed)",status:"claimed",labels:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),vetted:!1}),l.save()}catch(l){console.error(`Warning: Comment posted on ${r.issueUrl} but failed to save to local state: ${l instanceof Error?l.message:l}`)}return{commentUrl:c.html_url,issueUrl:r.issueUrl}}var qs=O(()=>{"use strict";se();Vt();Ge()});var Ea={};re(Ea,{runConfig:()=>Tu});async function Tu(r){let e=L(),t=e.getState().config;if(!r.key)return{config:t};if(!r.value)throw new Error("Value required");let s=r.value;switch(r.key){case"username":e.updateConfig({githubUsername:Gt(s)});break;case"add-language":t.languages.includes(s)||e.updateConfig({languages:[...t.languages,s]});break;case"add-label":t.labels.includes(s)||e.updateConfig({labels:[...t.labels,s]});break;case"exclude-repo":{let o=s.split("/");if(o.length!==2||!o[0]||!o[1])throw new Error(`Invalid repo format "${s}". Use "owner/repo" format. To exclude an entire org, use: config exclude-org ${s}`);let n=s.toLowerCase();t.excludeRepos.some(i=>i.toLowerCase()===n)||(e.updateConfig({excludeRepos:[...t.excludeRepos,s]}),e.cleanupExcludedData([s],[]));break}case"exclude-org":{if(s.includes("/"))throw new Error(`Invalid org name "${s}". Use just the org name (e.g., "facebook"), not "owner/repo" format. To exclude a specific repo, use: config exclude-repo ${s}`);let o=t.excludeOrgs??[];o.some(n=>n.toLowerCase()===s.toLowerCase())||(e.updateConfig({excludeOrgs:[...o,s]}),e.cleanupExcludedData([],[s]));break}default:throw new Error(`Unknown config key: ${r.key}`)}return e.save(),{success:!0,key:r.key,value:s}}var Ta=O(()=>{"use strict";se();Ge()});var Ca={};re(Ca,{runInit:()=>Cu});async function Cu(r){Gt(r.username);let e=L();return e.updateConfig({githubUsername:r.username}),e.save(),{username:r.username,message:"Username saved. Run `daily` to fetch your open PRs from GitHub."}}var Sa=O(()=>{"use strict";se();Ge()});var _o={};re(_o,{runCheckSetup:()=>Pu,runSetup:()=>Su});function vo(r,e){let t=Number(r);if(!Number.isFinite(t)||t<1||!Number.isInteger(t))throw new J(`Invalid value for ${e}: "${r}". Must be a positive integer.`);return t}async function Su(r){let e=L(),t=e.getState().config;if(r.set&&r.set.length>0){let s={},o=[];for(let n of r.set){let[i,...a]=n.split("="),c=a.join("=");switch(i){case"username":Gt(c),e.updateConfig({githubUsername:c}),s[i]=c;break;case"maxActivePRs":{let l=vo(c,"maxActivePRs");e.updateConfig({maxActivePRs:l}),s[i]=String(l);break}case"dormantDays":{let l=vo(c,"dormantDays");e.updateConfig({dormantThresholdDays:l}),s[i]=String(l);break}case"approachingDays":{let l=vo(c,"approachingDays");e.updateConfig({approachingDormantDays:l}),s[i]=String(l);break}case"languages":e.updateConfig({languages:c.split(",").map(l=>l.trim())}),s[i]=c;break;case"labels":e.updateConfig({labels:c.split(",").map(l=>l.trim())}),s[i]=c;break;case"showHealthCheck":e.updateConfig({showHealthCheck:c!=="false"}),s[i]=c!=="false"?"true":"false";break;case"squashByDefault":c==="ask"?(e.updateConfig({squashByDefault:"ask"}),s[i]="ask"):(e.updateConfig({squashByDefault:c!=="false"}),s[i]=c!=="false"?"true":"false");break;case"minStars":{let l=Number(c);if(!Number.isFinite(l)||!Number.isInteger(l)||l<0)throw new J(`Invalid value for minStars: "${c}". Must be a non-negative integer.`);e.updateConfig({minStars:l}),s[i]=String(l);break}case"includeDocIssues":e.updateConfig({includeDocIssues:c==="true"}),s[i]=c==="true"?"true":"false";break;case"aiPolicyBlocklist":{let l=c.split(",").map(m=>m.trim()).filter(Boolean),p=[],d=[];for(let m of l){let v=m.replace(/\s+/g,"");/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(v)?p.push(v):d.push(m)}if(d.length>0&&(o.push(`Warning: Skipping invalid entries (expected "owner/repo" format): ${d.join(", ")}`),s.aiPolicyBlocklist_invalidEntries=d.join(", ")),p.length===0&&l.length>0){o.push("Warning: All entries were invalid. Blocklist not updated."),s[i]="(all entries invalid)";break}e.updateConfig({aiPolicyBlocklist:p}),s[i]=p.length>0?p.join(", "):"(empty)";break}case"complete":c==="true"&&(e.markSetupComplete(),s[i]="true");break;default:o.push(`Unknown setting: ${i}`)}}return e.save(),{success:!0,settings:s,warnings:o.length>0?o:void 0}}return t.setupComplete&&!r.reset?{setupComplete:!0,config:{githubUsername:t.githubUsername,maxActivePRs:t.maxActivePRs,dormantThresholdDays:t.dormantThresholdDays,approachingDormantDays:t.approachingDormantDays,languages:t.languages,labels:t.labels}}:{setupRequired:!0,prompts:[{setting:"username",prompt:"What is your GitHub username?",current:t.githubUsername||null,required:!0,type:"string"},{setting:"maxActivePRs",prompt:"How many PRs do you want to work on at once?",current:t.maxActivePRs,default:10,type:"number"},{setting:"dormantDays",prompt:"After how many days of inactivity should a PR be considered dormant?",current:t.dormantThresholdDays,default:30,type:"number"},{setting:"approachingDays",prompt:"At how many days should we warn about approaching dormancy?",current:t.approachingDormantDays,default:25,type:"number"},{setting:"languages",prompt:"What programming languages do you want to contribute to?",current:t.languages,default:["typescript","javascript"],type:"list"},{setting:"labels",prompt:"What issue labels should we search for?",current:t.labels,default:["good first issue","help wanted"],type:"list"},{setting:"aiPolicyBlocklist",prompt:"Repos with anti-AI contribution policies to block (owner/repo, comma-separated)?",current:t.aiPolicyBlocklist??ct.aiPolicyBlocklist??null,default:["matplotlib/matplotlib"],type:"list"}]}}async function Pu(){let r=L();return{setupComplete:r.isSetupComplete(),username:r.getState().config.githubUsername}}var wo=O(()=>{"use strict";se();ie();Ge()});function os(r,e){let t=r.summary||{totalActivePRs:0,totalMergedAllTime:0,mergeRate:0,totalNeedingAttention:0};return{activePRs:t.totalActivePRs,shelvedPRs:(r.shelvedPRs||[]).length,mergedPRs:t.totalMergedAllTime,closedPRs:Object.values(e.repoScores||{}).reduce((s,o)=>s+(o.closedWithoutMergeCount||0),0),mergeRate:`${(t.mergeRate??0).toFixed(1)}%`}}function Bs(r){let e=me(r);if(e===401||e===429)return!0;if(e===403){let t=A(r).toLowerCase();return t.includes("rate limit")||t.includes("abuse detection")}return!1}async function Ro(r){let e=L(),t=new yt(r),s=new _t(r),[{prs:o,failures:n},i,a,c,l,p]=await Promise.all([t.fetchUserOpenPRs(),t.fetchRecentlyClosedPRs().catch(E=>{if(Bs(E))throw E;return console.error(`Warning: Failed to fetch recently closed PRs: ${A(E)}`),[]}),t.fetchRecentlyMergedPRs().catch(E=>{if(Bs(E))throw E;return console.error(`Warning: Failed to fetch recently merged PRs: ${A(E)}`),[]}),t.fetchUserMergedPRCounts().catch(E=>{if(Bs(E))throw E;return console.error(`Warning: Failed to fetch merged PR counts: ${A(E)}`),bt()}),t.fetchUserClosedPRCounts().catch(E=>{if(Bs(E))throw E;return console.error(`Warning: Failed to fetch closed PR counts: ${A(E)}`),bt()}),s.fetchCommentedIssues().catch(E=>{let w=A(E);return w.includes("No GitHub username configured")?console.error(`[DASHBOARD] Issue conversation tracking requires setup: ${w}`):console.error(`[DASHBOARD] Issue conversation fetch failed: ${w}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${w}`}]}})]),d=p.issues;p.failures.length>0&&console.error(`[DASHBOARD] ${p.failures.length} issue conversation check(s) failed`),n.length>0&&console.error(`Warning: ${n.length} PR fetch(es) failed`);let{monthlyCounts:m,monthlyOpenedCounts:v}=c,{monthlyCounts:y,monthlyOpenedCounts:g}=l;try{Object.keys(m).length>0&&e.setMonthlyMergedCounts(m)}catch(E){console.error("[DASHBOARD] Failed to store monthly merged counts:",A(E))}try{Object.keys(y).length>0&&e.setMonthlyClosedCounts(y)}catch(E){console.error("[DASHBOARD] Failed to store monthly closed counts:",A(E))}try{let E={...v};for(let[w,U]of Object.entries(g))E[w]=(E[w]||0)+U;for(let w of o)if(w.createdAt){let U=w.createdAt.slice(0,7);E[U]=(E[U]||0)+1}Object.keys(E).length>0&&e.setMonthlyOpenedCounts(E)}catch(E){console.error("[DASHBOARD] Failed to store monthly opened counts:",A(E))}let C=t.generateDigest(o,i,a),h=new Set(e.getState().config.shelvedPRUrls||[]),k=o.filter(E=>h.has(E.url)||E.status==="dormant");C.shelvedPRs=k.map(et),C.autoUnshelvedPRs=[],C.summary.totalActivePRs=o.length-k.length,e.setLastDigest(C);try{e.save()}catch(E){console.error("Warning: Failed to save dashboard digest to state:",A(E))}return console.error(`Refreshed: ${o.length} PRs fetched`),{digest:C,commentedIssues:d}}function Pa(r,e){let t={};for(let s of r.openPRs||[])t[s.repo]||(t[s.repo]={active:0,merged:0,closed:0}),t[s.repo].active++;for(let[s,o]of Object.entries(e.repoScores||{}))t[s]||(t[s]={active:0,merged:0,closed:0}),t[s].merged=o.mergedPRCount,t[s].closed=o.closedWithoutMergeCount;return t}function ka(r,e=10){return Object.entries(r).sort((t,s)=>s[1].merged+s[1].active+s[1].closed-(t[1].merged+t[1].active+t[1].closed)).slice(0,e)}function Vs(r){return{monthlyMerged:r.monthlyMergedCounts||{},monthlyClosed:r.monthlyClosedCounts||{},monthlyOpened:r.monthlyOpenedCounts||{}}}var zs=O(()=>{"use strict";se();ie();Is();rs()});function N(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var Ws=O(()=>{"use strict"});var Aa,Oa=O(()=>{"use strict";Aa=`
|
|
93
|
+
`),r.needsAddressingPRs.length>0){console.log("\u274C Needs Addressing:");for(let o of r.needsAddressingPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`),console.log(` ${o.displayLabel} ${o.displayDescription}`);console.log("")}if(r.waitingOnMaintainerPRs.length>0){console.log("\u23F3 Waiting on Maintainer:");for(let o of r.waitingOnMaintainerPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`),console.log(` ${o.displayDescription}`);console.log("")}if(r.recentlyMergedPRs.length>0){console.log("\u{1F389} Recently Merged:");for(let o of r.recentlyMergedPRs){let n=o.mergedAt?new Date(o.mergedAt).toLocaleDateString():"";console.log(` - ${o.repo}#${o.number}: ${o.title}${n?` (merged ${n})`:""}`)}console.log("")}if(r.recentlyClosedPRs.length>0){console.log("\u{1F6AB} Recently Closed:");for(let o of r.recentlyClosedPRs){let n=o.closedAt?new Date(o.closedAt).toLocaleDateString():"";console.log(` - ${o.repo}#${o.number}: ${o.title}${n?` (closed ${n})`:""}`)}console.log("")}if(r.autoUnshelvedPRs.length>0){console.log("\u{1F514} Auto-Unshelved:");for(let o of r.autoUnshelvedPRs)console.log(` - ${o.repo}#${o.number}: ${o.title} (${o.status.replace(/_/g," ")})`);console.log("")}if(r.shelvedPRs.length>0){console.log("\u{1F4E6} Shelved:");for(let o of r.shelvedPRs)console.log(` - ${o.repo}#${o.number}: ${o.title}`);console.log("")}let s=t.filter(o=>o.status==="new_response");if(s.length>0){console.log("\u{1F4AC} Issue Replies:");for(let o of s)console.log(` - ${o.repo}#${o.number}: ${o.title}`),console.log(` @${o.lastResponseAuthor}: ${o.lastResponseBody.slice(0,80)}${o.lastResponseBody.length>80?"...":""}`);console.log("")}console.log("Run with --json for structured output"),console.log('Run "dashboard serve" for browser view')}var xt,gu,pa,ma=O(()=>{"use strict";Te();me();xt=new Set(["needs_addressing"]),gu=new Set(["needs_response","needs_changes","failing_ci","merge_conflict"]),pa=new Set(["dormant","approaching_dormant"])});var re=O(()=>{"use strict";Nt();Zi();la();da();Us();zt();Te();ie();me();Ot();ma();pt()});function ha(r){let e=t=>t.map(s=>s.url);return{generatedAt:r.generatedAt,openPRs:r.openPRs,needsAddressingPRs:e(r.needsAddressingPRs),waitingOnMaintainerPRs:e(r.waitingOnMaintainerPRs),recentlyClosedPRs:r.recentlyClosedPRs,recentlyMergedPRs:r.recentlyMergedPRs,shelvedPRs:r.shelvedPRs,autoUnshelvedPRs:r.autoUnshelvedPRs,summary:r.summary}}function fa(r){return r.map(e=>({type:e.type,prUrl:e.pr.url,label:e.label}))}function ba(r){return r.map(e=>({repo:e.repo,prUrls:e.prs.map(t=>t.url)}))}function mu(r){return{success:!0,data:r,timestamp:new Date().toISOString()}}function hu(r){return{success:!1,error:r,timestamp:new Date().toISOString()}}function Q(r){console.log(JSON.stringify(mu(r),null,2))}function ya(r){console.log(JSON.stringify(hu(r),null,2))}var yo=O(()=>{"use strict"});function os(r,e){let t=r.summary||{totalActivePRs:0,totalMergedAllTime:0,mergeRate:0,totalNeedingAttention:0};return{activePRs:t.totalActivePRs,shelvedPRs:(r.shelvedPRs||[]).length,mergedPRs:t.totalMergedAllTime,closedPRs:Object.values(e.repoScores||{}).reduce((s,o)=>s+(o.closedWithoutMergeCount||0),0),mergeRate:`${(t.mergeRate??0).toFixed(1)}%`}}function vo(r,e){let t={...r};for(let[s,o]of Object.entries(e))t[s]=o;return t}function _o(r,e,t,s,o){let n=U(),i=n.getState();try{Object.keys(e).length>0&&n.setMonthlyMergedCounts(vo(i.monthlyMergedCounts||{},e))}catch(a){v(Ce,`Failed to store monthly merged counts: ${A(a)}`)}try{Object.keys(t).length>0&&n.setMonthlyClosedCounts(vo(i.monthlyClosedCounts||{},t))}catch(a){v(Ce,`Failed to store monthly closed counts: ${A(a)}`)}try{let a={...s};for(let[c,l]of Object.entries(o))a[c]=(a[c]||0)+l;for(let c of r)if(c.createdAt){let l=c.createdAt.slice(0,7);a[l]=(a[l]||0)+1}Object.keys(a).length>0&&n.setMonthlyOpenedCounts(vo(i.monthlyOpenedCounts||{},a))}catch(a){v(Ce,`Failed to store monthly opened counts: ${A(a)}`)}}async function wo(r){let e=U(),t=new Rt(r),s=new St(r),o=zs(e.getState()),[{prs:n,failures:i},a,c,l,d,p]=await Promise.all([t.fetchUserOpenPRs(),t.fetchRecentlyClosedPRs().catch(R=>{if(Ee(R))throw R;return v(Ce,`Failed to fetch recently closed PRs: ${A(R)}`),[]}),t.fetchRecentlyMergedPRs().catch(R=>{if(Ee(R))throw R;return v(Ce,`Failed to fetch recently merged PRs: ${A(R)}`),[]}),t.fetchUserMergedPRCounts(o).catch(R=>{if(Ee(R))throw R;return v(Ce,`Failed to fetch merged PR counts: ${A(R)}`),Et()}),t.fetchUserClosedPRCounts(o).catch(R=>{if(Ee(R))throw R;return v(Ce,`Failed to fetch closed PR counts: ${A(R)}`),Et()}),s.fetchCommentedIssues().catch(R=>{if(Ee(R))throw R;let I=A(R);return I.includes("No GitHub username configured")?v(Ce,`Issue conversation tracking requires setup: ${I}`):v(Ce,`Issue conversation fetch failed: ${I}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${I}`}]}})]),m=p.issues;p.failures.length>0&&v(Ce,`${p.failures.length} issue conversation check(s) failed`),i.length>0&&v(Ce,`${i.length} PR fetch(es) failed`);let{monthlyCounts:w,monthlyOpenedCounts:g}=l,{monthlyCounts:y,monthlyOpenedCounts:S}=d;_o(n,w,y,g,S);let h=t.generateDigest(n,a,c),k=new Set(e.getState().config.shelvedPRUrls||[]),T=n.filter(R=>k.has(R.url)||R.stalenessTier==="dormant"&&R.status!=="needs_addressing");h.shelvedPRs=T.map(st),h.autoUnshelvedPRs=[],h.summary.totalActivePRs=n.length-T.length,e.setLastDigest(h);try{e.save()}catch(R){v(Ce,`Failed to save dashboard digest to state: ${A(R)}`)}return v(Ce,`Refreshed: ${n.length} PRs fetched`),{digest:h,commentedIssues:m}}function va(r,e){let t={};for(let o of r.openPRs||[])t[o.repo]||(t[o.repo]={active:0,merged:0,closed:0}),t[o.repo].active++;let s=e.config.minStars??50;for(let[o,n]of Object.entries(e.repoScores||{}))nt(n.stargazersCount,s)||(t[o]||(t[o]={active:0,merged:0,closed:0}),t[o].merged=n.mergedPRCount,t[o].closed=n.closedWithoutMergeCount);return t}function _a(r,e=10){return Object.entries(r).sort((t,s)=>s[1].merged+s[1].active+s[1].closed-(t[1].merged+t[1].active+t[1].closed)).slice(0,e)}function Vs(r){return{monthlyMerged:r.monthlyMergedCounts||{},monthlyClosed:r.monthlyClosedCounts||{},monthlyOpened:r.monthlyOpenedCounts||{}}}var Ce,ns=O(()=>{"use strict";re();ie();me();Ls();is();pt();Ce="dashboard-data"});var Eo={};ne(Eo,{CRITICAL_STATUSES:()=>xt,assessCapacity:()=>Zt,buildStarFilter:()=>zs,collectActionableIssues:()=>es,computeActionMenu:()=>ts,computeRepoSignals:()=>Xt,executeDailyCheck:()=>Ws,formatBriefSummary:()=>ss,formatSummary:()=>rs,groupPRsByRepo:()=>Qt,printDigest:()=>bo,runDaily:()=>wu,runDailyForDisplay:()=>Eu,toShelvedPRRef:()=>st});function zs(r){let e=r.config.minStars??50,t=new Map;for(let[s,o]of Object.entries(r.repoScores))o.stargazersCount!==void 0&&t.set(s,o.stargazersCount);if(t.size!==0)return{minStars:e,knownStarCounts:t}}async function fu(r,e){let{prs:t,failures:s}=await r.fetchUserOpenPRs();s.length>0&&v(W,`${s.length} PR fetch(es) failed`);let o=U().getState(),n=zs(o),i=new St(e),[a,c,l,d,p]=await Promise.all([r.fetchUserMergedPRCounts(n).catch(T=>{if(Ee(T))throw T;return v(W,`Failed to fetch merged PR counts: ${A(T)}`),Et()}),r.fetchUserClosedPRCounts(n).catch(T=>{if(Ee(T))throw T;return v(W,`Failed to fetch closed PR counts: ${A(T)}`),Et()}),r.fetchRecentlyClosedPRs().catch(T=>{if(Ee(T))throw T;return v(W,`Failed to fetch recently closed PRs: ${A(T)}`),[]}),r.fetchRecentlyMergedPRs().catch(T=>{if(Ee(T))throw T;return v(W,`Failed to fetch recently merged PRs: ${A(T)}`),[]}),i.fetchCommentedIssues().catch(T=>{if(Ee(T))throw T;let R=A(T);return R.includes("No GitHub username configured")?v(W,`Issue conversation tracking requires setup: ${R}`):v(W,`Issue conversation fetch failed: ${R}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${R}`}]}})]),m=p.issues;p.failures.length>0&&v(W,`${p.failures.length} issue conversation check(s) failed`);let{repos:w,monthlyCounts:g,monthlyOpenedCounts:y}=a,{repos:S,monthlyCounts:h,monthlyOpenedCounts:k}=c;return{prs:t,failures:s,mergedCounts:w,closedCounts:S,monthlyCounts:g,monthlyClosedCounts:h,openedFromMerged:y,openedFromClosed:k,recentlyClosedPRs:l,recentlyMergedPRs:d,commentedIssues:m}}async function bu(r,e,t,s){let o=U(),n=Object.values(o.getState().repoScores).filter(y=>y.mergedPRCount>0);if(t.size===0&&n.length>0)v(W,`Skipping stale repo reset: API returned 0 merged PR results but state has ${n.length} repo(s) with merges. Possible API issue.`);else for(let y of Object.values(o.getState().repoScores))t.has(y.repo)||o.updateRepoScore(y.repo,{mergedPRCount:0});let i=0;for(let[y,{count:S,lastMergedAt:h}]of t)try{o.updateRepoScore(y,{mergedPRCount:S,lastMergedAt:h||void 0})}catch(k){i++,v(W,`Failed to update merged count for ${y}: ${A(k)}`)}i===t.size&&t.size>0&&v(W,`[ALL_MERGED_COUNT_UPDATES_FAILED] All ${t.size} merged count update(s) failed.`);let a=Object.values(o.getState().repoScores).filter(y=>(y.closedWithoutMergeCount||0)>0);s.size===0&&a.length>0&&v(W,`API returned 0 closed PR results but state has ${a.length} repo(s) with closed PRs. Possible transient API issue.`);let c=0;for(let[y,S]of s)try{o.updateRepoScore(y,{closedWithoutMergeCount:S})}catch(h){c++,v(W,`Failed to update closed count for ${y}: ${A(h)}`)}c===s.size&&s.size>0&&v(W,`[ALL_CLOSED_COUNT_UPDATES_FAILED] All ${s.size} closed count update(s) failed.`);let l=Xt(e),d=0;for(let[y,S]of l)try{o.updateRepoScore(y,{signals:S})}catch(h){d++,v(W,`Failed to update signals for ${y}: ${A(h)}`)}d===l.size&&l.size>0&&v(W,`[ALL_SIGNAL_UPDATES_FAILED] All ${l.size} signal update(s) failed. This may indicate corrupted state.`);let p=Object.keys(o.getState().repoScores),m;try{m=await r.fetchRepoStarCounts(p)}catch(y){v(W,`Failed to fetch repo star counts: ${A(y)}`),v(W,"Dashboard minStars filter will use cached star counts (or be skipped for repos without cached data)."),m=new Map}let w=0;for(let[y,S]of m)try{o.updateRepoScore(y,{stargazersCount:S})}catch(h){w++,v(W,`Failed to update star count for ${y}: ${A(h)}`)}w===m.size&&m.size>0&&v(W,`[ALL_STAR_COUNT_UPDATES_FAILED] All ${m.size} star count update(s) failed.`);let g=0;for(let[y]of t)try{o.addTrustedProject(y)}catch(S){g++,v(W,`Failed to sync trusted project ${y}: ${A(S)}`)}g===t.size&&t.size>0&&v(W,`[ALL_TRUST_SYNCS_FAILED] All ${t.size} trusted project sync(s) failed. This may indicate corrupted state.`)}function yu(r,e,t,s){let o=U();try{let l=o.expireSnoozes();if(l.length>0){let d=l.map(p=>` - ${p}`).join(`
|
|
94
|
+
`);v(W,`${l.length} snoozed PR(s) expired and will resurface:
|
|
95
|
+
${d}`),o.save()}}catch(l){v(W,`Failed to expire/persist snoozes: ${A(l)}`)}let n=[],i=[],a=[];for(let l of e)o.isPRShelved(l.url)?xt.has(l.status)?(o.unshelvePR(l.url),i.push(st(l)),a.push(l)):n.push(st(l)):l.stalenessTier==="dormant"&&!xt.has(l.status)?n.push(st(l)):a.push(l);let c=r.generateDigest(e,t,s);return c.shelvedPRs=n,c.autoUnshelvedPRs=i,c.summary.totalActivePRs=a.length,o.setLastDigest(c),o.save(),{activePRs:a,shelvedPRs:n,autoUnshelvedPRs:i,digest:c}}function vu(r,e,t,s,o){let n=U(),i=Zt(e,n.getState().config.maxActivePRs,t.length),a=!1,c=s.filter(h=>{let k=n.getIssueDismissedAt(h.url);if(!k)return!0;if(h.status==="new_response"){let T=new Date(h.lastResponseAt).getTime(),R=new Date(k).getTime();if(isNaN(T)||isNaN(R))return v(W,`Invalid timestamp in dismiss check for ${h.url}, including issue`),!0;if(T>R)return v(W,`Auto-undismissing issue ${h.url}: new response at ${h.lastResponseAt} after dismiss at ${k}`),n.undismissIssue(h.url),a=!0,!0}return!1}),l=c.filter(h=>h.status==="new_response"),d=rs(r,i,l),p=new Set(Object.keys(n.getState().config.snoozedPRs??{}).filter(h=>n.isSnoozed(h))),m=e.filter(h=>{let k=n.getIssueDismissedAt(h.url);if(!k)return!0;let T=new Date(h.updatedAt).getTime(),R=new Date(k).getTime();return isNaN(T)||isNaN(R)?(v(W,`Invalid timestamp in PR dismiss check for ${h.url}, including PR`),!0):T>R?(v(W,`Auto-undismissing PR ${h.url}: new activity at ${h.updatedAt} after dismiss at ${k}`),n.undismissIssue(h.url),a=!0,!0):!1});if(a)try{n.save()}catch(h){v(W,`Failed to persist auto-undismissed state: ${A(h)}`)}let w=es(m,p);r.summary.totalNeedingAttention=w.length;let g=ss(r,w.length,l.length),y=ts(w,i,c),S=Qt(e);return{digest:r,capacity:i,summary:d,briefSummary:g,actionableIssues:w,actionMenu:y,commentedIssues:c,repoGroups:S,failures:o}}function _u(r){return{digest:ha(r.digest),capacity:r.capacity,summary:r.summary,briefSummary:r.briefSummary,actionableIssues:fa(r.actionableIssues),actionMenu:r.actionMenu,commentedIssues:r.commentedIssues,repoGroups:ba(r.repoGroups),failures:r.failures}}async function Ws(r){let e=await wa(r);return _u(e)}async function wa(r){let e=new Rt(r),{prs:t,failures:s,mergedCounts:o,closedCounts:n,monthlyCounts:i,monthlyClosedCounts:a,openedFromMerged:c,openedFromClosed:l,recentlyClosedPRs:d,recentlyMergedPRs:p,commentedIssues:m}=await fu(e,r);await bu(e,t,o,n),_o(t,i,a,c,l);let{activePRs:w,shelvedPRs:g,digest:y}=yu(e,t,d,p);return vu(y,w,g,m,s)}async function wu(){let r=fe();return Ws(r)}async function Eu(){let r=fe();return wa(r)}var W,is=O(()=>{"use strict";re();ie();me();Ls();ns();yo();re();W="daily"});var Ea={};ne(Ea,{runStatus:()=>Ru});async function Ru(r){let e=U(),t=e.getStats(),s=e.getState(),o=s.lastDigestAt||s.lastRunAt,{totalTracked:n,...i}=t,a={stats:i,lastRunAt:s.lastRunAt};return r.offline&&(a.offline=!0,a.lastUpdated=o),a}var Ra=O(()=>{"use strict";re()});var Ta={};ne(Ta,{runSearch:()=>Tu});async function Tu(r){let e=fe(),t=new Tt(e),s=await t.searchIssues({maxResults:r.maxResults}),o=U(),{config:n}=o.getState(),i=n.excludeRepos||[],a=n.aiPolicyBlocklist??dt.aiPolicyBlocklist??[],c={candidates:s.map(l=>{let d=o.getRepoScore(l.issue.repo);return{issue:{repo:l.issue.repo,number:l.issue.number,title:l.issue.title,url:l.issue.url,labels:l.issue.labels},recommendation:l.recommendation,reasonsToApprove:l.reasonsToApprove,reasonsToSkip:l.reasonsToSkip,searchPriority:l.searchPriority,viabilityScore:l.viabilityScore,repoScore:d?{score:d.score,mergedPRCount:d.mergedPRCount,closedWithoutMergeCount:d.closedWithoutMergeCount,isResponsive:d.signals?.isResponsive??!1,lastMergedAt:d.lastMergedAt}:void 0}}),excludedRepos:i,aiPolicyBlocklist:a};return t.rateLimitWarning&&(c.rateLimitWarning=t.rateLimitWarning),c}var Sa=O(()=>{"use strict";re()});function oe(r,e,t){if(e.test(r))return;let s={PR:"https://github.com/owner/repo/pull/123",issue:"https://github.com/owner/repo/issues/123","issue or PR":"https://github.com/owner/repo/issues/123 or https://github.com/owner/repo/pull/123"};throw new Y(`Invalid ${t} URL: ${r}. Expected format: ${s[t]}`)}function te(r){if(r.length>Ca)throw new Y(`URL exceeds maximum length of ${Ca} characters`);return r}function cs(r){if(r.length>Pa)throw new Y(`Message exceeds maximum length of ${Pa} characters`);return r}function $t(r){if(!r||r.trim().length===0)throw new Y("GitHub username cannot be empty.");let e=r.trim();if(e.length>ka)throw new Y(`GitHub username must be at most ${ka} characters (got ${e.length}).`);if(!Su.test(e))throw new Y("GitHub username can only contain alphanumeric characters and hyphens.");if(e.startsWith("-"))throw new Y("GitHub username cannot start with a hyphen.");if(e.endsWith("-"))throw new Y("GitHub username cannot end with a hyphen.");if(Cu.test(e))throw new Y("GitHub username cannot contain consecutive hyphens.");return e}var de,Js,as,Ca,Pa,ka,Su,Cu,Pe=O(()=>{"use strict";ie();de=/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+$/,Js=/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/,as=/^https:\/\/github\.com\/[^/]+\/[^/]+\/(issues|pull)\/\d+$/,Ca=2048,Pa=1e3;ka=39,Su=/^[a-zA-Z0-9-]+$/,Cu=/--/});var Aa={};ne(Aa,{runVet:()=>Pu});async function Pu(r){te(r.issueUrl),oe(r.issueUrl,Js,"issue");let e=fe(),s=await new Tt(e).vetIssue(r.issueUrl);return{issue:{repo:s.issue.repo,number:s.issue.number,title:s.issue.title,url:s.issue.url,labels:s.issue.labels},recommendation:s.recommendation,reasonsToApprove:s.reasonsToApprove,reasonsToSkip:s.reasonsToSkip,projectHealth:s.projectHealth,vettingResult:s.vettingResult}}var Oa=O(()=>{"use strict";re();Pe()});var Ro={};ne(Ro,{runTrack:()=>ku,runUntrack:()=>Au});async function ku(r){te(r.prUrl),oe(r.prUrl,de,"PR");let e=fe(),t=ve(e),s=ye(r.prUrl);if(!s||s.type!=="pull")throw new Error(`Invalid PR URL: ${r.prUrl}`);let{owner:o,repo:n,number:i}=s,{data:a}=await t.pulls.get({owner:o,repo:n,pull_number:i});return{pr:{repo:`${o}/${n}`,number:i,title:a.title,url:r.prUrl}}}async function Au(r){return te(r.prUrl),oe(r.prUrl,de,"PR"),{removed:!1,url:r.prUrl,message:"In v2, PRs are fetched fresh on each daily run \u2014 there is no local tracking list to remove from."}}var To=O(()=>{"use strict";re();Pe();Te()});var Ga={};ne(Ga,{runRead:()=>Ou});async function Ou(r){if(!r.all&&!r.prUrl)throw new Error("PR URL or --all flag required");return r.prUrl&&te(r.prUrl),r.all?{markedAsRead:0,all:!0,message:"In v2, PR read state is not tracked locally."}:{marked:!1,url:r.prUrl,message:"In v2, PR read state is not tracked locally."}}var xa=O(()=>{"use strict";Pe()});var Ks={};ne(Ks,{runClaim:()=>$u,runComments:()=>Gu,runPost:()=>xu});async function Gu(r){te(r.prUrl),oe(r.prUrl,de,"PR");let e=fe(),t=U(),s=ve(e),o=ye(r.prUrl);if(!o||o.type!=="pull")throw new Error("Invalid PR URL format");let{owner:n,repo:i,number:a}=o,{data:c}=await s.pulls.get({owner:n,repo:i,pull_number:a}),[l,d,p]=await Promise.all([Fe(h=>s.pulls.listReviewComments({owner:n,repo:i,pull_number:a,per_page:100,page:h})),Fe(h=>s.issues.listComments({owner:n,repo:i,issue_number:a,per_page:100,page:h})),Fe(h=>s.pulls.listReviews({owner:n,repo:i,pull_number:a,per_page:100,page:h}))]),m=t.getState().config.githubUsername,w=h=>!(!h.user||h.user.login===m||h.user.type==="Bot"&&!r.showBots),g=l.filter(w).sort((h,k)=>new Date(k.created_at).getTime()-new Date(h.created_at).getTime()),y=d.filter(w).sort((h,k)=>new Date(k.created_at).getTime()-new Date(h.created_at).getTime()),S=p.filter(h=>w(h)&&h.body&&h.body.trim()).sort((h,k)=>new Date(k.submitted_at||0).getTime()-new Date(h.submitted_at||0).getTime());return{pr:{title:c.title,state:c.state,mergeable:c.mergeable,head:c.head.ref,base:c.base.ref,url:c.html_url},reviews:S.map(h=>({user:h.user?.login,state:h.state,body:h.body??null,submittedAt:h.submitted_at??null})),reviewComments:g.map(h=>({user:h.user?.login,body:h.body,path:h.path,createdAt:h.created_at})),issueComments:y.map(h=>({user:h.user?.login,body:h.body,createdAt:h.created_at})),summary:{reviewCount:S.length,inlineCommentCount:g.length,discussionCommentCount:y.length}}}async function xu(r){if(te(r.url),oe(r.url,as,"issue or PR"),!r.message.trim())throw new Error("No message provided");cs(r.message);let e=fe(),t=ye(r.url);if(!t)throw new Error("Invalid GitHub URL format");let{owner:s,repo:o,number:n}=t,i=ve(e),{data:a}=await i.issues.createComment({owner:s,repo:o,issue_number:n,body:r.message});return{commentUrl:a.html_url,url:r.url}}async function $u(r){te(r.issueUrl),oe(r.issueUrl,Js,"issue");let e=fe(),t=r.message||"Hi! I'd like to work on this issue. Could you assign it to me?";cs(t);let s=ye(r.issueUrl);if(!s||s.type!=="issues")throw new Error("Invalid issue URL format (must be an issue, not a PR)");let{owner:o,repo:n,number:i}=s,a=ve(e),{data:c}=await a.issues.createComment({owner:o,repo:n,issue_number:i,body:t});try{let l=U();l.addIssue({id:i,url:r.issueUrl,repo:`${o}/${n}`,number:i,title:"(claimed)",status:"claimed",labels:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),vetted:!1}),l.save()}catch(l){console.error(`Warning: Comment posted on ${r.issueUrl} but failed to save to local state: ${l instanceof Error?l.message:l}`)}return{commentUrl:c.html_url,issueUrl:r.issueUrl}}var Ys=O(()=>{"use strict";re();Wt();Pe()});var $a={};ne($a,{runConfig:()=>Du});async function Du(r){let e=U(),t=e.getState().config;if(!r.key)return{config:t};if(!r.value)throw new Error("Value required");let s=r.value;switch(r.key){case"username":e.updateConfig({githubUsername:$t(s)});break;case"add-language":t.languages.includes(s)||e.updateConfig({languages:[...t.languages,s]});break;case"add-label":t.labels.includes(s)||e.updateConfig({labels:[...t.labels,s]});break;case"exclude-repo":{let o=s.split("/");if(o.length!==2||!o[0]||!o[1])throw new Error(`Invalid repo format "${s}". Use "owner/repo" format. To exclude an entire org, use: config exclude-org ${s}`);let n=s.toLowerCase();t.excludeRepos.some(i=>i.toLowerCase()===n)||(e.updateConfig({excludeRepos:[...t.excludeRepos,s]}),e.cleanupExcludedData([s],[]));break}case"exclude-org":{if(s.includes("/"))throw new Error(`Invalid org name "${s}". Use just the org name (e.g., "facebook"), not "owner/repo" format. To exclude a specific repo, use: config exclude-repo ${s}`);let o=t.excludeOrgs??[];o.some(n=>n.toLowerCase()===s.toLowerCase())||(e.updateConfig({excludeOrgs:[...o,s]}),e.cleanupExcludedData([],[s]));break}default:throw new Error(`Unknown config key: ${r.key}`)}return e.save(),{success:!0,key:r.key,value:s}}var Da=O(()=>{"use strict";re();Pe()});var Ia={};ne(Ia,{runInit:()=>Iu});async function Iu(r){$t(r.username);let e=U();return e.updateConfig({githubUsername:r.username}),e.save(),{username:r.username,message:"Username saved. Run `daily` to fetch your open PRs from GitHub."}}var Fa=O(()=>{"use strict";re();Pe()});var Co={};ne(Co,{runCheckSetup:()=>Uu,runSetup:()=>Fu});function So(r,e){let t=Number(r);if(!Number.isFinite(t)||t<1||!Number.isInteger(t))throw new Y(`Invalid value for ${e}: "${r}". Must be a positive integer.`);return t}async function Fu(r){let e=U(),t=e.getState().config;if(r.set&&r.set.length>0){let s={},o=[];for(let n of r.set){let[i,...a]=n.split("="),c=a.join("=");switch(i){case"username":$t(c),e.updateConfig({githubUsername:c}),s[i]=c;break;case"maxActivePRs":{let l=So(c,"maxActivePRs");e.updateConfig({maxActivePRs:l}),s[i]=String(l);break}case"dormantDays":{let l=So(c,"dormantDays");e.updateConfig({dormantThresholdDays:l}),s[i]=String(l);break}case"approachingDays":{let l=So(c,"approachingDays");e.updateConfig({approachingDormantDays:l}),s[i]=String(l);break}case"languages":e.updateConfig({languages:c.split(",").map(l=>l.trim())}),s[i]=c;break;case"labels":e.updateConfig({labels:c.split(",").map(l=>l.trim())}),s[i]=c;break;case"showHealthCheck":e.updateConfig({showHealthCheck:c!=="false"}),s[i]=c!=="false"?"true":"false";break;case"squashByDefault":c==="ask"?(e.updateConfig({squashByDefault:"ask"}),s[i]="ask"):(e.updateConfig({squashByDefault:c!=="false"}),s[i]=c!=="false"?"true":"false");break;case"minStars":{let l=Number(c);if(!Number.isFinite(l)||!Number.isInteger(l)||l<0)throw new Y(`Invalid value for minStars: "${c}". Must be a non-negative integer.`);e.updateConfig({minStars:l}),s[i]=String(l);break}case"includeDocIssues":e.updateConfig({includeDocIssues:c==="true"}),s[i]=c==="true"?"true":"false";break;case"aiPolicyBlocklist":{let l=c.split(",").map(m=>m.trim()).filter(Boolean),d=[],p=[];for(let m of l){let w=m.replace(/\s+/g,"");/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(w)?d.push(w):p.push(m)}if(p.length>0&&(o.push(`Warning: Skipping invalid entries (expected "owner/repo" format): ${p.join(", ")}`),s.aiPolicyBlocklist_invalidEntries=p.join(", ")),d.length===0&&l.length>0){o.push("Warning: All entries were invalid. Blocklist not updated."),s[i]="(all entries invalid)";break}e.updateConfig({aiPolicyBlocklist:d}),s[i]=d.length>0?d.join(", "):"(empty)";break}case"complete":c==="true"&&(e.markSetupComplete(),s[i]="true");break;default:o.push(`Unknown setting: ${i}`)}}return e.save(),{success:!0,settings:s,warnings:o.length>0?o:void 0}}return t.setupComplete&&!r.reset?{setupComplete:!0,config:{githubUsername:t.githubUsername,maxActivePRs:t.maxActivePRs,dormantThresholdDays:t.dormantThresholdDays,approachingDormantDays:t.approachingDormantDays,languages:t.languages,labels:t.labels}}:{setupRequired:!0,prompts:[{setting:"username",prompt:"What is your GitHub username?",current:t.githubUsername||null,required:!0,type:"string"},{setting:"maxActivePRs",prompt:"How many PRs do you want to work on at once?",current:t.maxActivePRs,default:10,type:"number"},{setting:"dormantDays",prompt:"After how many days of inactivity should a PR be considered dormant?",current:t.dormantThresholdDays,default:30,type:"number"},{setting:"approachingDays",prompt:"At how many days should we warn about approaching dormancy?",current:t.approachingDormantDays,default:25,type:"number"},{setting:"languages",prompt:"What programming languages do you want to contribute to?",current:t.languages,default:["typescript","javascript"],type:"list"},{setting:"labels",prompt:"What issue labels should we search for?",current:t.labels,default:["good first issue","help wanted"],type:"list"},{setting:"aiPolicyBlocklist",prompt:"Repos with anti-AI contribution policies to block (owner/repo, comma-separated)?",current:t.aiPolicyBlocklist??dt.aiPolicyBlocklist??null,default:["matplotlib/matplotlib"],type:"list"}]}}async function Uu(){let r=U();return{setupComplete:r.isSetupComplete(),username:r.getState().config.githubUsername}}var Po=O(()=>{"use strict";re();ie();Pe()});function N(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var Qs=O(()=>{"use strict"});var Ua,Ma=O(()=>{"use strict";Ua=`
|
|
96
96
|
:root, [data-theme="dark"] {
|
|
97
97
|
--bg-base: #080b10;
|
|
98
98
|
--bg-surface: rgba(22, 27, 34, 0.65);
|
|
@@ -852,7 +852,7 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
852
852
|
.health-item[data-hidden="true"] {
|
|
853
853
|
display: none;
|
|
854
854
|
}
|
|
855
|
-
`});function
|
|
855
|
+
`});function Xs(r,e=50){let t=r.length<=e?r:r.slice(0,e)+"...";return N(t)}function Zs(r,e,t,s,o){return r.map(n=>{let i=typeof s=="string"?s:s(n),a=N(i);return`
|
|
856
856
|
<div class="health-item ${e}" data-status="${e}" data-repo="${N(n.repo)}" data-title="${N(n.title.toLowerCase())}">
|
|
857
857
|
<div class="health-icon">
|
|
858
858
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -863,7 +863,7 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
863
863
|
<div class="health-title"><a href="${N(n.url)}" target="_blank">${N(n.repo)}#${n.number}</a> - ${a}</div>
|
|
864
864
|
<div class="health-meta">${o(n)}</div>
|
|
865
865
|
</div>
|
|
866
|
-
</div>`}).join("")}function
|
|
866
|
+
</div>`}).join("")}function La(r){return Xs(r.title)}var Ve,ja=O(()=>{"use strict";Qs();Ve={comment:'<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>',edit:'<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>',xCircle:'<circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/>',conflict:'<path d="M8 3v3a2 2 0 0 1-2 2H3"/><path d="M21 8h-3a2 2 0 0 1-2-2V3"/><path d="M3 16h3a2 2 0 0 1 2 2v3"/><path d="M16 21v-3a2 2 0 0 1 2-2h3"/>',checklist:'<path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/>',file:'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="12" y1="18" x2="12" y2="12"/><line x1="9" y1="15" x2="15" y2="15"/>',checkCircle:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/>',clock:'<circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/>',lock:'<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/>',infoCircle:'<circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/>',refresh:'<polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/>',box:'<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/>',bell:'<path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/>',gitMerge:'<circle cx="7" cy="18" r="3"/><circle cx="7" cy="6" r="3"/><circle cx="17" cy="12" r="3"/><line x1="7" y1="9" x2="7" y2="15"/><path d="M7 9c0 4 10 3 10 3"/>'}});function Na(r,e,t,s,o,n){let i=`
|
|
867
867
|
Chart.defaults.color = '#6e7681';
|
|
868
868
|
Chart.defaults.borderColor = 'rgba(48, 54, 61, 0.4)';
|
|
869
869
|
Chart.defaults.font.family = "'Geist', sans-serif";
|
|
@@ -893,15 +893,15 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
893
893
|
}
|
|
894
894
|
}
|
|
895
895
|
}
|
|
896
|
-
});`,a=(()=>{let{excludeRepos:l=[],excludeOrgs:
|
|
896
|
+
});`,a=(()=>{let{excludeRepos:l=[],excludeOrgs:d,minStars:p}=n.config,m=p??50,w=G=>{let D=G.toLowerCase();if(l.some(Z=>Z.toLowerCase()===D)||d?.some(Z=>Z.toLowerCase()===D.split("/")[0]))return!0;let q=(n.repoScores||{})[G];return!!nt(q?.stargazersCount,m)},g=Object.entries((()=>{let G={};for(let D of o.openPRs||[])w(D.repo)||(G[D.repo]||(G[D.repo]={active:0,merged:0,closed:0}),G[D.repo].active++);for(let[D,q]of Object.entries(n.repoScores||{}))w(D)||(G[D]||(G[D]={active:0,merged:0,closed:0}),G[D].merged=q.mergedPRCount,G[D].closed=q.closedWithoutMergeCount);return G})()).sort((G,D)=>{let q=G[1].merged+G[1].active+G[1].closed;return D[1].merged+D[1].active+D[1].closed-q}),y=g.slice(0,10),S=g.slice(10),h=g.reduce((G,[,D])=>G+D.merged+D.active+D.closed,0);if(S.length>0){let G=S.reduce((D,[,q])=>({active:D.active+q.active,merged:D.merged+q.merged,closed:D.closed+q.closed}),{active:0,merged:0,closed:0});y.push(["Other",G])}let k=y.map(([G])=>G==="Other"?"Other":G.split("/")[1]||G),T=y.map(([,G])=>G.merged),R=y.map(([,G])=>G.active),I=y.map(([,G])=>G.closed);return`
|
|
897
897
|
new Chart(document.getElementById('reposChart'), {
|
|
898
898
|
type: 'bar',
|
|
899
899
|
data: {
|
|
900
900
|
labels: ${JSON.stringify(k)},
|
|
901
901
|
datasets: [
|
|
902
|
-
{ label: 'Merged', data: ${JSON.stringify(
|
|
903
|
-
{ label: 'Active', data: ${JSON.stringify(
|
|
904
|
-
{ label: 'Closed', data: ${JSON.stringify(
|
|
902
|
+
{ label: 'Merged', data: ${JSON.stringify(T)}, backgroundColor: '#a855f7', borderRadius: 3 },
|
|
903
|
+
{ label: 'Active', data: ${JSON.stringify(R)}, backgroundColor: '#3fb950', borderRadius: 3 },
|
|
904
|
+
{ label: 'Closed', data: ${JSON.stringify(I)}, backgroundColor: '#484f58', borderRadius: 3 }
|
|
905
905
|
]
|
|
906
906
|
},
|
|
907
907
|
options: {
|
|
@@ -917,7 +917,7 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
917
917
|
callbacks: {
|
|
918
918
|
afterBody: function(context) {
|
|
919
919
|
const idx = context[0].dataIndex;
|
|
920
|
-
const total = ${JSON.stringify(
|
|
920
|
+
const total = ${JSON.stringify(T)}[idx] + ${JSON.stringify(R)}[idx] + ${JSON.stringify(I)}[idx];
|
|
921
921
|
const pct = ${h} > 0 ? ((total / ${h}) * 100).toFixed(1) : '0.0';
|
|
922
922
|
return pct + '% of all PRs';
|
|
923
923
|
}
|
|
@@ -925,8 +925,8 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
925
925
|
}
|
|
926
926
|
}
|
|
927
927
|
}
|
|
928
|
-
});`})(),c=(()=>{let l=new Date,
|
|
929
|
-
const timelineMonths = ${JSON.stringify(
|
|
928
|
+
});`})(),c=(()=>{let l=new Date,d=[];for(let p=5;p>=0;p--){let m=new Date(l.getFullYear(),l.getMonth()-p,1);d.push(`${m.getFullYear()}-${String(m.getMonth()+1).padStart(2,"0")}`)}return`
|
|
929
|
+
const timelineMonths = ${JSON.stringify(d)};
|
|
930
930
|
const openedData = ${JSON.stringify(s)};
|
|
931
931
|
const mergedData = ${JSON.stringify(e)};
|
|
932
932
|
const closedData = ${JSON.stringify(t)};
|
|
@@ -967,9 +967,9 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
967
967
|
},
|
|
968
968
|
interaction: { intersect: false, mode: 'index' }
|
|
969
969
|
}
|
|
970
|
-
});`})();return
|
|
970
|
+
});`})();return Mu+i+`
|
|
971
971
|
`+a+`
|
|
972
|
-
`+c}var
|
|
972
|
+
`+c}var Mu,Ha=O(()=>{"use strict";pt();Mu=`
|
|
973
973
|
// === Theme Toggle ===
|
|
974
974
|
(function() {
|
|
975
975
|
var html = document.documentElement;
|
|
@@ -1061,17 +1061,17 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1061
1061
|
statusFilter.addEventListener('change', applyFilters);
|
|
1062
1062
|
repoFilter.addEventListener('change', applyFilters);
|
|
1063
1063
|
})();
|
|
1064
|
-
`});function
|
|
1064
|
+
`});function qa(r,e,t,s,o,n,i=[]){let a=o.shelvedPRs||[],c=o.autoUnshelvedPRs||[],l=o.recentlyMergedPRs||[],d=new Set(a.map(g=>g.url)),p=(o.openPRs||[]).filter(g=>!d.has(g.url)),m=o.needsAddressingPRs||[],w=o.waitingOnMaintainerPRs||[];return`<!DOCTYPE html>
|
|
1065
1065
|
<html lang="en">
|
|
1066
1066
|
<head>
|
|
1067
1067
|
<meta charset="UTF-8">
|
|
1068
1068
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1069
1069
|
<title>OSS Autopilot - Mission Control</title>
|
|
1070
|
-
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
1070
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.5.1" integrity="sha384-jb8JQMbMoBUzgWatfe6COACi2ljcDdZQ2OxczGA3bGNeWe+6DChMTBJemed7ZnvJ" crossorigin="anonymous"></script>
|
|
1071
1071
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
1072
1072
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
1073
1073
|
<link href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
1074
|
-
<style>${
|
|
1074
|
+
<style>${Ua}
|
|
1075
1075
|
</style>
|
|
1076
1076
|
</head>
|
|
1077
1077
|
<body>
|
|
@@ -1141,32 +1141,22 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1141
1141
|
<input type="text" class="filter-search" id="searchInput" placeholder="Search by PR title..." />
|
|
1142
1142
|
<select class="filter-select" id="statusFilter">
|
|
1143
1143
|
<option value="all">All Statuses</option>
|
|
1144
|
-
<option value="needs-
|
|
1145
|
-
<option value="
|
|
1146
|
-
<option value="ci-failing">CI Failing</option>
|
|
1147
|
-
<option value="conflict">Merge Conflict</option>
|
|
1148
|
-
<option value="changes-addressed">Changes Addressed</option>
|
|
1149
|
-
<option value="waiting-maintainer">Waiting on Maintainer</option>
|
|
1150
|
-
<option value="ci-blocked">CI Blocked</option>
|
|
1151
|
-
<option value="ci-not-running">CI Not Running</option>
|
|
1152
|
-
<option value="incomplete-checklist">Incomplete Checklist</option>
|
|
1153
|
-
<option value="missing-files">Missing Files</option>
|
|
1154
|
-
<option value="needs-rebase">Needs Rebase</option>
|
|
1144
|
+
<option value="needs-addressing">Needs Addressing</option>
|
|
1145
|
+
<option value="waiting-on-maintainer">Waiting on Maintainer</option>
|
|
1155
1146
|
<option value="shelved">Shelved</option>
|
|
1156
1147
|
<option value="merged">Recently Merged</option>
|
|
1157
1148
|
<option value="closed">Recently Closed</option>
|
|
1158
1149
|
<option value="auto-unshelved">Auto-Unshelved</option>
|
|
1159
|
-
<option value="active">Active (No Issues)</option>
|
|
1160
1150
|
</select>
|
|
1161
1151
|
<select class="filter-select" id="repoFilter">
|
|
1162
1152
|
<option value="all">All Repositories</option>
|
|
1163
|
-
${(()=>{let g=new Set;for(let
|
|
1153
|
+
${(()=>{let g=new Set;for(let y of p)g.add(y.repo);for(let y of a)g.add(y.repo);for(let y of m)g.add(y.repo);for(let y of w)g.add(y.repo);for(let y of l)g.add(y.repo);for(let y of o.recentlyClosedPRs||[])g.add(y.repo);for(let y of c)g.add(y.repo);return Array.from(g).sort().map(y=>`<option value="${N(y)}">${N(y)}</option>`).join(`
|
|
1164
1154
|
`)})()}
|
|
1165
1155
|
</select>
|
|
1166
1156
|
<span class="filter-count" id="filterCount"></span>
|
|
1167
1157
|
</div>
|
|
1168
1158
|
|
|
1169
|
-
${
|
|
1159
|
+
${m.length>0?`
|
|
1170
1160
|
<section class="health-section">
|
|
1171
1161
|
<div class="health-header">
|
|
1172
1162
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-warning)" stroke-width="2">
|
|
@@ -1175,21 +1165,15 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1175
1165
|
<line x1="12" y1="17" x2="12.01" y2="17"/>
|
|
1176
1166
|
</svg>
|
|
1177
1167
|
<h2>Action Required</h2>
|
|
1178
|
-
<span class="health-badge">${
|
|
1168
|
+
<span class="health-badge">${m.length} issue${m.length!==1?"s":""}</span>
|
|
1179
1169
|
</div>
|
|
1180
1170
|
<div class="health-items">
|
|
1181
|
-
${
|
|
1182
|
-
${Pe(o.needsChangesPRs||[],"needs-changes",ae.edit,"Needs Changes",qe)}
|
|
1183
|
-
${Pe(o.ciFailingPRs||[],"ci-failing",ae.xCircle,"CI Failing",qe)}
|
|
1184
|
-
${Pe(o.mergeConflictPRs||[],"conflict",ae.conflict,"Merge Conflict",qe)}
|
|
1185
|
-
${Pe(o.incompleteChecklistPRs||[],"incomplete-checklist",ae.checklist,g=>`Incomplete Checklist${g.checklistStats?` (${g.checklistStats.checked}/${g.checklistStats.total})`:""}`,qe)}
|
|
1186
|
-
${Pe(o.missingRequiredFilesPRs||[],"missing-files",ae.file,"Missing Required Files",g=>g.missingRequiredFiles?N(g.missingRequiredFiles.join(", ")):Et(g.title))}
|
|
1187
|
-
${Pe(o.needsRebasePRs||[],"needs-rebase",ae.refresh,g=>`Needs Rebase${g.commitsBehindUpstream?` (${g.commitsBehindUpstream} behind)`:""}`,qe)}
|
|
1171
|
+
${Zs(m,"needs-addressing",Ve.xCircle,g=>g.displayLabel,g=>N(g.displayDescription))}
|
|
1188
1172
|
</div>
|
|
1189
1173
|
</section>
|
|
1190
1174
|
`:""}
|
|
1191
1175
|
|
|
1192
|
-
${
|
|
1176
|
+
${w.length>0?`
|
|
1193
1177
|
<section class="health-section waiting-section">
|
|
1194
1178
|
<div class="health-header">
|
|
1195
1179
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-info)" stroke-width="2">
|
|
@@ -1197,18 +1181,15 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1197
1181
|
<polyline points="12 6 12 12 16 14"/>
|
|
1198
1182
|
</svg>
|
|
1199
1183
|
<h2>Waiting on Others</h2>
|
|
1200
|
-
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${
|
|
1184
|
+
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${w.length} PR${w.length!==1?"s":""}</span>
|
|
1201
1185
|
</div>
|
|
1202
1186
|
<div class="health-items">
|
|
1203
|
-
${
|
|
1204
|
-
${Pe(o.waitingOnMaintainerPRs||[],"waiting-maintainer",ae.clock,"Waiting on Maintainer",qe)}
|
|
1205
|
-
${Pe(o.ciBlockedPRs||[],"ci-blocked",ae.lock,"CI Blocked",qe)}
|
|
1206
|
-
${Pe(o.ciNotRunningPRs||[],"ci-not-running",ae.infoCircle,"CI Not Running",qe)}
|
|
1187
|
+
${Zs(w,"waiting-on-maintainer",Ve.clock,g=>g.displayLabel,g=>N(g.displayDescription))}
|
|
1207
1188
|
</div>
|
|
1208
1189
|
</section>
|
|
1209
1190
|
`:""}
|
|
1210
1191
|
|
|
1211
|
-
${
|
|
1192
|
+
${m.length===0&&w.length===0?`
|
|
1212
1193
|
<section class="health-section">
|
|
1213
1194
|
<div class="health-header">
|
|
1214
1195
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-open)" stroke-width="2">
|
|
@@ -1218,31 +1199,31 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1218
1199
|
<h2>Health Status</h2>
|
|
1219
1200
|
</div>
|
|
1220
1201
|
<div class="health-empty">
|
|
1221
|
-
All PRs are
|
|
1202
|
+
All PRs are on track - no CI failures, conflicts, or pending responses
|
|
1222
1203
|
</div>
|
|
1223
1204
|
</section>
|
|
1224
1205
|
`:""}
|
|
1225
1206
|
|
|
1226
|
-
${
|
|
1207
|
+
${l.length>0?`
|
|
1227
1208
|
<section class="health-section" style="animation-delay: 0.15s;">
|
|
1228
1209
|
<div class="health-header">
|
|
1229
1210
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-merged)" stroke-width="2">
|
|
1230
|
-
${
|
|
1211
|
+
${Ve.gitMerge}
|
|
1231
1212
|
</svg>
|
|
1232
1213
|
<h2>Recently Merged</h2>
|
|
1233
|
-
<span class="health-badge" style="background: var(--accent-merged-dim); color: var(--accent-merged);">${
|
|
1214
|
+
<span class="health-badge" style="background: var(--accent-merged-dim); color: var(--accent-merged);">${l.length} merged</span>
|
|
1234
1215
|
</div>
|
|
1235
1216
|
<div class="health-items">
|
|
1236
|
-
${
|
|
1217
|
+
${l.map(g=>`
|
|
1237
1218
|
<div class="health-item" style="border-left-color: var(--accent-merged);" data-status="merged" data-repo="${N(g.repo)}" data-title="${N(g.title.toLowerCase())}">
|
|
1238
1219
|
<div class="health-icon" style="background: var(--accent-merged-dim); color: var(--accent-merged);">
|
|
1239
1220
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1240
|
-
${
|
|
1221
|
+
${Ve.gitMerge}
|
|
1241
1222
|
</svg>
|
|
1242
1223
|
</div>
|
|
1243
1224
|
<div class="health-content">
|
|
1244
1225
|
<div class="health-title"><a href="${N(g.url)}" target="_blank">${N(g.repo)}#${g.number}</a> - Merged</div>
|
|
1245
|
-
<div class="health-meta">${
|
|
1226
|
+
<div class="health-meta">${Xs(g.title)}${g.mergedAt?` \xB7 ${new Date(g.mergedAt).toLocaleDateString()}`:""}</div>
|
|
1246
1227
|
</div>
|
|
1247
1228
|
</div>
|
|
1248
1229
|
`).join("")}
|
|
@@ -1273,7 +1254,7 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1273
1254
|
</div>
|
|
1274
1255
|
<div class="health-content">
|
|
1275
1256
|
<div class="health-title"><a href="${N(g.url)}" target="_blank">${N(g.repo)}#${g.number}</a> - Closed</div>
|
|
1276
|
-
<div class="health-meta">${
|
|
1257
|
+
<div class="health-meta">${Xs(g.title)}${g.closedAt?` \xB7 ${new Date(g.closedAt).toLocaleDateString()}`:""}</div>
|
|
1277
1258
|
</div>
|
|
1278
1259
|
</div>
|
|
1279
1260
|
`).join("")}
|
|
@@ -1281,17 +1262,17 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1281
1262
|
</section>
|
|
1282
1263
|
`:""}
|
|
1283
1264
|
|
|
1284
|
-
${
|
|
1265
|
+
${c.length>0?`
|
|
1285
1266
|
<section class="health-section" style="animation-delay: 0.25s;">
|
|
1286
1267
|
<div class="health-header">
|
|
1287
1268
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-info)" stroke-width="2">
|
|
1288
|
-
${
|
|
1269
|
+
${Ve.bell}
|
|
1289
1270
|
</svg>
|
|
1290
1271
|
<h2>Auto-Unshelved</h2>
|
|
1291
|
-
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${
|
|
1272
|
+
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${c.length} unshelved</span>
|
|
1292
1273
|
</div>
|
|
1293
1274
|
<div class="health-items">
|
|
1294
|
-
${
|
|
1275
|
+
${Zs(c,"auto-unshelved",Ve.bell,g=>`Auto-Unshelved (${g.status.replace(/_/g," ")})`,La)}
|
|
1295
1276
|
</div>
|
|
1296
1277
|
</section>
|
|
1297
1278
|
`:""}
|
|
@@ -1300,7 +1281,7 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1300
1281
|
<section class="health-section" style="animation-delay: 0.3s;">
|
|
1301
1282
|
<div class="health-header">
|
|
1302
1283
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-info)" stroke-width="2">
|
|
1303
|
-
${
|
|
1284
|
+
${Ve.comment}
|
|
1304
1285
|
</svg>
|
|
1305
1286
|
<h2>Issue Conversations</h2>
|
|
1306
1287
|
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${i.length} repl${i.length!==1?"ies":"y"}</span>
|
|
@@ -1310,7 +1291,7 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1310
1291
|
<div class="health-item changes-addressed">
|
|
1311
1292
|
<div class="health-icon" style="background: var(--accent-info-dim); color: var(--accent-info);">
|
|
1312
1293
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1313
|
-
${
|
|
1294
|
+
${Ve.comment}
|
|
1314
1295
|
</svg>
|
|
1315
1296
|
</div>
|
|
1316
1297
|
<div class="health-content">
|
|
@@ -1359,17 +1340,17 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1359
1340
|
</div>
|
|
1360
1341
|
|
|
1361
1342
|
|
|
1362
|
-
${
|
|
1343
|
+
${p.length>0?`
|
|
1363
1344
|
<section class="pr-list-section">
|
|
1364
1345
|
<div class="pr-list-header">
|
|
1365
1346
|
<h2 class="pr-list-title">Active Pull Requests</h2>
|
|
1366
|
-
<span class="pr-count">${
|
|
1347
|
+
<span class="pr-count">${p.length} open</span>
|
|
1367
1348
|
</div>
|
|
1368
1349
|
<div class="pr-list">
|
|
1369
|
-
${
|
|
1370
|
-
<div class="pr-item ${
|
|
1350
|
+
${p.map(g=>{let y=g.status==="needs_addressing",S=g.stalenessTier!=="active",h=y?"has-issues":S?"stale":"",k=g.status==="needs_addressing"?"needs-addressing":"waiting-on-maintainer";return`
|
|
1351
|
+
<div class="pr-item ${h}" data-status="${k}" data-repo="${N(g.repo)}" data-title="${N(g.title.toLowerCase())}">
|
|
1371
1352
|
<div class="pr-status-indicator">
|
|
1372
|
-
${
|
|
1353
|
+
${y?`
|
|
1373
1354
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1374
1355
|
<circle cx="12" cy="12" r="10"/>
|
|
1375
1356
|
<line x1="12" y1="8" x2="12" y2="12"/>
|
|
@@ -1389,14 +1370,8 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1389
1370
|
<span class="pr-repo">${N(g.repo)}#${g.number}</span>
|
|
1390
1371
|
</div>
|
|
1391
1372
|
<div class="pr-badges">
|
|
1392
|
-
|
|
1393
|
-
${
|
|
1394
|
-
${g.ciStatus==="pending"?'<span class="badge badge-pending">CI Pending</span>':""}
|
|
1395
|
-
${g.hasMergeConflict?'<span class="badge badge-conflict">Merge Conflict</span>':""}
|
|
1396
|
-
${g.hasUnrespondedComment&&g.status==="changes_addressed"?'<span class="badge badge-changes-addressed">Changes Addressed</span>':""}
|
|
1397
|
-
${g.hasUnrespondedComment&&g.status!=="changes_addressed"&&g.status!=="failing_ci"?'<span class="badge badge-needs-response">Needs Response</span>':""}
|
|
1398
|
-
${g.reviewDecision==="changes_requested"?'<span class="badge badge-changes-requested">Changes Requested</span>':""}
|
|
1399
|
-
${h?`<span class="badge badge-stale">${g.daysSinceActivity}d inactive</span>`:""}
|
|
1373
|
+
<span class="badge ${y?"badge-ci-failing":"badge-passing"}">${N(g.displayLabel)}</span>
|
|
1374
|
+
${S?`<span class="badge badge-stale">${g.daysSinceActivity}d inactive</span>`:""}
|
|
1400
1375
|
</div>
|
|
1401
1376
|
</div>
|
|
1402
1377
|
<div class="pr-activity">
|
|
@@ -1423,18 +1398,18 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1423
1398
|
</section>
|
|
1424
1399
|
`}
|
|
1425
1400
|
|
|
1426
|
-
${
|
|
1401
|
+
${a.length>0?`
|
|
1427
1402
|
<section class="pr-list-section" style="margin-top: 1.25rem; opacity: 0.7;">
|
|
1428
1403
|
<div class="pr-list-header">
|
|
1429
1404
|
<h2 class="pr-list-title">Shelved Pull Requests</h2>
|
|
1430
|
-
<span class="pr-count" style="background: rgba(110, 118, 129, 0.15); color: var(--text-muted);">${
|
|
1405
|
+
<span class="pr-count" style="background: rgba(110, 118, 129, 0.15); color: var(--text-muted);">${a.length} shelved</span>
|
|
1431
1406
|
</div>
|
|
1432
1407
|
<div class="pr-list">
|
|
1433
|
-
${
|
|
1408
|
+
${a.map(g=>`
|
|
1434
1409
|
<div class="pr-item" data-status="shelved" data-repo="${N(g.repo)}" data-title="${N(g.title.toLowerCase())}">
|
|
1435
1410
|
<div class="pr-status-indicator" style="background: rgba(110, 118, 129, 0.1); color: var(--text-muted);">
|
|
1436
1411
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1437
|
-
${
|
|
1412
|
+
${Ve.box}
|
|
1438
1413
|
</svg>
|
|
1439
1414
|
</div>
|
|
1440
1415
|
<div class="pr-content">
|
|
@@ -1461,32 +1436,31 @@ ${p}`),o.save()}}catch(l){T(B,`Failed to expire/persist snoozes: ${A(l)}`)}let n
|
|
|
1461
1436
|
</div>
|
|
1462
1437
|
|
|
1463
1438
|
<script>
|
|
1464
|
-
${
|
|
1439
|
+
${Na(r,e,t,s,o,n)}
|
|
1465
1440
|
</script>
|
|
1466
1441
|
</body>
|
|
1467
|
-
</html>`}var
|
|
1468
|
-
`);for(let o of s)/^\s*- (?:~~)?\[/.test(o)&&(/~~|\*\*Done\*\*/.test(o)?t++:e++);return{availableCount:e,completedCount:t}}function Ha(){let r="",e="auto-detected",t=".claude/oss-autopilot/config.md";if(Tt.existsSync(t))try{let s=Tt.readFileSync(t,"utf-8"),o=ja(s);o&&Tt.existsSync(o)&&(r=o,e="configured")}catch(s){console.error("[STARTUP] Failed to read config:",A(s))}if(!r){let s=["open-source/potential-issue-list.md","oss/issue-list.md","issues.md"];for(let o of s)if(Tt.existsSync(o)){r=o,e="auto-detected";break}}if(r)try{let s=Tt.readFileSync(r,"utf-8"),{availableCount:o,completedCount:n}=Na(s);return{path:r,source:e,availableCount:o,completedCount:n}}catch(s){return console.error(`[STARTUP] Failed to read issue list at ${r}:`,A(s)),{path:r,source:e,availableCount:0,completedCount:0}}}function ns(r){let e,t;switch(process.platform){case"darwin":e="open",t=[r];break;case"win32":e="cmd",t=["/c","start","",r];break;default:e="xdg-open",t=[r];break}(0,La.execFile)(e,t,s=>{s&&console.error(`[STARTUP] Failed to open dashboard in browser: ${s.message}`)})}async function xu(){let r=St();if(!L().isSetupComplete())return{version:r,setupComplete:!1};let t=Qe();if(!t)return{version:r,setupComplete:!0,authError:'GitHub authentication required. Install GitHub CLI (https://cli.github.com/) and run "gh auth login", or set GITHUB_TOKEN.'};let s=await js(t),o,n,i=!1;function a(){try{return n=So(),ns(n),!0}catch(l){return console.error("[STARTUP] Static HTML dashboard fallback also failed:",A(l)),!1}}if(s.digest.summary.totalActivePRs>0)try{let l=await Ua();l?(o=l.url,ns(l.url),i=!0):(console.error("[STARTUP] Dashboard SPA assets not found, falling back to static HTML dashboard"),i=a())}catch(l){console.error("[STARTUP] SPA dashboard launch failed:",A(l)),i=a()}i&&(s.briefSummary+=" | Dashboard opened in browser");let c=Ha();return{version:r,setupComplete:!0,daily:s,dashboardUrl:o,dashboardPath:n,issueList:c}}var Tt,La,Co=O(()=>{"use strict";Tt=Q(require("fs"),1),La=require("child_process");se();ie();rs();Ma();Ys()});var za={};re(za,{findRunningDashboardServer:()=>Eo,getDashboardPidPath:()=>sr,isDashboardServerRunning:()=>Ks,readDashboardServerInfo:()=>Js,removeDashboardServerInfo:()=>er,startDashboardServer:()=>Uu,writeDashboardServerInfo:()=>Va});function sr(){return Me.join(Oe(),"dashboard-server.pid")}function Va(r){tt.writeFileSync(sr(),JSON.stringify(r),{mode:384})}function Js(){try{let r=tt.readFileSync(sr(),"utf-8"),e=JSON.parse(r);return typeof e!="object"||e===null||typeof e.pid!="number"||typeof e.port!="number"||typeof e.startedAt!="string"?(console.error("[DASHBOARD] PID file has invalid structure, ignoring"),null):e}catch(r){return r.code!=="ENOENT"&&console.error(`[DASHBOARD] Failed to read PID file: ${r.message}`),null}}function er(){try{tt.unlinkSync(sr())}catch(r){r.code!=="ENOENT"&&console.error(`[DASHBOARD] Failed to remove PID file: ${r.message}`)}}function Ks(r){return new Promise(e=>{let t=tr.get(`http://127.0.0.1:${r}/api/data`,{timeout:2e3},s=>{s.resume(),e(s.statusCode===200)});t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}async function Eo(){let r=Js();if(!r)return null;try{process.kill(r.pid,0)}catch(e){let t=e.code;return t!=="ESRCH"&&t!=="EPERM"&&console.error(`[DASHBOARD] Unexpected error checking PID ${r.pid}: ${e.message}`),er(),null}return await Ks(r.port)?{port:r.port,url:`http://localhost:${r.port}`}:(er(),null)}function Xs(r,e,t){let s=Pa(r,e),o=ka(s),{monthlyMerged:n,monthlyOpened:i,monthlyClosed:a}=Vs(e),c=os(r,e),l=t.filter(p=>p.status==="new_response");return{stats:c,prsByRepo:s,topRepos:o.map(([p,d])=>({repo:p,...d})),monthlyMerged:n,monthlyOpened:i,monthlyClosed:a,activePRs:r.openPRs||[],shelvedPRUrls:e.config.shelvedPRUrls||[],dismissedUrls:Object.keys(e.config.dismissedIssues||{}),recentlyMergedPRs:r.recentlyMergedPRs||[],recentlyClosedPRs:r.recentlyClosedPRs||[],autoUnshelvedPRs:r.autoUnshelvedPRs||[],commentedIssues:t,issueResponses:l}}function Fu(r,e=Du){return new Promise((t,s)=>{let o=[],n=0,i=!1;r.on("data",a=>{if(!i){if(n+=a.length,n>e){i=!0,r.destroy(),s(new Error("Body too large"));return}o.push(a)}}),r.on("end",()=>{i||t(Buffer.concat(o).toString("utf-8"))}),r.on("error",a=>{i||s(a)})})}function Zs(r,e,t){let s=JSON.stringify(t);r.writeHead(e,{"Content-Type":"application/json","Content-Length":Buffer.byteLength(s)}),r.end(s)}function ce(r,e,t){Zs(r,e,{error:t})}async function Uu(r){let{port:e,assetsDir:t,token:s,open:o}=r,n=L(),i=Me.resolve(t),a=n.getState().lastDigest,c=[];a||(console.error("No dashboard data available. Run the daily check first:"),console.error(" GITHUB_TOKEN=$(gh auth token) npm start -- daily"),process.exit(1));let l;try{l=Xs(a,n.getState(),c)}catch(k){console.error("Failed to build dashboard data from cached digest:",k),console.error("Your state data may be corrupted. Try running: daily --json"),process.exit(1)}let p=tr.createServer(async(k,E)=>{let w=k.method||"GET",U=k.url||"/";try{if(U==="/api/data"&&w==="GET"){Zs(E,200,l);return}if(U==="/api/action"&&w==="POST"){await d(k,E);return}if(U==="/api/refresh"&&w==="POST"){await m(k,E);return}if(w==="GET"){v(U,E);return}ce(E,405,"Method not allowed")}catch($){console.error("Unhandled request error:",w,U,$),E.headersSent||ce(E,500,"Internal server error")}});async function d(k,E){let w;try{let j=await Fu(k);w=JSON.parse(j)}catch(j){let H=j instanceof Error&&j.message==="Body too large";ce(E,H?413:400,H?"Request body too large":"Invalid JSON body");return}if(!w.action||!Ba.has(w.action)){ce(E,400,`Invalid action. Must be one of: ${[...Ba].join(", ")}`);return}if(!w.url||typeof w.url!="string"){ce(E,400,'Missing or invalid "url" field');return}let U=w.action==="dismiss"||w.action==="undismiss",$=U?wt:we,I=U?"issue or PR":"PR";try{ee(w.url),oe(w.url,$,I)}catch(j){j instanceof J?ce(E,400,j.message):(console.error("Unexpected error during URL validation:",j),ce(E,400,"Invalid URL"));return}if(w.action==="snooze"){let j=w.days??7;if(typeof j!="number"||!Number.isFinite(j)||j<=0){ce(E,400,"Snooze days must be a positive finite number");return}if(w.reason!==void 0)try{Rt(String(w.reason))}catch(H){H instanceof J?ce(E,400,H.message):(console.error("Unexpected error during message validation:",H),ce(E,400,"Invalid reason"));return}}try{switch(w.action){case"shelve":n.shelvePR(w.url),n.undismissIssue(w.url);break;case"unshelve":n.unshelvePR(w.url);break;case"snooze":n.snoozePR(w.url,w.reason||"Snoozed via dashboard",w.days??7);break;case"unsnooze":n.unsnoozePR(w.url);break;case"dismiss":n.dismissIssue(w.url,new Date().toISOString()),n.unshelvePR(w.url);break;case"undismiss":n.undismissIssue(w.url);break}n.save()}catch(j){console.error("Action failed:",w.action,w.url,j),ce(E,500,`Action failed: ${A(j)}`);return}l=Xs(a,n.getState(),c),Zs(E,200,l)}async function m(k,E){let w=s||Qe();if(!w){ce(E,401,"No GitHub token available. Cannot refresh data.");return}try{console.error("Refreshing dashboard data from GitHub...");let U=await Ro(w);a=U.digest,c=U.commentedIssues,l=Xs(a,n.getState(),c),Zs(E,200,l)}catch(U){console.error("Dashboard refresh failed:",U),ce(E,500,`Refresh failed: ${A(U)}`)}}function v(k,E){let w;try{w=decodeURIComponent(k.split("?")[0])}catch(H){console.error("Malformed URL received:",k,H),ce(E,400,"Malformed URL");return}if(w.includes("..")){ce(E,403,"Forbidden");return}let U=w==="/"?"index.html":w.replace(/^\/+/,""),$=Me.join(i,U);if(!$.startsWith(i+Me.sep)&&$!==i){ce(E,403,"Forbidden");return}try{tt.statSync($).isDirectory()&&($=Me.join(i,"index.html"))}catch(H){if(H.code==="ENOENT")$=Me.join(i,"index.html");else{console.error("Failed to stat file:",$,H),ce(E,500,"Internal server error");return}}let I=Me.extname($).toLowerCase(),j=Iu[I]||"application/octet-stream";try{let H=tt.readFileSync($);E.writeHead(200,{"Content-Type":j,"Content-Length":H.length}),E.end(H)}catch(H){H.code==="ENOENT"?ce(E,404,"Not found"):(console.error("Failed to serve static file:",$,H),ce(E,500,"Failed to read file"))}}let y=10,g=e;for(let k=0;k<y;k++)try{await new Promise((E,w)=>{p.once("error",w),p.listen(g,"127.0.0.1",()=>E())});break}catch(E){let w=E;if(w.code==="EADDRINUSE"&&k<y-1){console.error(`Port ${g} is in use, trying ${g+1}...`),g++;continue}console.error(`Failed to start server: ${w.message}`),process.exit(1)}Va({pid:process.pid,port:g,startedAt:new Date().toISOString()});let C=`http://localhost:${g}`;console.error(`Dashboard server running at ${C}`),s&&Ro(s).then(k=>{a=k.digest,c=k.commentedIssues,l=Xs(a,n.getState(),c),console.error("Background data refresh complete")}).catch(k=>{console.error("Background data refresh failed (serving cached data):",A(k))}),o&&ns(C);let h=()=>{console.error(`
|
|
1469
|
-
|
|
1470
|
-
`)
|
|
1471
|
-
`).filter(Boolean)
|
|
1472
|
-
`).filter(
|
|
1473
|
-
`).filter(
|
|
1474
|
-
`).filter(Boolean):[]}catch(o){P("local-repos",`find failed for scan path ${t}`,o);continue}for(let o of s){let n=je.dirname(o),i=Ku(n);if(!i)continue;let a=Qu(n);e[i]={path:n,exists:!0,currentBranch:a}}}return e}async function Yu(r){let e=L(),t=e.getState(),s=r.paths?.map(i=>je.resolve(i))??t.config.localRepoScanPaths??Ju.filter(i=>Po.existsSync(i));if(!r.scan&&t.localRepoCache){let i=t.localRepoCache;return{repos:i.repos,scanPaths:i.scanPaths,cachedAt:i.cachedAt,fromCache:!0}}let o=ec(s),n=new Date().toISOString();try{e.setLocalRepoCache({repos:o,scanPaths:s,cachedAt:n}),e.save()}catch(i){let a=A(i);console.error(`Warning: Failed to cache scan results: ${a}`)}return{repos:o,scanPaths:s,cachedAt:n,fromCache:!1}}var Po,je,Ct,nr,Ju,sc=O(()=>{"use strict";Po=Q(require("fs"),1),je=Q(require("path"),1),Ct=Q(require("os"),1),nr=require("child_process");se();ie();Ju=[je.join(Ct.homedir(),"Documents","oss"),je.join(Ct.homedir(),"dev"),je.join(Ct.homedir(),"projects"),je.join(Ct.homedir(),"src"),je.join(Ct.homedir(),"code"),je.join(Ct.homedir(),"repos")]});var ko={};re(ko,{PR_URL_PATTERN:()=>we,runShelve:()=>Xu,runUnshelve:()=>Zu});async function Xu(r){ee(r.prUrl),oe(r.prUrl,we,"PR");let e=L(),t=e.shelvePR(r.prUrl);return t&&e.save(),{shelved:t,url:r.prUrl}}async function Zu(r){ee(r.prUrl),oe(r.prUrl,we,"PR");let e=L(),t=e.unshelvePR(r.prUrl);return t&&e.save(),{unshelved:t,url:r.prUrl}}var Ao=O(()=>{"use strict";se();Ge()});var Oo={};re(Oo,{runDismiss:()=>ep,runUndismiss:()=>tp});async function ep(r){ee(r.url),oe(r.url,wt,"issue or PR");let e=L(),t=e.dismissIssue(r.url,new Date().toISOString());return t&&e.save(),{dismissed:t,url:r.url}}async function tp(r){ee(r.url),oe(r.url,wt,"issue or PR");let e=L(),t=e.undismissIssue(r.url);return t&&e.save(),{undismissed:t,url:r.url}}var $o=O(()=>{"use strict";se();Ge()});var Go={};re(Go,{runSnooze:()=>rp,runUnsnooze:()=>op});async function rp(r){ee(r.prUrl),oe(r.prUrl,we,"PR"),Rt(r.reason);let e=r.days??sp;if(!Number.isFinite(e)||e<=0)throw new Error("Snooze duration must be a positive number of days.");let t=L(),s=t.snoozePR(r.prUrl,r.reason,e);s&&t.save();let o=t.getSnoozeInfo(r.prUrl);return{snoozed:s,url:r.prUrl,days:e,reason:r.reason,expiresAt:o?.expiresAt}}async function op(r){ee(r.prUrl),oe(r.prUrl,we,"PR");let e=L(),t=e.unsnoozePR(r.prUrl);return t&&e.save(),{unsnoozed:t,url:r.prUrl}}var sp,xo=O(()=>{"use strict";se();Ge();sp=7});var nn=Q(on(),1),{program:hp,createCommand:fp,createArgument:bp,createOption:yp,CommanderError:vp,InvalidArgumentError:_p,InvalidOptionArgumentError:wp,Command:an,Argument:Rp,Option:Ep,Help:Tp}=nn.default;se();ie();ho();function X(r,e){let t=A(r);e?ua(t):console.error(`Error: ${t}`),process.exit(1)}function rc(r){let e=Object.entries(r).sort(([t],[s])=>t.localeCompare(s));for(let[t,s]of e){let o=s.currentBranch?` (${s.currentBranch})`:"";console.log(` ${t}${o}`),console.log(` ${s.path}`)}}var Do=[{name:"daily",register(r){r.command("daily").description("Run daily check on all tracked PRs").option("--json","Output as JSON").action(async e=>{try{if(e.json){let{runDaily:t}=await Promise.resolve().then(()=>(rs(),fo)),s=await t();Y(s)}else{let{runDailyForDisplay:t,printDigest:s}=await Promise.resolve().then(()=>(rs(),fo)),o=await t();s(o.digest,o.capacity,o.commentedIssues)}}catch(t){X(t,e.json)}})}},{name:"status",localOnly:!0,register(r){r.command("status").description("Show current status and stats").option("--json","Output as JSON").option("--offline","Use cached data only (no GitHub API calls)").action(async e=>{try{let{runStatus:t}=await Promise.resolve().then(()=>(ga(),da)),s=await t({offline:e.offline});e.json?Y(s):(console.log(`
|
|
1442
|
+
</html>`}var Ba=O(()=>{"use strict";Qs();Ma();ja();Ha();Qs();ns()});function Hu(r){return new Promise(e=>setTimeout(e,r))}async function za(r){if(!tr())return null;let t=await ko();if(t){let c=ls(),l=Be();if(c)if(c.version&&l!=="0.0.0"&&c.version!==l){console.error(`[STARTUP] Dashboard server version mismatch (running: ${c.version}, current: ${l}). Restarting...`);let d=!1;try{process.kill(c.pid,"SIGTERM"),d=!0}catch(p){p.code==="ESRCH"?d=!0:console.error(`[STARTUP] Could not kill outdated dashboard (PID ${c.pid}): ${p.message}`)}if(d)Dt();else return{url:t.url,port:t.port,alreadyRunning:!0}}else return{url:t.url,port:t.port,alreadyRunning:!0}}let s=r?.port??Lu,o=process.argv[1],n=(0,Va.spawn)("node",[o,"dashboard","serve","--port",String(s),"--no-open"],{detached:!0,stdio:"ignore"}),i=!1,a=!1;n.on("error",c=>{i=!0,console.error(`[STARTUP] Failed to spawn dashboard server: ${c.message}`)}),n.on("exit",c=>{a=!0,c!==0&&c!==null&&console.error(`[STARTUP] Dashboard server exited prematurely (code ${c})`)}),n.unref();for(let c=0;c<Nu;c++){if(await Hu(ju),i||a)return null;let l=ls();if(l&&await er(l.port))return{url:`http://localhost:${l.port}`,port:l.port,alreadyRunning:!1}}if(console.error("[STARTUP] Dashboard server failed to start within 5 seconds"),n.pid)try{process.kill(n.pid,"SIGTERM")}catch(c){c.code!=="ESRCH"&&console.error(`[STARTUP] Failed to kill orphan dashboard process (PID ${n.pid}): ${c.message}`)}return null}var Va,Lu,ju,Nu,Wa=O(()=>{"use strict";Va=require("child_process");Ao();sr();re();Lu=3e3,ju=200,Nu=25});var Xa={};ne(Xa,{countIssueListItems:()=>Ya,detectIssueList:()=>Qa,openInBrowser:()=>us,parseIssueListPathFromConfig:()=>Ka,runStartup:()=>qu});function Ka(r){let e=r.match(/^---\n([\s\S]*?)\n---/);if(!e)return;let s=e[1].match(/issueListPath:\s*["']?([^"'\n]+)["']?/);return s?s[1].trim():void 0}function Ya(r){let e=0,t=0,s=r.split(`
|
|
1443
|
+
`);for(let o of s)/^\s*- (?:~~)?\[/.test(o)&&(/~~|\*\*Done\*\*/.test(o)?t++:e++);return{availableCount:e,completedCount:t}}function Qa(){let r="",e="auto-detected",t=".claude/oss-autopilot/config.md";if(Ct.existsSync(t))try{let s=Ct.readFileSync(t,"utf-8"),o=Ka(s);o&&Ct.existsSync(o)&&(r=o,e="configured")}catch(s){console.error("[STARTUP] Failed to read config:",A(s))}if(!r){let s=["open-source/potential-issue-list.md","oss/issue-list.md","issues.md"];for(let o of s)if(Ct.existsSync(o)){r=o,e="auto-detected";break}}if(r)try{let s=Ct.readFileSync(r,"utf-8"),{availableCount:o,completedCount:n}=Ya(s);return{path:r,source:e,availableCount:o,completedCount:n}}catch(s){return console.error(`[STARTUP] Failed to read issue list at ${r}:`,A(s)),{path:r,source:e,availableCount:0,completedCount:0}}}function us(r){let e,t;switch(process.platform){case"darwin":e="open",t=[r];break;case"win32":e="cmd",t=["/c","start","",r];break;default:e="xdg-open",t=[r];break}(0,Ja.execFile)(e,t,s=>{s&&console.error(`[STARTUP] Failed to open dashboard in browser: ${s.message}`)})}async function qu(){let r=Be();if(!U().isSetupComplete())return{version:r,setupComplete:!1};let t=Xe();if(!t)return{version:r,setupComplete:!0,authError:'GitHub authentication required. Install GitHub CLI (https://cli.github.com/) and run "gh auth login", or set GITHUB_TOKEN.'};let s=await Ws(t),o,n,i=!1;function a(){try{return n=Go(),us(n),!0}catch(l){return console.error("[STARTUP] Static HTML dashboard fallback also failed:",A(l)),!1}}if(s.digest.summary.totalActivePRs>0)try{let l=await za();l?(o=l.url,us(l.url),i=!0):(console.error("[STARTUP] Dashboard SPA assets not found, falling back to static HTML dashboard"),i=a())}catch(l){console.error("[STARTUP] SPA dashboard launch failed:",A(l)),i=a()}i&&(s.briefSummary+=" | Dashboard opened in browser");let c=Qa();return{version:r,setupComplete:!0,daily:s,dashboardUrl:o,dashboardPath:n,issueList:c}}var Ct,Ja,Oo=O(()=>{"use strict";Ct=K(require("fs"),1),Ja=require("child_process");re();ie();is();Wa();sr()});var rc={};ne(rc,{findRunningDashboardServer:()=>ko,getDashboardPidPath:()=>ir,isDashboardServerRunning:()=>er,readDashboardServerInfo:()=>ls,removeDashboardServerInfo:()=>Dt,startDashboardServer:()=>Ku,writeDashboardServerInfo:()=>tc});function Wu(r,e){let t=e.config.statusOverrides;if(!t||Object.keys(t).length===0)return r;let s=U(),o=new Set(Object.keys(t)),n=!1,i=r.map(a=>{let c=s.getStatusOverride(a.url,a.updatedAt);return c?c.status===a.status?a:{...a,status:c.status}:(o.has(a.url)&&(n=!0),a)});if(n)try{s.save()}catch(a){v(ce,`Failed to persist auto-cleared overrides \u2014 they may reappear on restart: ${A(a)}`)}return i}function ir(){return Me.join(xe(),"dashboard-server.pid")}function tc(r){rt.writeFileSync(ir(),JSON.stringify(r),{mode:384})}function ls(){try{let r=rt.readFileSync(ir(),"utf-8"),e=JSON.parse(r);return typeof e!="object"||e===null||typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0||typeof e.port!="number"||typeof e.startedAt!="string"?(v(ce,"PID file has invalid structure, ignoring"),null):e}catch(r){return r.code!=="ENOENT"&&v(ce,`Failed to read PID file: ${r.message}`),null}}function Dt(){try{rt.unlinkSync(ir())}catch(r){r.code!=="ENOENT"&&v(ce,`Failed to remove PID file: ${r.message}`)}}function er(r){return new Promise(e=>{let t=nr.get(`http://127.0.0.1:${r}/api/data`,{timeout:2e3},s=>{s.resume(),e(s.statusCode===200)});t.on("error",()=>e(!1)),t.on("timeout",()=>{t.destroy(),e(!1)})})}async function ko(){let r=ls();if(!r)return null;try{process.kill(r.pid,0)}catch(e){let t=e.code;return t!=="ESRCH"&&t!=="EPERM"&&v(ce,`Unexpected error checking PID ${r.pid}: ${e.message}`),Dt(),null}return await er(r.port)?{port:r.port,url:`http://localhost:${r.port}`}:(Dt(),null)}function rr(r,e,t){let s=va(r,e),o=_a(s),{monthlyMerged:n,monthlyOpened:i,monthlyClosed:a}=Vs(e),c=os(r,e),l=t.filter(d=>d.status==="new_response");return{stats:c,prsByRepo:s,topRepos:o.map(([d,p])=>({repo:d,...p})),monthlyMerged:n,monthlyOpened:i,monthlyClosed:a,activePRs:Wu(r.openPRs||[],e),shelvedPRUrls:e.config.shelvedPRUrls||[],recentlyMergedPRs:r.recentlyMergedPRs||[],recentlyClosedPRs:r.recentlyClosedPRs||[],autoUnshelvedPRs:r.autoUnshelvedPRs||[],commentedIssues:t,issueResponses:l}}function Ju(r,e=Bu){return new Promise((t,s)=>{let o=[],n=0,i=!1;r.on("data",a=>{if(!i){if(n+=a.length,n>e){i=!0,r.destroy(),s(new Error("Body too large"));return}o.push(a)}}),r.on("end",()=>{i||t(Buffer.concat(o).toString("utf-8"))}),r.on("error",a=>{i||s(a)})})}function sc(r){r.setHeader("X-Content-Type-Options","nosniff"),r.setHeader("X-Frame-Options","DENY"),r.setHeader("Content-Security-Policy","default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'"),r.setHeader("Referrer-Policy","strict-origin-when-cross-origin")}function ec(r,e){let t=r.headers.origin;return t?[`http://localhost:${e}`,`http://127.0.0.1:${e}`].includes(t):!0}function or(r,e,t){sc(r),r.setHeader("Cache-Control","no-store");let s=JSON.stringify(t);r.writeHead(e,{"Content-Type":"application/json","Content-Length":Buffer.byteLength(s)}),r.end(s)}function ae(r,e,t){or(r,e,{error:t})}async function Ku(r){let{port:e,assetsDir:t,token:s,open:o}=r,n=U(),i=Me.resolve(t),a=n.getState().lastDigest,c=[];if(!a)throw new Error("No dashboard data available. Run the daily check first: GITHUB_TOKEN=$(gh auth token) npm start -- daily");let l;try{l=rr(a,n.getState(),c)}catch(k){throw new Error(`Failed to build dashboard data: ${A(k)}. State data may be corrupted \u2014 try running: daily --json`,{cause:k})}let d=nr.createServer(async(k,T)=>{let R=k.method||"GET",I=k.url||"/";try{if(I==="/api/data"&&R==="GET"){or(T,200,l);return}if(I==="/api/action"&&R==="POST"){if(!ec(k,y)){ae(T,403,"Invalid origin");return}await p(k,T);return}if(I==="/api/refresh"&&R==="POST"){if(!ec(k,y)){ae(T,403,"Invalid origin");return}await m(k,T);return}if(R==="GET"){w(I,T);return}ae(T,405,"Method not allowed")}catch(G){v(ce,`Unhandled request error: ${R} ${I} ${A(G)}`),T.headersSent||ae(T,500,"Internal server error")}});d.requestTimeout=Vu;async function p(k,T){let R;try{let I=await Ju(k);R=JSON.parse(I)}catch(I){let G=I instanceof Error&&I.message==="Body too large";ae(T,G?413:400,G?"Request body too large":"Invalid JSON body");return}if(!R.action||!Za.has(R.action)){ae(T,400,`Invalid action. Must be one of: ${[...Za].join(", ")}`);return}if(!R.url||typeof R.url!="string"){ae(T,400,'Missing or invalid "url" field');return}try{te(R.url),oe(R.url,de,"PR")}catch(I){I instanceof Y?ae(T,400,I.message):(v(ce,`Unexpected error during URL validation: ${A(I)}`),ae(T,400,"Invalid URL"));return}if(R.action==="override_status"&&(!R.status||R.status!=="needs_addressing"&&R.status!=="waiting_on_maintainer")){ae(T,400,'override_status requires a valid "status" field (needs_addressing or waiting_on_maintainer)');return}try{switch(R.action){case"shelve":n.shelvePR(R.url);break;case"unshelve":n.unshelvePR(R.url);break;case"override_status":{let I=R.status,D=(a?.openPRs||[]).find(q=>q.url===R.url)?.updatedAt||new Date().toISOString();n.setStatusOverride(R.url,I,D);break}}n.save()}catch(I){v(ce,`Action failed: ${R.action} ${R.url} ${A(I)}`),ae(T,500,"Action failed");return}l=rr(a,n.getState(),c),or(T,200,l)}async function m(k,T){let R=s||Xe();if(!R){ae(T,401,"No GitHub token available. Cannot refresh data.");return}try{v(ce,"Refreshing dashboard data from GitHub...");let I=await wo(R);a=I.digest,c=I.commentedIssues,l=rr(a,n.getState(),c),or(T,200,l)}catch(I){v(ce,`Dashboard refresh failed: ${A(I)}`),ae(T,500,"Refresh failed")}}function w(k,T){let R;try{R=decodeURIComponent(k.split("?")[0])}catch{v(ce,`Malformed URL received: ${k}`),ae(T,400,"Malformed URL");return}if(R.includes("..")){ae(T,403,"Forbidden");return}let I=R==="/"?"index.html":R.replace(/^\/+/,""),G=Me.join(i,I);if(!G.startsWith(i+Me.sep)&&G!==i){ae(T,403,"Forbidden");return}try{rt.statSync(G).isDirectory()&&(G=Me.join(i,"index.html"))}catch(Z){if(Z.code==="ENOENT")G=Me.join(i,"index.html");else{v(ce,`Failed to stat file: ${G}`),ae(T,500,"Internal server error");return}}let D=Me.extname(G).toLowerCase(),q=zu[D]||"application/octet-stream";try{let Z=rt.readFileSync(G);sc(T),T.writeHead(200,{"Content-Type":q,"Content-Length":Z.length,"Cache-Control":"public, max-age=3600"}),T.end(Z)}catch(Z){Z.code==="ENOENT"?ae(T,404,"Not found"):(v(ce,`Failed to serve static file: ${G}`),ae(T,500,"Failed to read file"))}}let g=10,y=e;for(let k=0;k<g;k++)try{await new Promise((T,R)=>{d.once("error",R),d.listen(y,"127.0.0.1",()=>T())});break}catch(T){let R=T;if(R.code==="EADDRINUSE"&&k<g-1){v(ce,`Port ${y} is in use, trying ${y+1}...`),y++;continue}throw new Error(`Failed to start server: ${R.message}`,{cause:T})}tc({pid:process.pid,port:y,startedAt:new Date().toISOString(),version:Be()});let S=`http://localhost:${y}`;v(ce,`Dashboard server running at ${S}`),s&&wo(s).then(k=>{a=k.digest,c=k.commentedIssues,l=rr(a,n.getState(),c),v(ce,"Background data refresh complete")}).catch(k=>{v(ce,`Background data refresh failed (serving cached data): ${A(k)}`)}),o&&us(S);let h=()=>{v(ce,"Shutting down dashboard server..."),Dt(),d.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),3e3).unref()};process.on("SIGINT",h),process.on("SIGTERM",h)}var nr,rt,Me,Za,ce,Bu,Vu,zu,Ao=O(()=>{"use strict";nr=K(require("http"),1),rt=K(require("fs"),1),Me=K(require("path"),1);re();ie();me();Pe();ns();Oo();Za=new Set(["shelve","unshelve","override_status"]),ce="dashboard-server",Bu=10240,Vu=3e4,zu={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".json":"application/json",".png":"image/png",".ico":"image/x-icon"}});var oc={};ne(oc,{resolveAssetsDir:()=>tr,serveDashboard:()=>Yu,writeDashboardFromState:()=>Go});function Go(){let e=U().getState(),t=e.lastDigest;if(!t)throw new Error("No digest data available. Run daily check first.");let{monthlyMerged:s,monthlyClosed:o,monthlyOpened:n}=Vs(e),i=os(t,e),a=qa(i,s,o,n,t,e),c=ys();return It.writeFileSync(c,a,{mode:420}),c}function tr(){let r=Le.resolve(__dirname,"../../dashboard/dist");if(It.existsSync(Le.join(r,"index.html")))return r;let e=Le.resolve(Le.dirname(process.argv[1]),"../../dashboard/dist");if(It.existsSync(Le.join(e,"index.html")))return e;try{let t=require.resolve("@oss-autopilot/dashboard/package.json"),s=Le.join(Le.dirname(t),"dist");if(It.existsSync(Le.join(s,"index.html")))return s}catch(t){t.code!=="MODULE_NOT_FOUND"&&console.error("Error resolving dashboard package:",t)}return null}async function Yu(r){let e=tr();e||(console.error("Could not find dashboard SPA assets."),console.error("Make sure packages/dashboard has been built:"),console.error(" cd packages/dashboard && pnpm run build"),process.exit(1));let t=Xe(),{startDashboardServer:s}=await Promise.resolve().then(()=>(Ao(),rc));await s({port:r.port,assetsDir:e,token:t,open:r.open})}var It,Le,sr=O(()=>{"use strict";It=K(require("fs"),1),Le=K(require("path"),1);re();ns();Ba()});var ac={};ne(ac,{parseIssueList:()=>ic,runParseList:()=>ed});function Qu(r){let e=r.match(/https:\/\/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);if(e)return{repo:e[1],number:parseInt(e[2],10),url:e[0]};let t=r.match(/https:\/\/github\.com\/([^/]+\/[^/]+)\/pull\/(\d+)/);return t?{repo:t[1],number:parseInt(t[2],10),url:t[0]}:null}function Xu(r){let e=r.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1");return e=e.replace(/https?:\/\/\S+/g,""),e=e.replace(/^\s*[-*+]\s*/,"").replace(/^\s*\d+\.\s*/,""),e=e.replace(/\[[ xX]\]\s*/,""),e=e.replace(/~~/g,""),e=e.replace(/\b(Done|DONE|done)\b/g,""),e=e.replace(/^[\s\-\u2013\u2014:]+/,"").replace(/[\s\-\u2013\u2014:]+$/,""),e.trim()}function Zu(r){return!!(/~~.+~~/.test(r)||/\[[xX]\]/.test(r)||/\bdone\b/i.test(r))}function ic(r){let e=r.split(`
|
|
1444
|
+
`),t=[],s=[],o="Uncategorized";for(let n of e){let i=n.match(/^#{1,3}\s+(.+)/);if(i){o=i[1].trim();continue}if(!n.trim()||!/^\s*[-*+]|\s*\d+\.|\s*\[[ xX]\]/.test(n))continue;let a=Qu(n);if(!a)continue;let c=Xu(n),l={repo:a.repo,number:a.number,title:c||`#${a.number}`,tier:o,url:a.url};Zu(n)?s.push(l):t.push(l)}return{available:t,completed:s,availableCount:t.length,completedCount:s.length}}async function ed(r){let e=nc.resolve(r.filePath);if(!ar.existsSync(e))throw new Error(`File not found: ${e}`);let t;try{t=ar.readFileSync(e,"utf-8")}catch(s){let o=A(s);throw new Error(`Failed to read file: ${o}`,{cause:s})}return ic(t)}var ar,nc,cc=O(()=>{"use strict";ar=K(require("fs"),1),nc=K(require("path"),1);ie()});var lc={};ne(lc,{runCheckIntegration:()=>nd});function rd(r){let e=ke.extname(r),t=ke.basename(r,e);return t==="index"?ke.basename(ke.dirname(r)):t}function od(r,e){let t=ke.dirname(r),s=[];for(let n of[".ts",".tsx",".js",".jsx"]){let i=ke.join(t,`index${n}`);e.includes(i)&&s.push(i)}let o=ke.dirname(t);for(let n of[".ts",".tsx",".js",".jsx"]){let i=ke.join(o,`index${n}`);e.includes(i)&&s.push(i)}return[...new Set(s)]}async function nd(r){let e=r.base,t;try{let a=(0,cr.execFileSync)("git",["diff","--name-only","--diff-filter=A",`${e}...HEAD`],{encoding:"utf-8",timeout:1e4}).trim();t=a?a.split(`
|
|
1445
|
+
`).filter(Boolean):[]}catch(a){let c=A(a);throw new Error(`Failed to run git diff: ${c}`,{cause:a})}let s=t.filter(a=>{let c=ke.extname(a);return td.has(c)?!sd.some(l=>l.test(a)):!1});if(s.length===0)return{newFiles:[],unreferencedCount:0};let o;try{o=(0,cr.execFileSync)("git",["ls-files"],{encoding:"utf-8",timeout:1e4}).trim().split(`
|
|
1446
|
+
`).filter(Boolean)}catch(a){P("check-integration","git ls-files failed, reference checking will be skipped",a),o=[]}let n=[];for(let a of s){let c=rd(a),l=a.replace(/\.[^.]+$/,""),d=[],p=[c];l.includes("/")&&p.push(l);for(let g of p)try{let y=(0,cr.execFileSync)("git",["grep","-l","--",g],{encoding:"utf-8",timeout:1e4}).trim();if(y){let S=y.split(`
|
|
1447
|
+
`).filter(h=>h!==a);d.push(...S)}}catch(y){let S=y&&typeof y=="object"&&"status"in y?y.status:void 0;if(S!==void 0&&S!==1){let h=A(y);P("check-integration",`git grep failed for "${g}": ${h}`)}}d=[...new Set(d)];let m=d.length>0,w={path:a,referencedBy:d,isIntegrated:m};m||(w.suggestedEntryPoints=od(a,o)),n.push(w)}let i=n.filter(a=>!a.isIntegrated).length;return{newFiles:n,unreferencedCount:i}}var ke,cr,td,sd,uc=O(()=>{"use strict";ke=K(require("path"),1),cr=require("child_process");re();ie();td=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".rb",".go",".rs",".java",".kt",".vue",".svelte"]),sd=[/^\./,/\.(test|spec|e2e)\.[^.]+$/,/\.(config|rc)\.[^.]+$/,/__tests__\//,/\.d\.ts$/,/\.md$/,/\.json$/,/\.ya?ml$/]});var pc={};ne(pc,{runLocalRepos:()=>ld,scanForRepos:()=>dc});function ad(r){try{let e=(0,lr.execFileSync)("git",["-C",r,"remote","get-url","origin"],{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim(),t=e.match(/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/);if(t)return t[1];let s=e.match(/github\.com[:/]([^/]+\/[^/]+?)(?:\.git)?$/);return s?s[1]:null}catch(e){return P("local-repos",`Failed to get GitHub remote for ${r}`,e),null}}function cd(r){try{return(0,lr.execFileSync)("git",["-C",r,"branch","--show-current"],{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim()||null}catch(e){return P("local-repos",`Failed to get current branch for ${r}`,e),null}}function dc(r){let e={};for(let t of r){if(!xo.existsSync(t))continue;let s;try{let o=(0,lr.execFileSync)("find",[t,"-maxdepth","4","-name",".git","-type","d"],{encoding:"utf-8",timeout:3e4,stdio:["pipe","pipe","pipe"]}).trim();s=o?o.split(`
|
|
1448
|
+
`).filter(Boolean):[]}catch(o){P("local-repos",`find failed for scan path ${t}`,o);continue}for(let o of s){let n=je.dirname(o),i=ad(n);if(!i)continue;let a=cd(n);e[i]={path:n,exists:!0,currentBranch:a}}}return e}async function ld(r){let e=U(),t=e.getState(),s=r.paths?.map(i=>je.resolve(i))??t.config.localRepoScanPaths??id.filter(i=>xo.existsSync(i));if(!r.scan&&t.localRepoCache){let i=t.localRepoCache;return{repos:i.repos,scanPaths:i.scanPaths,cachedAt:i.cachedAt,fromCache:!0}}let o=dc(s),n=new Date().toISOString();try{e.setLocalRepoCache({repos:o,scanPaths:s,cachedAt:n}),e.save()}catch(i){let a=A(i);console.error(`Warning: Failed to cache scan results: ${a}`)}return{repos:o,scanPaths:s,cachedAt:n,fromCache:!1}}var xo,je,Pt,lr,id,gc=O(()=>{"use strict";xo=K(require("fs"),1),je=K(require("path"),1),Pt=K(require("os"),1),lr=require("child_process");re();ie();id=[je.join(Pt.homedir(),"Documents","oss"),je.join(Pt.homedir(),"dev"),je.join(Pt.homedir(),"projects"),je.join(Pt.homedir(),"src"),je.join(Pt.homedir(),"code"),je.join(Pt.homedir(),"repos")]});var $o={};ne($o,{PR_URL_PATTERN:()=>de,runShelve:()=>ud,runUnshelve:()=>dd});async function ud(r){te(r.prUrl),oe(r.prUrl,de,"PR");let e=U(),t=e.shelvePR(r.prUrl);return t&&e.save(),{shelved:t,url:r.prUrl}}async function dd(r){te(r.prUrl),oe(r.prUrl,de,"PR");let e=U(),t=e.unshelvePR(r.prUrl);return t&&e.save(),{unshelved:t,url:r.prUrl}}var Do=O(()=>{"use strict";re();Pe()});var Io={};ne(Io,{runDismiss:()=>pd,runUndismiss:()=>gd});async function pd(r){te(r.url),oe(r.url,as,"issue or PR");let e=U(),t=e.dismissIssue(r.url,new Date().toISOString());return t&&e.save(),{dismissed:t,url:r.url}}async function gd(r){te(r.url),oe(r.url,as,"issue or PR");let e=U(),t=e.undismissIssue(r.url);return t&&e.save(),{undismissed:t,url:r.url}}var Fo=O(()=>{"use strict";re();Pe()});var Uo={};ne(Uo,{runSnooze:()=>hd,runUnsnooze:()=>fd});async function hd(r){te(r.prUrl),oe(r.prUrl,de,"PR"),cs(r.reason);let e=r.days??md;if(!Number.isFinite(e)||e<=0)throw new Error("Snooze duration must be a positive number of days.");let t=U(),s=t.snoozePR(r.prUrl,r.reason,e);s&&t.save();let o=t.getSnoozeInfo(r.prUrl);return{snoozed:s,url:r.prUrl,days:e,reason:r.reason,expiresAt:o?.expiresAt}}async function fd(r){te(r.prUrl),oe(r.prUrl,de,"PR");let e=U(),t=e.unsnoozePR(r.prUrl);return t&&e.save(),{unsnoozed:t,url:r.prUrl}}var md,Mo=O(()=>{"use strict";re();Pe();md=7});var Lo={};ne(Lo,{runClearOverride:()=>yd,runOverride:()=>bd});async function bd(r){if(te(r.prUrl),oe(r.prUrl,de,"PR"),!mc.includes(r.status))throw new Error(`Invalid status "${r.status}". Must be one of: ${mc.join(", ")}`);let e=r.status,t=U(),s=new Date().toISOString();return t.setStatusOverride(r.prUrl,e,s),t.save(),{url:r.prUrl,status:e}}async function yd(r){te(r.prUrl),oe(r.prUrl,de,"PR");let e=U(),t=e.clearStatusOverride(r.prUrl);return t&&e.save(),{url:r.prUrl,cleared:t}}var mc,jo=O(()=>{"use strict";re();Pe();mc=["needs_addressing","waiting_on_maintainer"]});var gn=K(pn(),1),{program:Ad,createCommand:Od,createArgument:Gd,createOption:xd,CommanderError:$d,InvalidArgumentError:Dd,InvalidOptionArgumentError:Id,Command:mn,Argument:Fd,Option:Ud,Help:Md}=gn.default;re();ie();yo();function X(r,e){let t=A(r);e?ya(t):console.error(`Error: ${t}`),process.exit(1)}function hc(r){let e=Object.entries(r).sort(([t],[s])=>t.localeCompare(s));for(let[t,s]of e){let o=s.currentBranch?` (${s.currentBranch})`:"";console.log(` ${t}${o}`),console.log(` ${s.path}`)}}var No=[{name:"daily",register(r){r.command("daily").description("Run daily check on all tracked PRs").option("--json","Output as JSON").action(async e=>{try{if(e.json){let{runDaily:t}=await Promise.resolve().then(()=>(is(),Eo)),s=await t();Q(s)}else{let{runDailyForDisplay:t,printDigest:s}=await Promise.resolve().then(()=>(is(),Eo)),o=await t();s(o.digest,o.capacity,o.commentedIssues)}}catch(t){X(t,e.json)}})}},{name:"status",localOnly:!0,register(r){r.command("status").description("Show current status and stats").option("--json","Output as JSON").option("--offline","Use cached data only (no GitHub API calls)").action(async e=>{try{let{runStatus:t}=await Promise.resolve().then(()=>(Ra(),Ea)),s=await t({offline:e.offline});e.json?Q(s):(console.log(`
|
|
1475
1449
|
\u{1F4CA} OSS Status
|
|
1476
1450
|
`),console.log(`Merged PRs: ${s.stats.mergedPRs}`),console.log(`Closed PRs: ${s.stats.closedPRs}`),console.log(`Merge Rate: ${s.stats.mergeRate}`),console.log(`Needs Response: ${s.stats.needsResponse}`),s.offline?(console.log(`
|
|
1477
1451
|
Last Updated: ${s.lastUpdated||"Never"}`),console.log("(Offline mode: showing cached data)")):console.log(`
|
|
1478
1452
|
Last Run: ${s.lastRunAt||"Never"}`),console.log(`
|
|
1479
|
-
Run with --json for structured output`))}catch(t){X(t,e.json)}})}},{name:"search",register(r){r.command("search [count]").description("Search for new issues to work on").option("--json","Output as JSON").action(async(e,t)=>{try{let{runSearch:s}=await Promise.resolve().then(()=>(
|
|
1453
|
+
Run with --json for structured output`))}catch(t){X(t,e.json)}})}},{name:"search",register(r){r.command("search [count]").description("Search for new issues to work on").option("--json","Output as JSON").action(async(e,t)=>{try{let{runSearch:s}=await Promise.resolve().then(()=>(Sa(),Ta)),o=5;if(e!==void 0){let a=Number(e);if(!Number.isFinite(a)||a<1||!Number.isInteger(a))throw new Error(`Invalid count "${e}". Must be a positive integer.`);o=a}let n=100;o>n&&(console.warn(`Capping search to ${n} results (requested: ${o})`),o=n),t.json||console.log(`
|
|
1480
1454
|
Searching for issues (max ${o})...
|
|
1481
|
-
`);let
|
|
1482
|
-
${
|
|
1483
|
-
`):console.log("No matching issues found.");return}
|
|
1484
|
-
${
|
|
1485
|
-
`),console.log(`Found ${
|
|
1486
|
-
`);for(let
|
|
1455
|
+
`);let i=await s({maxResults:o});if(t.json)Q(i);else{if(i.candidates.length===0){i.rateLimitWarning?console.warn(`
|
|
1456
|
+
${i.rateLimitWarning}
|
|
1457
|
+
`):console.log("No matching issues found.");return}i.rateLimitWarning&&console.warn(`
|
|
1458
|
+
${i.rateLimitWarning}
|
|
1459
|
+
`),console.log(`Found ${i.candidates.length} candidates:
|
|
1460
|
+
`);for(let a of i.candidates){let{issue:c,recommendation:l,reasonsToApprove:d,reasonsToSkip:p,viabilityScore:m}=a;console.log(`[${l.toUpperCase()}] ${c.repo}#${c.number}: ${c.title}`),console.log(` URL: ${c.url}`),console.log(` Viability: ${m}/100`),d.length>0&&console.log(` Approve: ${d.join(", ")}`),p.length>0&&console.log(` Skip: ${p.join(", ")}`),console.log("---")}}}catch(s){X(s,t.json)}})}},{name:"vet",register(r){r.command("vet <issue-url>").description("Vet a specific issue before working on it").option("--json","Output as JSON").action(async(e,t)=>{try{let{runVet:s}=await Promise.resolve().then(()=>(Oa(),Aa)),o=await s({issueUrl:e});if(t.json)Q(o);else{let{issue:n,recommendation:i,reasonsToApprove:a,reasonsToSkip:c}=o;console.log(`
|
|
1487
1461
|
Vetting issue: ${e}
|
|
1488
|
-
`),console.log(`[${i.toUpperCase()}] ${n.repo}#${n.number}: ${n.title}`),console.log(` URL: ${n.url}`),a.length>0&&console.log(` Approve: ${a.join(", ")}`),c.length>0&&console.log(` Skip: ${c.join(", ")}`)}}catch(s){X(s,t.json)}})}},{name:"track",register(r){r.command("track <pr-url>").description("Add a PR to track").option("--json","Output as JSON").action(async(e,t)=>{try{let{runTrack:s}=await Promise.resolve().then(()=>(
|
|
1489
|
-
PR: ${o.pr.repo}#${o.pr.number} - ${o.pr.title}`),console.log("Note: In v2, PRs are tracked automatically via the daily run."))}catch(s){X(s,t.json)}})}},{name:"untrack",localOnly:!0,register(r){r.command("untrack <pr-url>").description("Stop tracking a PR").option("--json","Output as JSON").action(async(e,t)=>{try{let{runUntrack:s}=await Promise.resolve().then(()=>(
|
|
1462
|
+
`),console.log(`[${i.toUpperCase()}] ${n.repo}#${n.number}: ${n.title}`),console.log(` URL: ${n.url}`),a.length>0&&console.log(` Approve: ${a.join(", ")}`),c.length>0&&console.log(` Skip: ${c.join(", ")}`)}}catch(s){X(s,t.json)}})}},{name:"track",register(r){r.command("track <pr-url>").description("Add a PR to track").option("--json","Output as JSON").action(async(e,t)=>{try{let{runTrack:s}=await Promise.resolve().then(()=>(To(),Ro)),o=await s({prUrl:e});t.json?Q(o):(console.log(`
|
|
1463
|
+
PR: ${o.pr.repo}#${o.pr.number} - ${o.pr.title}`),console.log("Note: In v2, PRs are tracked automatically via the daily run."))}catch(s){X(s,t.json)}})}},{name:"untrack",localOnly:!0,register(r){r.command("untrack <pr-url>").description("Stop tracking a PR").option("--json","Output as JSON").action(async(e,t)=>{try{let{runUntrack:s}=await Promise.resolve().then(()=>(To(),Ro)),o=await s({prUrl:e});t.json?Q(o):(console.log("Note: In v2, PRs are fetched fresh on each daily run \u2014 there is no local tracking list to remove from."),console.log("Use `shelve` to temporarily hide a PR from the daily summary."))}catch(s){X(s,t.json)}})}},{name:"read",localOnly:!0,register(r){r.command("read [pr-url]").description("Mark PR comments as read").option("--all","Mark all PRs as read").option("--json","Output as JSON").action(async(e,t)=>{try{let{runRead:s}=await Promise.resolve().then(()=>(xa(),Ga)),o=await s({prUrl:e,all:t.all});t.json?Q(o):console.log("Note: In v2, PR read state is not tracked locally. PRs are fetched fresh on each daily run.")}catch(s){X(s,t.json)}})}},{name:"comments",register(r){r.command("comments <pr-url>").description("Show all comments on a PR").option("--bots","Include bot comments").option("--json","Output as JSON").action(async(e,t)=>{try{let{runComments:s}=await Promise.resolve().then(()=>(Ys(),Ks)),o=await s({prUrl:e,showBots:t.bots});if(t.json)Q(o);else{let{formatRelativeTime:n}=await Promise.resolve().then(()=>(Te(),yn));console.log(`
|
|
1490
1464
|
Fetching comments for: ${e}
|
|
1491
1465
|
`),console.log(`## ${o.pr.title}
|
|
1492
1466
|
`),console.log(`**Status:** ${o.pr.state} | **Mergeable:** ${o.pr.mergeable??"checking..."}`),console.log(`**Branch:** ${o.pr.head} -> ${o.pr.base}`),console.log(`**URL:** ${o.pr.url}
|
|
@@ -1502,28 +1476,28 @@ Fetching comments for: ${e}
|
|
|
1502
1476
|
`).join(`
|
|
1503
1477
|
> `)}
|
|
1504
1478
|
`)}}o.reviewComments.length===0&&o.issueComments.length===0&&o.reviews.length===0&&console.log(`No comments from other users.
|
|
1505
|
-
`),console.log("---"),console.log(`**Summary:** ${o.summary.reviewCount} reviews, ${o.summary.inlineCommentCount} inline comments, ${o.summary.discussionCommentCount} discussion comments`)}}catch(s){X(s,t.json)}})}},{name:"post",register(r){r.command("post <url> [message...]").description("Post a comment to a PR or issue").option("--stdin","Read message from stdin").option("--json","Output as JSON").action(async(e,t,s)=>{try{let o;if(s.stdin){let a=[];for await(let c of process.stdin)a.push(c);o=Buffer.concat(a).toString("utf-8").trim()}else o=t.join(" ");let{runPost:n}=await Promise.resolve().then(()=>(
|
|
1479
|
+
`),console.log("---"),console.log(`**Summary:** ${o.summary.reviewCount} reviews, ${o.summary.inlineCommentCount} inline comments, ${o.summary.discussionCommentCount} discussion comments`)}}catch(s){X(s,t.json)}})}},{name:"post",register(r){r.command("post <url> [message...]").description("Post a comment to a PR or issue").option("--stdin","Read message from stdin").option("--json","Output as JSON").action(async(e,t,s)=>{try{let o;if(s.stdin){let a=[];for await(let c of process.stdin)a.push(c);o=Buffer.concat(a).toString("utf-8").trim()}else o=t.join(" ");let{runPost:n}=await Promise.resolve().then(()=>(Ys(),Ks)),i=await n({url:e,message:o});s.json?Q(i):console.log(`Comment posted: ${i.commentUrl}`)}catch(o){X(o,s.json)}})}},{name:"claim",register(r){r.command("claim <issue-url> [message...]").description("Claim an issue by posting a comment").option("--json","Output as JSON").action(async(e,t,s)=>{try{let{runClaim:o}=await Promise.resolve().then(()=>(Ys(),Ks)),n=t.length>0?t.join(" "):void 0,i=await o({issueUrl:e,message:n});s.json?Q(i):console.log(`Issue claimed: ${i.commentUrl}`)}catch(o){X(o,s.json)}})}},{name:"config",localOnly:!0,register(r){r.command("config [key] [value]").description("Show or update configuration").option("--json","Output as JSON").action(async(e,t,s)=>{try{let{runConfig:o}=await Promise.resolve().then(()=>(Da(),$a)),n=await o({key:e,value:t});s.json?Q(n):"config"in n?(console.log(`
|
|
1506
1480
|
\u2699\uFE0F Current Configuration:
|
|
1507
|
-
`),console.log(JSON.stringify(n.config,null,2))):console.log(`Set ${n.key} to: ${n.value}`)}catch(o){X(o,s.json)}})}},{name:"init",register(r){r.command("init <username>").description("Initialize with your GitHub username and import open PRs").option("--json","Output as JSON").action(async(e,t)=>{try{let{runInit:s}=await Promise.resolve().then(()=>(
|
|
1508
|
-
Username set to @${o.username}.`),console.log("Run `oss-autopilot daily` to fetch your open PRs from GitHub."))}catch(s){X(s,t.json)}})}},{name:"setup",localOnly:!0,register(r){r.command("setup").description("Interactive setup / configuration").option("--reset","Re-run setup even if already complete").option("--set <settings...>","Set specific values (key=value)").option("--json","Output as JSON").action(async e=>{try{let{runSetup:t}=await Promise.resolve().then(()=>(
|
|
1481
|
+
`),console.log(JSON.stringify(n.config,null,2))):console.log(`Set ${n.key} to: ${n.value}`)}catch(o){X(o,s.json)}})}},{name:"init",register(r){r.command("init <username>").description("Initialize with your GitHub username and import open PRs").option("--json","Output as JSON").action(async(e,t)=>{try{let{runInit:s}=await Promise.resolve().then(()=>(Fa(),Ia)),o=await s({username:e});t.json?Q(o):(console.log(`
|
|
1482
|
+
Username set to @${o.username}.`),console.log("Run `oss-autopilot daily` to fetch your open PRs from GitHub."))}catch(s){X(s,t.json)}})}},{name:"setup",localOnly:!0,register(r){r.command("setup").description("Interactive setup / configuration").option("--reset","Re-run setup even if already complete").option("--set <settings...>","Set specific values (key=value)").option("--json","Output as JSON").action(async e=>{try{let{runSetup:t}=await Promise.resolve().then(()=>(Po(),Co)),s=await t({reset:e.reset,set:e.set});if(e.json)Q(s);else if("success"in s){for(let[o,n]of Object.entries(s.settings))console.log(`\u2713 ${o}: ${n}`);if(s.warnings)for(let o of s.warnings)console.warn(o)}else if("setupComplete"in s&&s.setupComplete)console.log(`
|
|
1509
1483
|
\u2699\uFE0F OSS Autopilot Setup
|
|
1510
1484
|
`),console.log(`\u2713 Setup already complete!
|
|
1511
1485
|
`),console.log("Current settings:"),console.log(` GitHub username: ${s.config.githubUsername||"(not set)"}`),console.log(` Max active PRs: ${s.config.maxActivePRs}`),console.log(` Dormant threshold: ${s.config.dormantThresholdDays} days`),console.log(` Approaching dormant: ${s.config.approachingDormantDays} days`),console.log(` Languages: ${s.config.languages.join(", ")}`),console.log(` Labels: ${s.config.labels.join(", ")}`),console.log(`
|
|
1512
1486
|
Run 'setup --reset' to reconfigure.`);else if("setupRequired"in s){console.log(`
|
|
1513
1487
|
\u2699\uFE0F OSS Autopilot Setup
|
|
1514
1488
|
`),console.log("SETUP_REQUIRED"),console.log("---"),console.log(`Please configure the following settings:
|
|
1515
|
-
`);for(let o of s.prompts){console.log(`SETTING: ${o.setting}`),console.log(`PROMPT: ${o.prompt}`);let n=Array.isArray(o.current)?o.current.join(", "):o.current;if(console.log(`CURRENT: ${n??"(not set)"}`),o.required&&console.log("REQUIRED: true"),o.default!==void 0){let i=Array.isArray(o.default)?o.default.join(", "):o.default;console.log(`DEFAULT: ${i}`)}o.type&&console.log(`TYPE: ${o.type}`),console.log("")}console.log("---"),console.log("END_SETUP_PROMPTS")}}catch(t){X(t,e.json)}})}},{name:"checkSetup",localOnly:!0,register(r){r.command("checkSetup").description("Check if setup is complete").option("--json","Output as JSON").action(async e=>{try{let{runCheckSetup:t}=await Promise.resolve().then(()=>(
|
|
1489
|
+
`);for(let o of s.prompts){console.log(`SETTING: ${o.setting}`),console.log(`PROMPT: ${o.prompt}`);let n=Array.isArray(o.current)?o.current.join(", "):o.current;if(console.log(`CURRENT: ${n??"(not set)"}`),o.required&&console.log("REQUIRED: true"),o.default!==void 0){let i=Array.isArray(o.default)?o.default.join(", "):o.default;console.log(`DEFAULT: ${i}`)}o.type&&console.log(`TYPE: ${o.type}`),console.log("")}console.log("---"),console.log("END_SETUP_PROMPTS")}}catch(t){X(t,e.json)}})}},{name:"checkSetup",localOnly:!0,register(r){r.command("checkSetup").description("Check if setup is complete").option("--json","Output as JSON").action(async e=>{try{let{runCheckSetup:t}=await Promise.resolve().then(()=>(Po(),Co)),s=await t();e.json?Q(s):s.setupComplete?(console.log("SETUP_COMPLETE"),console.log(`username=${s.username}`)):console.log("SETUP_INCOMPLETE")}catch(t){X(t,e.json)}})}},{name:"serve",localOnly:!0,register(r){r.command("dashboard").description("Dashboard commands").command("serve").description("Start interactive dashboard server").option("--port <port>","Port to listen on","3000").option("--no-open","Do not open browser automatically").action(async t=>{try{let s=parseInt(t.port,10);(isNaN(s)||s<1||s>65535)&&(console.error(`Invalid port number: "${t.port}". Must be an integer between 1 and 65535.`),process.exit(1));let{serveDashboard:o}=await Promise.resolve().then(()=>(sr(),oc));await o({port:s,open:t.open})}catch(s){X(s)}})}},{name:"parse-issue-list",localOnly:!0,register(r){r.command("parse-issue-list <path>").description("Parse a markdown issue list into structured JSON").option("--json","Output as JSON").action(async(e,t)=>{try{let{runParseList:s}=await Promise.resolve().then(()=>(cc(),ac)),o=await s({filePath:e});if(t.json)Q(o);else{let i=(await import("path")).resolve(e);if(console.log(`
|
|
1516
1490
|
\u{1F4CB} Issue List: ${i}
|
|
1517
1491
|
`),console.log(`Available: ${o.availableCount} | Completed: ${o.completedCount}
|
|
1518
1492
|
`),o.available.length>0){console.log("--- Available ---");for(let a of o.available)console.log(` [${a.tier}] ${a.repo}#${a.number}: ${a.title}`)}if(o.completed.length>0){console.log(`
|
|
1519
|
-
--- Completed ---`);for(let a of o.completed)console.log(` [${a.tier}] ${a.repo}#${a.number}: ${a.title}`)}}}catch(s){X(s,t.json)}})}},{name:"check-integration",localOnly:!0,register(r){r.command("check-integration").description("Detect new files not referenced by the codebase").option("--base <branch>","Base branch to compare against","main").option("--json","Output as JSON").action(async e=>{try{let{runCheckIntegration:t}=await Promise.resolve().then(()=>(
|
|
1493
|
+
--- Completed ---`);for(let a of o.completed)console.log(` [${a.tier}] ${a.repo}#${a.number}: ${a.title}`)}}}catch(s){X(s,t.json)}})}},{name:"check-integration",localOnly:!0,register(r){r.command("check-integration").description("Detect new files not referenced by the codebase").option("--base <branch>","Base branch to compare against","main").option("--json","Output as JSON").action(async e=>{try{let{runCheckIntegration:t}=await Promise.resolve().then(()=>(uc(),lc)),s=await t({base:e.base});if(e.json)Q(s);else if(s.newFiles.length===0)console.log(`
|
|
1520
1494
|
No new code files to check.`);else{console.log(`
|
|
1521
1495
|
\u{1F50D} Integration Check (base: ${e.base})
|
|
1522
1496
|
`),console.log(`New files: ${s.newFiles.length} | Unreferenced: ${s.unreferencedCount}
|
|
1523
|
-
`);for(let o of s.newFiles){let n=o.isIntegrated?"\u2705":"\u26A0\uFE0F";console.log(`${n} ${o.path}`),o.isIntegrated?console.log(` Referenced by: ${o.referencedBy.join(", ")}`):(console.log(" Not referenced by any file"),o.suggestedEntryPoints&&o.suggestedEntryPoints.length>0&&console.log(` Suggested entry points: ${o.suggestedEntryPoints.join(", ")}`))}}}catch(t){X(t,e.json)}})}},{name:"local-repos",localOnly:!0,register(r){r.command("local-repos").description("Scan filesystem for local git clones").option("--scan","Force re-scan (ignores cache)").option("--paths <dirs...>","Directories to scan").option("--json","Output as JSON").action(async e=>{try{let{runLocalRepos:t}=await Promise.resolve().then(()=>(
|
|
1497
|
+
`);for(let o of s.newFiles){let n=o.isIntegrated?"\u2705":"\u26A0\uFE0F";console.log(`${n} ${o.path}`),o.isIntegrated?console.log(` Referenced by: ${o.referencedBy.join(", ")}`):(console.log(" Not referenced by any file"),o.suggestedEntryPoints&&o.suggestedEntryPoints.length>0&&console.log(` Suggested entry points: ${o.suggestedEntryPoints.join(", ")}`))}}}catch(t){X(t,e.json)}})}},{name:"local-repos",localOnly:!0,register(r){r.command("local-repos").description("Scan filesystem for local git clones").option("--scan","Force re-scan (ignores cache)").option("--paths <dirs...>","Directories to scan").option("--json","Output as JSON").action(async e=>{try{let{runLocalRepos:t}=await Promise.resolve().then(()=>(gc(),pc)),s=await t({scan:e.scan,paths:e.paths});e.json?Q(s):s.fromCache?(console.log(`
|
|
1524
1498
|
\u{1F4C1} Local Repos (cached ${s.cachedAt})
|
|
1525
|
-
`),
|
|
1526
|
-
`),
|
|
1499
|
+
`),hc(s.repos)):(console.log(`Found ${Object.keys(s.repos).length} repos:
|
|
1500
|
+
`),hc(s.repos))}catch(t){X(t,e.json)}})}},{name:"startup",localOnly:!0,register(r){r.command("startup").description("Run all pre-flight checks and daily fetch in one call").option("--json","Output as JSON").action(async e=>{try{let{runStartup:t}=await Promise.resolve().then(()=>(Oo(),Xa)),s=await t();e.json?Q(s):s.setupComplete?s.authError?console.error(`Error: ${s.authError}`):(console.log(`OSS Autopilot v${s.version}`),console.log(s.daily?.briefSummary??"")):console.log("Setup incomplete. Run /setup-oss first.")}catch(t){X(t,e.json)}})}},{name:"shelve",localOnly:!0,register(r){r.command("shelve <pr-url>").description("Shelve a PR (exclude from capacity and actionable issues)").option("--json","Output as JSON").action(async(e,t)=>{try{let{runShelve:s}=await Promise.resolve().then(()=>(Do(),$o)),o=await s({prUrl:e});t.json?Q(o):o.shelved?(console.log(`Shelved: ${e}`),console.log("This PR is now excluded from capacity and actionable issues."),console.log("It will auto-unshelve if a maintainer engages.")):console.log("PR is already shelved.")}catch(s){X(s,t.json)}})}},{name:"unshelve",localOnly:!0,register(r){r.command("unshelve <pr-url>").description("Unshelve a PR (include in capacity and actionable issues again)").option("--json","Output as JSON").action(async(e,t)=>{try{let{runUnshelve:s}=await Promise.resolve().then(()=>(Do(),$o)),o=await s({prUrl:e});t.json?Q(o):o.unshelved?(console.log(`Unshelved: ${e}`),console.log("This PR is now active again.")):console.log("PR was not shelved.")}catch(s){X(s,t.json)}})}},{name:"dismiss",localOnly:!0,register(r){r.command("dismiss <url>").description("Dismiss notifications for an issue or PR (resurfaces on new activity)").option("--json","Output as JSON").action(async(e,t)=>{try{let{runDismiss:s}=await Promise.resolve().then(()=>(Fo(),Io)),o=await s({url:e});t.json?Q(o):o.dismissed?(console.log(`Dismissed: ${e}`),console.log("Notifications are now muted."),console.log("New responses after this point will resurface automatically.")):console.log("Already dismissed.")}catch(s){X(s,t.json)}})}},{name:"undismiss",localOnly:!0,register(r){r.command("undismiss <url>").description("Undismiss an issue or PR (re-enable notifications)").option("--json","Output as JSON").action(async(e,t)=>{try{let{runUndismiss:s}=await Promise.resolve().then(()=>(Fo(),Io)),o=await s({url:e});t.json?Q(o):o.undismissed?(console.log(`Undismissed: ${e}`),console.log("Notifications are active again.")):console.log("Was not dismissed.")}catch(s){X(s,t.json)}})}},{name:"snooze",localOnly:!0,register(r){r.command("snooze <pr-url>").description("Snooze CI failure notifications for a PR").requiredOption("--reason <reason>",'Reason for snoozing (e.g., "upstream infrastructure issue")').option("--days <days>","Number of days to snooze (default: 7)","7").option("--json","Output as JSON").action(async(e,t)=>{try{let s=parseInt(t.days,10);if(!Number.isFinite(s)||s<1||!Number.isInteger(s))throw new Error(`Invalid days value "${t.days}". Must be a positive integer.`);let{runSnooze:o}=await Promise.resolve().then(()=>(Mo(),Uo)),n=await o({prUrl:e,reason:t.reason,days:s});t.json?Q(n):n.snoozed?(console.log(`Snoozed: ${e}`),console.log(`Reason: ${n.reason}`),console.log(`Duration: ${n.days} day${n.days===1?"":"s"}`),console.log(`Expires: ${n.expiresAt?new Date(n.expiresAt).toLocaleString():"unknown"}`),console.log("CI failure notifications are now muted for this PR.")):(console.log("PR is already snoozed."),n.expiresAt&&console.log(`Expires: ${new Date(n.expiresAt).toLocaleString()}`))}catch(s){X(s,t.json)}})}},{name:"unsnooze",localOnly:!0,register(r){r.command("unsnooze <pr-url>").description("Unsnooze a PR (re-enable CI failure notifications)").option("--json","Output as JSON").action(async(e,t)=>{try{let{runUnsnooze:s}=await Promise.resolve().then(()=>(Mo(),Uo)),o=await s({prUrl:e});t.json?Q(o):o.unsnoozed?(console.log(`Unsnoozed: ${e}`),console.log("CI failure notifications are active again for this PR.")):console.log("PR was not snoozed.")}catch(s){X(s,t.json)}})}},{name:"override",localOnly:!0,register(r){r.command("override <pr-url> <status>").description("Manually override PR status (needs_addressing or waiting_on_maintainer)").option("--json","Output as JSON").action(async(e,t,s)=>{try{let{runOverride:o}=await Promise.resolve().then(()=>(jo(),Lo)),n=await o({prUrl:e,status:t});s.json?Q(n):(console.log(`Override set: ${e} \u2192 ${n.status}`),console.log("This override will auto-clear when the PR has new activity."))}catch(o){X(o,s.json)}})}},{name:"clear-override",localOnly:!0,register(r){r.command("clear-override <pr-url>").description("Clear a manual status override for a PR").option("--json","Output as JSON").action(async(e,t)=>{try{let{runClearOverride:s}=await Promise.resolve().then(()=>(jo(),Lo)),o=await s({prUrl:e});t.json?Q(o):o.cleared?console.log(`Override cleared: ${e}`):console.log("No override was set for this PR.")}catch(s){X(s,t.json)}})}}];var vd=Be(),ur=new mn;ur.name("oss-autopilot").description("AI-powered autopilot for managing open source contributions").version(vd).option("--debug","Enable debug logging");var _d=new Set(No.filter(r=>r.localOnly).map(r=>r.name));for(let r of No)r.register(ur);ur.hook("preAction",async(r,e)=>{r.opts().debug&&(Ir(),P("cli",`Running command: ${e.name()}`));let s=e.name();_d.has(s)||await ws()||(console.error("Error: GitHub authentication required."),console.error(""),console.error("Option 1 (Recommended): Install and authenticate GitHub CLI"),console.error(" Install: https://cli.github.com/"),console.error(" Then run: gh auth login"),console.error(""),console.error("Option 2: Set GITHUB_TOKEN environment variable"),console.error(' export GITHUB_TOKEN="your-github-token-here"'),console.error(""),console.error("Then run your command again."),process.exit(1))});ur.parse();
|
|
1527
1501
|
/*! Bundled license information:
|
|
1528
1502
|
|
|
1529
1503
|
@octokit/request-error/dist-src/index.js:
|