@oss-autopilot/core 0.45.0 → 0.46.0
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.bundle.cjs +53 -1400
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/commands/dashboard-lifecycle.js +1 -1
- package/dist/commands/dashboard-process.d.ts +19 -0
- package/dist/commands/dashboard-process.js +93 -0
- package/dist/commands/dashboard-server.d.ts +1 -15
- package/dist/commands/dashboard-server.js +27 -84
- package/dist/commands/dashboard.d.ts +0 -10
- package/dist/commands/dashboard.js +1 -27
- package/dist/commands/index.d.ts +52 -8
- package/dist/commands/index.js +57 -9
- package/dist/commands/rate-limiter.d.ts +31 -0
- package/dist/commands/rate-limiter.js +36 -0
- package/dist/commands/startup.d.ts +1 -1
- package/dist/commands/startup.js +3 -19
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/utils.d.ts +0 -9
- package/dist/core/utils.js +0 -11
- package/dist/formatters/json.d.ts +0 -2
- package/package.json +1 -1
- package/dist/commands/dashboard-components.d.ts +0 -33
- package/dist/commands/dashboard-components.js +0 -57
- package/dist/commands/dashboard-formatters.d.ts +0 -12
- package/dist/commands/dashboard-formatters.js +0 -19
- package/dist/commands/dashboard-scripts.d.ts +0 -7
- package/dist/commands/dashboard-scripts.js +0 -274
- package/dist/commands/dashboard-styles.d.ts +0 -5
- package/dist/commands/dashboard-styles.js +0 -765
- package/dist/commands/dashboard-templates.d.ts +0 -12
- package/dist/commands/dashboard-templates.js +0 -470
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()],
|
|
6
|
-
`)}};function
|
|
2
|
+
"use strict";var Tc=Object.create;var mr=Object.defineProperty;var vc=Object.getOwnPropertyDescriptor;var Sc=Object.getOwnPropertyNames;var Cc=Object.getPrototypeOf,Pc=Object.prototype.hasOwnProperty;var P=(r,e)=>()=>(r&&(e=r(r=0)),e);var We=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),re=(r,e)=>{for(var t in e)mr(r,t,{get:e[t],enumerable:!0})},kc=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Sc(e))!Pc.call(r,o)&&o!==t&&mr(r,o,{get:()=>e[o],enumerable:!(s=vc(e,o))||s.enumerable});return r};var W=(r,e,t)=>(t=r!=null?Tc(Cc(r)):{},kc(e||!r||!r.__esModule?mr(t,"default",{value:r,enumerable:!0}):t,r));var jt=We(hr=>{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}},gr=class extends ds{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};hr.CommanderError=ds;hr.InvalidArgumentError=gr});var ms=We(br=>{var{InvalidArgumentError:Ac}=jt(),fr=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 Ac(`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 Oc(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}br.Argument=fr;br.humanReadableArgName=Oc});var wr=We(_r=>{var{humanReadableArgName:Gc}=ms(),yr=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=>Gc(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(d,m){return t.formatItem(d,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(d=>n(t.styleArgumentTerm(t.argumentTerm(d)),t.styleArgumentDescription(t.argumentDescription(d))));if(i=i.concat(this.formatItemList("Arguments:",c,t)),this.groupItems(e.options,t.visibleOptions(e),d=>d.helpGroupHeading??"Options:").forEach((d,m)=>{let R=d.map(w=>n(t.styleOptionTerm(t.optionTerm(w)),t.styleOptionDescription(t.optionDescription(w))));i=i.concat(this.formatItemList(m,R,t))}),t.showGlobalOptions){let d=t.visibleGlobalOptions(e).map(m=>n(t.styleOptionTerm(t.optionTerm(m)),t.styleOptionDescription(t.optionDescription(m))));i=i.concat(this.formatItemList("Global Options:",d,t))}return this.groupItems(e.commands,t.visibleCommands(e),d=>d.helpGroup()||"Commands:").forEach((d,m)=>{let R=d.map(w=>n(t.styleSubcommandTerm(t.subcommandTerm(w)),t.styleSubcommandDescription(t.subcommandDescription(w))));i=i.concat(this.formatItemList(m,R,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,p=(this.helpWidth??80)-t-c-2,d;return p<this.minWidthToWrap||o.preformatted(s)?d=s:d=o.boxWrap(s,p).replace(/\n/g,`
|
|
4
|
+
`+" ".repeat(t+c)),i+a+" ".repeat(c)+d.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()],u=this.displayWidth(c[0]);a.forEach(p=>{let d=this.displayWidth(p);if(u+d<=t){c.push(p),u+=d;return}n.push(c.join(""));let m=p.trimStart();c=[m],u=this.displayWidth(m)}),n.push(c.join(""))}),n.join(`
|
|
6
|
+
`)}};function en(r){let e=/\x1b\[\d*(;\d*)*m/g;return r.replace(e,"")}_r.Help=yr;_r.stripColor=en});var vr=We(Tr=>{var{InvalidArgumentError:$c}=jt(),Er=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=Dc(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 $c(`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}},Rr=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 Dc(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}}Tr.Option=Er;Tr.DualOptions=Rr});var rn=We(sn=>{function Ic(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 Fc(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=Ic(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=Fc});var cn=We(Ar=>{var xc=require("node:events").EventEmitter,Sr=require("node:child_process"),ze=require("node:path"),gs=require("node:fs"),V=require("node:process"),{Argument:Uc,humanReadableArgName:Lc}=ms(),{CommanderError:Cr}=jt(),{Help:Mc,stripColor:jc}=wr(),{Option:on,DualOptions:Nc}=vr(),{suggestSimilar:nn}=rn(),Pr=class r extends xc{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:()=>kr()??(V.stdout.isTTY&&V.stdout.hasColors?.()),getErrHasColors:()=>kr()??(V.stderr.isTTY&&V.stderr.hasColors?.()),stripColor:t=>jc(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 Mc,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 Uc(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 Cr(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,u)=>{let p=a.exec(c);return p?p[0]:u},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(
|
|
21
|
+
- ${o}`;throw new Error(n)}_executeSubCommand(e,t){t=t.slice();let s=!1,o=[".js",".ts",".tsx",".mjs",".cjs"];function n(p,d){let m=ze.resolve(p,d);if(gs.existsSync(m))return m;if(o.includes(ze.extname(d)))return;let R=o.find(w=>gs.existsSync(`${m}${w}`));if(R)return`${m}${R}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let p;try{p=gs.realpathSync(this._scriptPath)}catch{p=this._scriptPath}a=ze.resolve(ze.dirname(p),a)}if(a){let p=n(a,i);if(!p&&!e._executableFile&&this._scriptPath){let d=ze.basename(this._scriptPath,ze.extname(this._scriptPath));d!==this._name&&(p=n(a,`${d}-${e._name}`))}i=p||i}s=o.includes(ze.extname(i));let c;V.platform!=="win32"?s?(t.unshift(i),t=an(V.execArgv).concat(t),c=Sr.spawn(V.argv[0],t,{stdio:"inherit"})):c=Sr.spawn(i,t,{stdio:"inherit"}):(this._checkForMissingExecutable(i,a,e._name),t.unshift(i),t=an(V.execArgv).concat(t),c=Sr.spawn(V.execPath,t,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(d=>{V.on(d,()=>{c.killed===!1&&c.exitCode===null&&c.kill(d)})});let u=this._exitCallback;c.on("close",p=>{p=p??1,u?u(new Cr(p,"commander.executeSubCommandAsync","(close)")):V.exit(p)}),c.on("error",p=>{if(p.code==="ENOENT")this._checkForMissingExecutable(i,a,e._name);else if(p.code==="EACCES")throw new Error(`'${i}' not executable`);if(!u)V.exit(1);else{let d=new Cr(1,"commander.executeSubCommandAsync","(error)");d.nestedError=p,u(d)}}),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(p){return p.length>1&&p[0]==="-"}let i=p=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(p)?!this._getCommandAndAncestors().some(d=>d.options.map(m=>m.short).some(m=>/^-\d$/.test(m))):!1,a=null,c=null,u=0;for(;u<e.length||c;){let p=c??e[u++];if(c=null,p==="--"){o===s&&o.push(p),o.push(...e.slice(u));break}if(a&&(!n(p)||i(p))){this.emit(`option:${a.name()}`,p);continue}if(a=null,n(p)){let d=this._findOption(p);if(d){if(d.required){let m=e[u++];m===void 0&&this.optionMissingArgument(d),this.emit(`option:${d.name()}`,m)}else if(d.optional){let m=null;u<e.length&&(!n(e[u])||i(e[u]))&&(m=e[u++]),this.emit(`option:${d.name()}`,m)}else this.emit(`option:${d.name()}`);a=d.variadic?d:null;continue}}if(p.length>2&&p[0]==="-"&&p[1]!=="-"){let d=this._findOption(`-${p[1]}`);if(d){d.required||d.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${d.name()}`,p.slice(2)):(this.emit(`option:${d.name()}`),c=`-${p.slice(2)}`);continue}}if(/^--[^=]+=/.test(p)){let d=p.indexOf("="),m=this._findOption(p.slice(0,d));if(m&&(m.required||m.optional)){this.emit(`option:${m.name()}`,p.slice(d+1));continue}}if(o===t&&n(p)&&!(this.commands.length===0&&i(p))&&(o=s),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&s.length===0){if(this._findCommand(p)){t.push(p),s.push(...e.slice(u));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){t.push(p,...e.slice(u));break}else if(this._defaultCommandName){s.push(p,...e.slice(u));break}}if(this._passThroughOptions){o.push(p,...e.slice(u));break}o.push(p)}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
|
|
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 Nc(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),u=this.options.find(d=>d.negate&&a===d.attributeName()),p=this.options.find(d=>!d.negate&&a===d.attributeName());return u&&(u.presetArg===void 0&&c===!1||u.presetArg!==void 0&&c===u.presetArg)?u:p||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=>Lc(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=ze.basename(e,ze.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 kr(){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}Ar.Command=Pr;Ar.useColor=kr});var dn=We(Ge=>{var{Argument:un}=ms(),{Command:Or}=cn(),{CommanderError:Hc,InvalidArgumentError:ln}=jt(),{Help:qc}=wr(),{Option:pn}=vr();Ge.program=new Or;Ge.createCommand=r=>new Or(r);Ge.createOption=(r,e)=>new pn(r,e);Ge.createArgument=(r,e)=>new un(r,e);Ge.Command=Or;Ge.Option=pn;Ge.Argument=un;Ge.Help=qc;Ge.CommanderError=Hc;Ge.InvalidArgumentError=ln;Ge.InvalidOptionArgumentError=ln});function ut(r,e){return r===void 0||r<e}var lt,hs,Pt=P(()=>{"use strict";lt={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:{}},hs={version:2,activeIssues:[],repoScores:{},config:lt,events:[],lastRunAt:new Date().toISOString()}});function S(r){return r instanceof Error?r.message:String(r)}function we(r){if(r&&typeof r=="object"&&"status"in r){let e=r.status;return typeof e=="number"&&Number.isFinite(e)?e:void 0}}function pt(r){let e=we(r);return e===429?!0:e===403?S(r).toLowerCase().includes("rate limit"):!1}function be(r){let e=we(r);if(e===401||e===429)return!0;if(e===403){let t=S(r).toLowerCase();return t.includes("rate limit")||t.includes("abuse detection")}return!1}var Nt,Je,X,ae=P(()=>{"use strict";Nt=class extends Error{constructor(t,s){super(t);this.code=s;this.name="OssAutopilotError"}},Je=class extends Nt{constructor(e){super(e,"CONFIGURATION_ERROR"),this.name="ConfigurationError"}},X=class extends Nt{constructor(e){super(e,"VALIDATION_ERROR"),this.name="ValidationError"}}});function $r(){Gr=!0}function T(r,e,...t){if(!Gr)return;let s=new Date().toISOString();console.error(`[${s}] [DEBUG] [${r}] ${e}`,...t)}function de(r,e,...t){let s=new Date().toISOString();console.error(`[${s}] [INFO] [${r}] ${e}`,...t)}function b(r,e,...t){let s=new Date().toISOString();console.error(`[${s}] [WARN] [${r}] ${e}`,...t)}async function Dr(r,e,t){if(!Gr)return t();let s=performance.now();try{let o=await t(),n=(performance.now()-s).toFixed(0);return T(r,`${e} completed in ${n}ms`),o}catch(o){let n=(performance.now()-s).toFixed(0);throw T(r,`${e} failed after ${n}ms`),o}}var Gr,ue=P(()=>{"use strict";Gr=!1});var yn={};re(yn,{DEFAULT_CONCURRENCY:()=>st,byDateDescending:()=>fn,daysBetween:()=>$e,detectGitHubUsername:()=>_s,extractOwnerRepo:()=>gt,formatRelativeTime:()=>bs,getBackupDir:()=>mt,getCLIVersion:()=>He,getCacheDir:()=>fs,getDataDir:()=>Ie,getGitHubToken:()=>Qe,getGitHubTokenAsync:()=>ys,getStatePath:()=>ot,isOwnRepo:()=>Ke,parseGitHubUrl:()=>Ee,requireGitHubToken:()=>me,resetGitHubTokenCache:()=>bn,splitRepo:()=>kt});function Ie(){let r=rt.join(hn.homedir(),".oss-autopilot");return Ne.existsSync(r)||Ne.mkdirSync(r,{recursive:!0,mode:448}),r}function ot(){return rt.join(Ie(),"state.json")}function mt(){let r=rt.join(Ie(),"backups");return Ne.existsSync(r)||Ne.mkdirSync(r,{recursive:!0,mode:448}),r}function fs(){let r=rt.join(Ie(),"cache");return Ne.existsSync(r)||Ne.mkdirSync(r,{recursive:!0,mode:448}),r}function Ir(r,e){return Bc.test(r)&&Vc.test(e)}function Ee(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 Ir(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 Ir(s,o)?{owner:s,repo:o,number:parseInt(t[3],10),type:"issues"}:null}return null}function gt(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 Ir(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 kt(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 Ke(r,e){return r.toLowerCase()===e.toLowerCase()}function He(){try{let r=rt.join(rt.dirname(process.argv[1]),"..","package.json");return JSON.parse(Ne.readFileSync(r,"utf-8")).version}catch{return"0.0.0"}}function bs(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 Qe(){if(Se)return Se;if(Ht)return null;if(Ht=!0,process.env.GITHUB_TOKEN)return Se=process.env.GITHUB_TOKEN,Se;try{let r=(0,qt.execFileSync)("gh",["auth","token"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],timeout:2e3}).trim();if(r&&r.length>0)return Se=r,T(dt,"Using GitHub token from gh CLI"),Se}catch(r){T(dt,"gh auth token failed (CLI unavailable or not authenticated)",r)}return null}function me(){let r=Qe();if(!r)throw new Je(`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 En(){Se=null,qt=!1}async function Rs(){if(Se)return Se;if(qt)return null;if(qt=!0,process.env.GITHUB_TOKEN)return Se=process.env.GITHUB_TOKEN,Se;try{let r=await new Promise((e,t)=>{(0,Bt.execFile)("gh",["auth","token"],{encoding:"utf-8",timeout:2e3},(s,o)=>{s?t(s):e(o.trim())})});if(r&&r.length>0)return Se=r,T(ht,"Using GitHub token from gh CLI (async)"),Se}catch(r){T(ht,"gh auth token failed (CLI unavailable or not authenticated)",r)}return null}async function Es(){try{let r=await new Promise((e,t)=>{(0,Bt.execFile)("gh",["api","user","--jq",".login"],{encoding:"utf-8",timeout:5e3},(s,o)=>{s?t(s):e(o.trim())})});return r&&el.test(r)?(T(ht,`Detected GitHub username: ${r}`),r):(T(ht,`gh api user returned invalid username: "${r}"`),null)}catch(r){return T(ht,"detectGitHubUsername failed",r),null}}var qe,Xe,wn,Bt,at,ht,Se,qt,Xc,Zc,el,Re=A(()=>{"use strict";qe=Q(require("fs"),1),Xe=Q(require("path"),1),wn=Q(require("os"),1),Bt=require("child_process");ie();de();at=5,ht="utils",Se=null,qt=!1;Xc=/^[a-zA-Z0-9_-]+$/,Zc=/^[a-zA-Z0-9_.-]+$/;el=/^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$/});function ol(r){try{let e=JSON.parse(M.readFileSync(r,"utf-8"));return Date.now()-e.timestamp>rl}catch(e){return T(D,"Lock file unreadable or invalid JSON, treating as stale",e),!0}}function nl(r){let e=JSON.stringify({pid:process.pid,timestamp:Date.now()});try{M.writeFileSync(r,e,{flag:"wx"});return}catch(t){T(D,"Lock file already exists, checking staleness",t)}if(!ol(r))throw new Error("State file is locked by another process");try{M.unlinkSync(r)}catch(t){T(D,"Stale lock already removed by another process",t)}try{M.writeFileSync(r,e,{flag:"wx"})}catch(t){throw T(D,"Lock re-acquire failed (race condition)",t),new Error("State file is locked by another process",{cause:t})}}function il(r){try{JSON.parse(M.readFileSync(r,"utf-8")).pid===process.pid&&M.unlinkSync(r)}catch(e){T(D,"Lock file already removed or unreadable during release",e)}}function jr(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 Cn(r){T(D,"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 T(D,`Migration complete. Preserved ${Object.keys(s).length} repo scores.`),o}function I(){return Nr||(Nr=new Ts),Nr}var M,Ie,D,tl,Sn,sl,rl,Vt,yt,Ts,Nr,zt=A(()=>{"use strict";M=Q(require("fs"),1),Ie=Q(require("path"),1);gt();Re();ie();de();D="state",tl=2,Sn=1e3,sl=720*60*60*1e3,rl=3e4,Vt=Ie.join(process.cwd(),"data","state.json"),yt=Ie.join(process.cwd(),"data","backups");Ts=class r{state;inMemoryOnly;constructor(e=!1){this.inMemoryOnly=e,this.state=e?this.createFreshState():this.load()}createFreshState(){return{version:tl,activeIssues:[],repoScores:{},config:{...ys.config,setupComplete:!1,languages:[...ys.config.languages],labels:[...ys.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()}initializeWithDefaults(e){if(this.state.config.setupComplete){T(D,`Setup already complete, skipping initializeWithDefaults for "${e}"`);return}this.state.config.githubUsername=e,this.markSetupComplete(),T(D,`Initialized with defaults for user "${e}"`),this.save()}migrateFromLegacyLocation(){let e=ct();if(M.existsSync(e)||!M.existsSync(Vt))return!1;T(D,"Migrating state from ./data/ to ~/.oss-autopilot/...");try{if($e(),M.copyFileSync(Vt,e),T(D,`Migrated state file to ${e}`),M.existsSync(yt)){let s=ft(),o=M.readdirSync(yt).filter(n=>n.startsWith("state-")&&n.endsWith(".json"));for(let n of o){let i=Ie.join(yt,n),a=Ie.join(s,n);M.copyFileSync(i,a)}T(D,`Migrated ${o.length} backup files`)}if(M.unlinkSync(Vt),T(D,"Removed legacy state file"),M.existsSync(yt)){let s=M.readdirSync(yt);for(let o of s)M.unlinkSync(Ie.join(yt,o));M.rmdirSync(yt)}let t=Ie.dirname(Vt);return M.existsSync(t)&&M.readdirSync(t).length===0&&(M.rmdirSync(t),T(D,"Removed empty legacy data directory")),T(D,"Migration complete!"),!0}catch(t){y(D,`Failed to migrate state: ${O(t)}`);let s=ct();if(M.existsSync(s)&&M.existsSync(Vt))try{M.unlinkSync(s),T(D,"Cleaned up partial migration - removed incomplete new state file")}catch(o){y(D,"Could not clean up partial migration file"),T(D,"Partial migration cleanup failed",o)}return y(D,"To resolve this issue:"),y(D," 1. Ensure you have write permissions to ~/.oss-autopilot/"),y(D," 2. Check available disk space"),y(D," 3. Manually copy ./data/state.json to ~/.oss-autopilot/state.json"),y(D," 4. Or delete ./data/state.json to start fresh"),!1}}load(){this.migrateFromLegacyLocation();let e=ct();try{if(M.existsSync(e)){let t=M.readFileSync(e,"utf-8"),s=JSON.parse(t);if(!this.isValidState(s)){y(D,"Invalid state file structure, attempting to restore from backup...");let n=this.tryRestoreFromBackup();return n||(y(D,"No valid backup found, starting fresh"),this.createFreshState())}s.version===1&&(s=Cn(s),jr(e,JSON.stringify(s,null,2),384),T(D,"Migrated state saved"));let o=Object.keys(s.repoScores).length;return T(D,`Loaded state v${s.version}: ${o} repo scores tracked`),s}}catch(t){y(D,"Error loading state:",t),y(D,"Attempting to restore from backup...");let s=this.tryRestoreFromBackup();if(s)return s;y(D,"No valid backup found, starting fresh")}return T(D,"No existing state found, initializing..."),this.createFreshState()}tryRestoreFromBackup(){let e=ft();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)){T(D,`Successfully restored state from backup: ${s}`),i.version===1&&(i=Cn(i));let a=Object.keys(i.repoScores).length;T(D,`Restored state v${i.version}: ${a} repo scores`);let c=ct();return jr(c,JSON.stringify(i,null,2),384),T(D,"Restored backup written to main state file"),i}}catch(n){y(D,`Backup ${s} is corrupted, trying next...`),T(D,`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=ct(),t=e+".lock",s=ft();nl(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()}jr(e,JSON.stringify(this.state,null,2),384),T(D,"State saved successfully")}finally{il(t)}}cleanupBackups(){let e=ft();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){y(D,`Could not delete old backup ${s}:`,O(o))}}catch(t){y(D,"Could not clean up backups:",O(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>Sn&&(this.state.events=this.state.events.slice(-Sn))}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)){T(D,`Issue ${e.url} already tracked`);return}this.state.activeIssues.push(e),T(D,`Added issue: ${e.repo}#${e.number}`)}addTrustedProject(e){this.state.config.trustedProjects.includes(e)||(this.state.config.trustedProjects.push(e),T(D,`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]))}cleanupExcludedData(e,t){let s=i=>r.matchesExclusion(i,e,t),o=this.state.config.trustedProjects.length;this.state.config.trustedProjects=this.state.config.trustedProjects.filter(i=>!s(i));let n=o-this.state.config.trustedProjects.length;n>0&&T(D,`Removed ${n} trusted project(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(),T(D,`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)?(y(D,`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())?y(D,`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(),T(D,`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()}),T(D,`Incremented merged count for ${e}: ${s}`)}incrementClosedCount(e){let s=(this.state.repoScores[e]?.closedWithoutMergeCount??0)+1;this.updateRepoScore(e,{closedWithoutMergeCount:s}),T(D,`Incremented closed count for ${e}: ${s}`)}markRepoHostile(e){this.updateRepoScore(e,{signals:{hasHostileComments:!0}}),T(D,`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<=sl:(y(D,`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 of Object.values(this.state.repoScores))Qe(i.stargazersCount,this.state.config.minStars??50)||(s++,e+=i.mergedPRCount,t+=i.closedWithoutMergeCount);let o=e+t,n=o>0?e/o*100:0;return{mergedPRs:e,closedPRs:t,activeIssues:0,trustedProjects:this.state.config.trustedProjects.length,mergeRate:n.toFixed(1)+"%",totalTracked:s,needsResponse:0}}},Nr=null});function lt(){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 Wt=A(()=>{});function Ss(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)=>Ss.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 Pn=A(()=>{});function kn(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 An=A(()=>{});function On(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 Gn=A(()=>{});function Dn(r,e,t){let s=xn(On,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]=xn(kn,null).apply(null,n)})}function al(){let r=Symbol("Singular"),e={registry:{}},t=Ss.bind(null,e,r);return Dn(t,e,r),t}function cl(){let r={registry:{}},e=Ss.bind(null,r);return Dn(e,r),e}var $n,xn,In,Fn=A(()=>{Pn();An();Gn();$n=Function.bind,xn=$n.bind($n);In={Singular:al,Collection:cl}});function pl(r){return r?Object.keys(r).reduce((e,t)=>(e[t.toLowerCase()]=r[t],e),{}):{}}function gl(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 Ln(r,e){let t=Object.assign({},r);return Object.keys(e).forEach(s=>{gl(e[s])?s in r?t[s]=Ln(r[s],e[s]):Object.assign(t,{[s]:e[s]}):Object.assign(t,{[s]:e[s]})}),t}function Un(r){for(let e in r)r[e]===void 0&&delete r[e];return r}function qr(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=pl(t.headers),Un(t),Un(t.headers);let s=Ln(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 ml(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 fl(r){return r.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g,"").split(/,/)}function bl(r){let e=r.match(hl);return e?e.map(fl).reduce((t,s)=>t.concat(s),[]):[]}function Mn(r,e){let t={__proto__:null};for(let s of Object.keys(r))e.indexOf(s)===-1&&(t[s]=r[s]);return t}function jn(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 $t(r){return encodeURIComponent(r).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function Jt(r,e,t){return e=r==="+"||r==="#"?jn(e):$t(e),t?$t(t)+"="+e:e}function Gt(r){return r!=null}function Hr(r){return r===";"||r==="&"||r==="?"}function yl(r,e,t,s){var o=r[t],n=[];if(Gt(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(Jt(e,o,Hr(e)?t:""));else if(s==="*")Array.isArray(o)?o.filter(Gt).forEach(function(i){n.push(Jt(e,i,Hr(e)?t:""))}):Object.keys(o).forEach(function(i){Gt(o[i])&&n.push(Jt(e,o[i],i))});else{let i=[];Array.isArray(o)?o.filter(Gt).forEach(function(a){i.push(Jt(e,a))}):Object.keys(o).forEach(function(a){Gt(o[a])&&(i.push($t(a)),i.push(Jt(e,o[a].toString())))}),Hr(e)?n.push($t(t)+"="+i.join(",")):i.length!==0&&n.push(i.join(","))}else e===";"?Gt(o)&&n.push($t(t)):o===""&&(e==="&"||e==="?")?n.push($t(t)+"="):o===""&&n.push("");return n}function vl(r){return{expand:_l.bind(null,r)}}function _l(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 u=/([^:\*]*)(?::(\d+)|(\*))?/.exec(l);c.push(yl(e,a,u[1],u[2]||u[3]))}),a&&a!=="+"){var i=",";return a==="?"?i="&":a!=="#"&&(i=a),(c.length!==0?a:"")+c.join(i)}else return c.join(",")}else return jn(n)}),r==="/"?r:r.replace(/\/$/,"")}function Nn(r){let e=r.method.toUpperCase(),t=(r.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),s=Object.assign({},r.headers),o,n=Mn(r,["method","baseUrl","url","headers","request","mediaType"]),i=bl(t);t=vl(t).expand(n),/^http/.test(t)||(t=r.baseUrl+t);let a=Object.keys(r).filter(u=>i.includes(u)).concat("baseUrl"),c=Mn(n,a);if(!/application\/octet-stream/i.test(s.accept)&&(r.mediaType.format&&(s.accept=s.accept.split(/,/).map(u=>u.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${r.mediaType.format}`)).join(",")),t.endsWith("/graphql")&&r.mediaType.previews?.length)){let u=s.accept.match(/(?<![\w-])[\w-]+(?=-preview)/g)||[];s.accept=u.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=ml(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 wl(r,e,t){return Nn(qr(r,e,t))}function Hn(r,e){let t=qr(r,e),s=wl.bind(null,t);return Object.assign(s,{DEFAULTS:t,defaults:Hn.bind(null,t),merge:qr.bind(null,t),parse:Nn})}var ll,ul,dl,hl,qn,Bn=A(()=>{Wt();ll="0.0.0-development",ul=`octokit-endpoint.js/${ll} ${lt()}`,dl={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":ul},mediaType:{format:""}};hl=/\{[^{}}]+\}/g;qn=Hn(null,dl)});var Jn=Je((Dp,Kt)=>{"use strict";var ks=function(){};ks.prototype=Object.create(null);var Cs=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,Ps=/\\([\v\u0020-\u00ff])/gu,Vn=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,vt={type:"",parameters:new ks};Object.freeze(vt.parameters);Object.freeze(vt);function zn(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(Vn.test(t)===!1)throw new TypeError("invalid media type");let s={type:t.toLowerCase(),parameters:new ks};if(e===-1)return s;let o,n,i;for(Cs.lastIndex=e;n=Cs.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),Ps.test(i)&&(i=i.replace(Ps,"$1"))),s.parameters[o]=i}if(e!==r.length)throw new TypeError("invalid parameter format");return s}function Wn(r){if(typeof r!="string")return vt;let e=r.indexOf(";"),t=e!==-1?r.slice(0,e).trim():r.trim();if(Vn.test(t)===!1)return vt;let s={type:t.toLowerCase(),parameters:new ks};if(e===-1)return s;let o,n,i;for(Cs.lastIndex=e;n=Cs.exec(r);){if(n.index!==e)return vt;e+=n[0].length,o=n[1].toLowerCase(),i=n[2],i[0]==='"'&&(i=i.slice(1,i.length-1),Ps.test(i)&&(i=i.replace(Ps,"$1"))),s.parameters[o]=i}return e!==r.length?vt:s}Kt.exports.default={parse:zn,safeParse:Wn};Kt.exports.parse=zn;Kt.exports.safeParse=Wn;Kt.exports.defaultContentType=vt});var Rl,Yn,Br,Kn,El,Tl,Sl,Xn,Cl,Pl,kl,Zn,Qn,Al,Ol,ei,ti=A(()=>{Rl=/^-?\d+$/,Yn=/^-?\d+n+$/,Br=JSON.stringify,Kn=JSON.parse,El=/^-?\d+n$/,Tl=/([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,Sl=/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,Xn=(r,e,t)=>"rawJSON"in JSON?Br(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?Br(r,(i,a)=>typeof a=="string"&&!!a.match(Yn)||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"):Br(r,e,t),Cl=()=>JSON.parse("1",(r,e,t)=>!!t&&t.source==="1"),Pl=(r,e,t,s)=>typeof e=="string"&&e.match(El)?BigInt(e.slice(0,-1)):typeof e=="string"&&e.match(Yn)?e.slice(0,-1):typeof s!="function"?e:s(r,e,t),kl=(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&&Rl.test(o.source);return n&&i?BigInt(o.source):typeof e!="function"?s:e(t,s,o)}),Zn=Number.MAX_SAFE_INTEGER.toString(),Qn=Zn.length,Al=/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g,Ol=/^"-?\d+n+"$/,ei=(r,e)=>{if(!r)return Kn(r,e);if(Cl())return kl(r,e);let t=r.replace(Al,(s,o,n,i)=>{let a=s[0]==='"';if(a&&!!s.match(Ol))return s.substring(0,s.length-1)+'n"';let l=n||i,u=o&&(o.length<Qn||o.length===Qn&&o<=Zn);return a||l||u?s:'"'+s+'n"'});return Kn(t,(s,o,n)=>Pl(s,o,n,e))}});var _t,si=A(()=>{_t=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 xl(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 oi(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=xl(r.body)||Array.isArray(r.body)?Xn(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 R=new _t(m,500,{request:r});throw R.cause=p,R}let a=i.status,c=i.url,l={};for(let[p,m]of i.headers)l[p]=m;let u={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 u;if(r.method==="HEAD"){if(a<400)return u;throw new _t(i.statusText,a,{response:u,request:r})}if(a===304)throw u.data=await Vr(i),new _t("Not modified",a,{response:u,request:r});if(a>=400)throw u.data=await Vr(i),new _t(Il(u.data),a,{response:u,request:r});return u.data=s?await Vr(i):i.body,u}async function Vr(r){let e=r.headers.get("content-type");if(!e)return r.text().catch(ri);let t=(0,ni.safeParse)(e);if(Dl(t)){let s="";try{return s=await r.text(),ei(s)}catch{return s}}else return t.type.startsWith("text/")||t.parameters.charset?.toLowerCase()==="utf-8"?r.text().catch(ri):r.arrayBuffer().catch(()=>new ArrayBuffer(0))}function Dl(r){return r.type==="application/json"||r.type==="application/scim+json"}function Il(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 zr(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 oi(t.parse(i));let a=(c,l)=>oi(t.parse(t.merge(c,l)));return Object.assign(a,{endpoint:t,defaults:zr.bind(null,t)}),i.request.hook(a,i)},{endpoint:t,defaults:zr.bind(null,t)})}var ni,Gl,$l,ri,Qt,Wr=A(()=>{Bn();Wt();ni=Q(Jn(),1);ti();si();Gl="10.0.8",$l={headers:{"user-agent":`octokit-request.js/${Gl} ${lt()}`}};ri=()=>"";Qt=zr(qn,$l);});function Ul(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(){Se=null,Ht=!1}async function ys(){if(Se)return Se;if(Ht)return null;if(Ht=!0,process.env.GITHUB_TOKEN)return Se=process.env.GITHUB_TOKEN,Se;try{let r=await new Promise((e,t)=>{(0,qt.execFile)("gh",["auth","token"],{encoding:"utf-8",timeout:2e3},(s,o)=>{s?t(s):e(o.trim())})});if(r&&r.length>0)return Se=r,T(dt,"Using GitHub token from gh CLI (async)"),Se}catch(r){T(dt,"gh auth token failed (CLI unavailable or not authenticated)",r)}return null}async function _s(){try{let r=await new Promise((e,t)=>{(0,qt.execFile)("gh",["api","user","--jq",".login"],{encoding:"utf-8",timeout:5e3},(s,o)=>{s?t(s):e(o.trim())})});return r&&Wc.test(r)?(T(dt,`Detected GitHub username: ${r}`),r):(T(dt,`gh api user returned invalid username: "${r}"`),null)}catch(r){return T(dt,"detectGitHubUsername failed",r),null}}var Ne,rt,hn,qt,st,dt,Se,Ht,Bc,Vc,Wc,Re=P(()=>{"use strict";Ne=W(require("fs"),1),rt=W(require("path"),1),hn=W(require("os"),1),qt=require("child_process");ae();ue();st=5,dt="utils",Se=null,Ht=!1;Bc=/^[a-zA-Z0-9_-]+$/,Vc=/^[a-zA-Z0-9_.-]+$/;Wc=/^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$/});function Qc(r){try{let e=JSON.parse(j.readFileSync(r,"utf-8"));return Date.now()-e.timestamp>Kc}catch(e){return T(F,"Lock file unreadable or invalid JSON, treating as stale",e),!0}}function Yc(r){let e=JSON.stringify({pid:process.pid,timestamp:Date.now()});try{j.writeFileSync(r,e,{flag:"wx"});return}catch(t){T(F,"Lock file already exists, checking staleness",t)}if(!Qc(r))throw new Error("State file is locked by another process");try{j.unlinkSync(r)}catch(t){T(F,"Stale lock already removed by another process",t)}try{j.writeFileSync(r,e,{flag:"wx"})}catch(t){throw T(F,"Lock re-acquire failed (race condition)",t),new Error("State file is locked by another process",{cause:t})}}function Xc(r){try{JSON.parse(j.readFileSync(r,"utf-8")).pid===process.pid&&j.unlinkSync(r)}catch(e){T(F,"Lock file already removed or unreadable during release",e)}}function Fr(r,e,t){let s=r+".tmp";j.writeFileSync(s,e,{mode:t??384}),j.renameSync(s,r),t!==void 0&&j.chmodSync(r,t)}function wn(r){T(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 T(F,`Migration complete. Preserved ${Object.keys(s).length} repo scores.`),o}function x(){return xr||(xr=new ws),xr}var j,Fe,F,zc,_n,Jc,Kc,Bt,ht,ws,xr,Vt=P(()=>{"use strict";j=W(require("fs"),1),Fe=W(require("path"),1);Pt();Re();ae();ue();F="state",zc=2,_n=1e3,Jc=720*60*60*1e3,Kc=3e4,Bt=Fe.join(process.cwd(),"data","state.json"),ht=Fe.join(process.cwd(),"data","backups");ws=class r{state;inMemoryOnly;constructor(e=!1){this.inMemoryOnly=e,this.state=e?this.createFreshState():this.load()}createFreshState(){return{version:zc,activeIssues:[],repoScores:{},config:{...hs.config,setupComplete:!1,languages:[...hs.config.languages],labels:[...hs.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()}initializeWithDefaults(e){if(this.state.config.setupComplete){T(F,`Setup already complete, skipping initializeWithDefaults for "${e}"`);return}this.state.config.githubUsername=e,this.markSetupComplete(),T(F,`Initialized with defaults for user "${e}"`),this.save()}migrateFromLegacyLocation(){let e=ot();if(j.existsSync(e)||!j.existsSync(Bt))return!1;T(F,"Migrating state from ./data/ to ~/.oss-autopilot/...");try{if(Ie(),j.copyFileSync(Bt,e),T(F,`Migrated state file to ${e}`),j.existsSync(ht)){let s=mt(),o=j.readdirSync(ht).filter(n=>n.startsWith("state-")&&n.endsWith(".json"));for(let n of o){let i=Fe.join(ht,n),a=Fe.join(s,n);j.copyFileSync(i,a)}T(F,`Migrated ${o.length} backup files`)}if(j.unlinkSync(Bt),T(F,"Removed legacy state file"),j.existsSync(ht)){let s=j.readdirSync(ht);for(let o of s)j.unlinkSync(Fe.join(ht,o));j.rmdirSync(ht)}let t=Fe.dirname(Bt);return j.existsSync(t)&&j.readdirSync(t).length===0&&(j.rmdirSync(t),T(F,"Removed empty legacy data directory")),T(F,"Migration complete!"),!0}catch(t){b(F,`Failed to migrate state: ${S(t)}`);let s=ot();if(j.existsSync(s)&&j.existsSync(Bt))try{j.unlinkSync(s),T(F,"Cleaned up partial migration - removed incomplete new state file")}catch(o){b(F,"Could not clean up partial migration file"),T(F,"Partial migration cleanup failed",o)}return b(F,"To resolve this issue:"),b(F," 1. Ensure you have write permissions to ~/.oss-autopilot/"),b(F," 2. Check available disk space"),b(F," 3. Manually copy ./data/state.json to ~/.oss-autopilot/state.json"),b(F," 4. Or delete ./data/state.json to start fresh"),!1}}load(){this.migrateFromLegacyLocation();let e=ot();try{if(j.existsSync(e)){let t=j.readFileSync(e,"utf-8"),s=JSON.parse(t);if(!this.isValidState(s)){b(F,"Invalid state file structure, attempting to restore from backup...");let n=this.tryRestoreFromBackup();return n||(b(F,"No valid backup found, starting fresh"),this.createFreshState())}s.version===1&&(s=wn(s),Fr(e,JSON.stringify(s,null,2),384),T(F,"Migrated state saved"));let o=Object.keys(s.repoScores).length;return T(F,`Loaded state v${s.version}: ${o} repo scores tracked`),s}}catch(t){b(F,"Error loading state:",t),b(F,"Attempting to restore from backup...");let s=this.tryRestoreFromBackup();if(s)return s;b(F,"No valid backup found, starting fresh")}return T(F,"No existing state found, initializing..."),this.createFreshState()}tryRestoreFromBackup(){let e=mt();if(!j.existsSync(e))return null;let t=j.readdirSync(e).filter(s=>s.startsWith("state-")&&s.endsWith(".json")).sort().reverse();for(let s of t){let o=Fe.join(e,s);try{let n=j.readFileSync(o,"utf-8"),i=JSON.parse(n);if(this.isValidState(i)){T(F,`Successfully restored state from backup: ${s}`),i.version===1&&(i=wn(i));let a=Object.keys(i.repoScores).length;T(F,`Restored state v${i.version}: ${a} repo scores`);let c=ot();return Fr(c,JSON.stringify(i,null,2),384),T(F,"Restored backup written to main state file"),i}}catch(n){b(F,`Backup ${s} is corrupted, trying next...`),T(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=ot(),t=e+".lock",s=mt();Yc(t);try{if(j.existsSync(e)){let o=new Date().toISOString().replace(/[:.]/g,"-"),n=Math.random().toString(36).slice(2,8).padEnd(6,"0"),i=Fe.join(s,`state-${o}-${n}.json`);j.copyFileSync(e,i),j.chmodSync(i,384),this.cleanupBackups()}Fr(e,JSON.stringify(this.state,null,2),384),T(F,"State saved successfully")}finally{Xc(t)}}cleanupBackups(){let e=mt();try{let t=j.readdirSync(e).filter(s=>s.startsWith("state-")).sort().reverse();for(let s of t.slice(10))try{j.unlinkSync(Fe.join(e,s))}catch(o){b(F,`Could not delete old backup ${s}:`,S(o))}}catch(t){b(F,"Could not clean up backups:",S(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>_n&&(this.state.events=this.state.events.slice(-_n))}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)){T(F,`Issue ${e.url} already tracked`);return}this.state.activeIssues.push(e),T(F,`Added issue: ${e.repo}#${e.number}`)}addTrustedProject(e){this.state.config.trustedProjects.includes(e)||(this.state.config.trustedProjects.push(e),T(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]))}cleanupExcludedData(e,t){let s=i=>r.matchesExclusion(i,e,t),o=this.state.config.trustedProjects.length;this.state.config.trustedProjects=this.state.config.trustedProjects.filter(i=>!s(i));let n=o-this.state.config.trustedProjects.length;n>0&&T(F,`Removed ${n} trusted project(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(),T(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 X(`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)?(b(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())?b(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(),T(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()}),T(F,`Incremented merged count for ${e}: ${s}`)}incrementClosedCount(e){let s=(this.state.repoScores[e]?.closedWithoutMergeCount??0)+1;this.updateRepoScore(e,{closedWithoutMergeCount:s}),T(F,`Incremented closed count for ${e}: ${s}`)}markRepoHostile(e){this.updateRepoScore(e,{signals:{hasHostileComments:!0}}),T(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<=Jc:(b(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 of Object.values(this.state.repoScores))ut(i.stargazersCount,this.state.config.minStars??50)||(s++,e+=i.mergedPRCount,t+=i.closedWithoutMergeCount);let o=e+t,n=o>0?e/o*100:0;return{mergedPRs:e,closedPRs:t,activeIssues:0,trustedProjects:this.state.config.trustedProjects.length,mergeRate:n.toFixed(1)+"%",totalTracked:s,needsResponse:0}}},xr=null});function nt(){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 Wt=P(()=>{});function Es(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)=>Es.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 En=P(()=>{});function Rn(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 Tn=P(()=>{});function vn(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=P(()=>{});function kn(r,e,t){let s=Pn(vn,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(Rn,null).apply(null,n)})}function Zc(){let r=Symbol("Singular"),e={registry:{}},t=Es.bind(null,e,r);return kn(t,e,r),t}function eu(){let r={registry:{}},e=Es.bind(null,r);return kn(e,r),e}var Cn,Pn,An,On=P(()=>{En();Tn();Sn();Cn=Function.bind,Pn=Cn.bind(Cn);An={Singular:Zc,Collection:eu}});function ou(r){return r?Object.keys(r).reduce((e,t)=>(e[t.toLowerCase()]=r[t],e),{}):{}}function nu(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 Dn(r,e){let t=Object.assign({},r);return Object.keys(e).forEach(s=>{nu(e[s])?s in r?t[s]=Dn(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 Lr(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=ou(t.headers),Gn(t),Gn(t.headers);let s=Dn(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 iu(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 cu(r){return r.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g,"").split(/,/)}function uu(r){let e=r.match(au);return e?e.map(cu).reduce((t,s)=>t.concat(s),[]):[]}function $n(r,e){let t={__proto__:null};for(let s of Object.keys(r))e.indexOf(s)===-1&&(t[s]=r[s]);return t}function In(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 Ot(r){return encodeURIComponent(r).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function zt(r,e,t){return e=r==="+"||r==="#"?In(e):Ot(e),t?Ot(t)+"="+e:e}function At(r){return r!=null}function Ur(r){return r===";"||r==="&"||r==="?"}function lu(r,e,t,s){var o=r[t],n=[];if(At(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(zt(e,o,Ur(e)?t:""));else if(s==="*")Array.isArray(o)?o.filter(At).forEach(function(i){n.push(zt(e,i,Ur(e)?t:""))}):Object.keys(o).forEach(function(i){At(o[i])&&n.push(zt(e,o[i],i))});else{let i=[];Array.isArray(o)?o.filter(At).forEach(function(a){i.push(zt(e,a))}):Object.keys(o).forEach(function(a){At(o[a])&&(i.push(Ot(a)),i.push(zt(e,o[a].toString())))}),Ur(e)?n.push(Ot(t)+"="+i.join(",")):i.length!==0&&n.push(i.join(","))}else e===";"?At(o)&&n.push(Ot(t)):o===""&&(e==="&"||e==="?")?n.push(Ot(t)+"="):o===""&&n.push("");return n}function pu(r){return{expand:du.bind(null,r)}}function du(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(u){var p=/([^:\*]*)(?::(\d+)|(\*))?/.exec(u);c.push(lu(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 In(n)}),r==="/"?r:r.replace(/\/$/,"")}function Fn(r){let e=r.method.toUpperCase(),t=(r.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),s=Object.assign({},r.headers),o,n=$n(r,["method","baseUrl","url","headers","request","mediaType"]),i=uu(t);t=pu(t).expand(n),/^http/.test(t)||(t=r.baseUrl+t);let a=Object.keys(r).filter(p=>i.includes(p)).concat("baseUrl"),c=$n(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=iu(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 mu(r,e,t){return Fn(Lr(r,e,t))}function xn(r,e){let t=Lr(r,e),s=mu.bind(null,t);return Object.assign(s,{DEFAULTS:t,defaults:xn.bind(null,t),merge:Lr.bind(null,t),parse:Fn})}var tu,su,ru,au,Un,Ln=P(()=>{Wt();tu="0.0.0-development",su=`octokit-endpoint.js/${tu} ${nt()}`,ru={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":su},mediaType:{format:""}};au=/\{[^{}}]+\}/g;Un=xn(null,ru)});var Hn=We((Sd,Jt)=>{"use strict";var vs=function(){};vs.prototype=Object.create(null);var Rs=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,Ts=/\\([\v\u0020-\u00ff])/gu,Mn=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,ft={type:"",parameters:new vs};Object.freeze(ft.parameters);Object.freeze(ft);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(Mn.test(t)===!1)throw new TypeError("invalid media type");let s={type:t.toLowerCase(),parameters:new vs};if(e===-1)return s;let o,n,i;for(Rs.lastIndex=e;n=Rs.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),Ts.test(i)&&(i=i.replace(Ts,"$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 ft;let e=r.indexOf(";"),t=e!==-1?r.slice(0,e).trim():r.trim();if(Mn.test(t)===!1)return ft;let s={type:t.toLowerCase(),parameters:new vs};if(e===-1)return s;let o,n,i;for(Rs.lastIndex=e;n=Rs.exec(r);){if(n.index!==e)return ft;e+=n[0].length,o=n[1].toLowerCase(),i=n[2],i[0]==='"'&&(i=i.slice(1,i.length-1),Ts.test(i)&&(i=i.replace(Ts,"$1"))),s.parameters[o]=i}return e!==r.length?ft:s}Jt.exports.default={parse:jn,safeParse:Nn};Jt.exports.parse=jn;Jt.exports.safeParse=Nn;Jt.exports.defaultContentType=ft});var gu,Vn,Mr,qn,hu,fu,bu,Wn,yu,_u,wu,zn,Bn,Eu,Ru,Jn,Kn=P(()=>{gu=/^-?\d+$/,Vn=/^-?\d+n+$/,Mr=JSON.stringify,qn=JSON.parse,hu=/^-?\d+n$/,fu=/([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,bu=/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,Wn=(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(Vn)||typeof a=="bigint"?a.toString()+"n":typeof e=="function"?e(i,a):(Array.isArray(e)&&e.includes(i),a),t).replace(fu,"$1$2$3").replace(bu,"$1$2$3"):Mr(r,e,t),yu=()=>JSON.parse("1",(r,e,t)=>!!t&&t.source==="1"),_u=(r,e,t,s)=>typeof e=="string"&&e.match(hu)?BigInt(e.slice(0,-1)):typeof e=="string"&&e.match(Vn)?e.slice(0,-1):typeof s!="function"?e:s(r,e,t),wu=(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&&gu.test(o.source);return n&&i?BigInt(o.source):typeof e!="function"?s:e(t,s,o)}),zn=Number.MAX_SAFE_INTEGER.toString(),Bn=zn.length,Eu=/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g,Ru=/^"-?\d+n+"$/,Jn=(r,e)=>{if(!r)return qn(r,e);if(yu())return wu(r,e);let t=r.replace(Eu,(s,o,n,i)=>{let a=s[0]==='"';if(a&&!!s.match(Ru))return s.substring(0,s.length-1)+'n"';let u=n||i,p=o&&(o.length<Bn||o.length===Bn&&o<=zn);return a||u||p?s:'"'+s+'n"'});return qn(t,(s,o,n)=>_u(s,o,n,e))}});var bt,Qn=P(()=>{bt=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 Su(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=Su(r.body)||Array.isArray(r.body)?Wn(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 R=new bt(m,500,{request:r});throw R.cause=d,R}let a=i.status,c=i.url,u={};for(let[d,m]of i.headers)u[d]=m;let p={url:c,status:a,headers:u,data:""};if("deprecation"in u){let d=u.link&&u.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 ${u.sunset}${m?`. See ${m}`:""}`)}if(a===204||a===205)return p;if(r.method==="HEAD"){if(a<400)return p;throw new bt(i.statusText,a,{response:p,request:r})}if(a===304)throw p.data=await jr(i),new bt("Not modified",a,{response:p,request:r});if(a>=400)throw p.data=await jr(i),new bt(Pu(p.data),a,{response:p,request:r});return p.data=s?await jr(i):i.body,p}async function jr(r){let e=r.headers.get("content-type");if(!e)return r.text().catch(Yn);let t=(0,Zn.safeParse)(e);if(Cu(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(Yn):r.arrayBuffer().catch(()=>new ArrayBuffer(0))}function Cu(r){return r.type==="application/json"||r.type==="application/scim+json"}function Pu(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 Nr(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,u)=>Xn(t.parse(t.merge(c,u)));return Object.assign(a,{endpoint:t,defaults:Nr.bind(null,t)}),i.request.hook(a,i)},{endpoint:t,defaults:Nr.bind(null,t)})}var Zn,Tu,vu,Yn,Kt,Hr=P(()=>{Ln();Wt();Zn=W(Hn(),1);Kn();Qn();Tu="10.0.8",vu={headers:{"user-agent":`octokit-request.js/${Tu} ${nt()}`}};Yn=()=>"";Kt=Nr(Un,vu);});function Au(r){return`Request failed due to following response errors:
|
|
34
34
|
`+r.errors.map(e=>` - ${e.message}`).join(`
|
|
35
|
-
`)}function Nl(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(jl.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)=>Ll.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 ii.test(n)&&(o.url=n.replace(ii,"/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 Ml(o,a,i.data)}return i.data.data})}function Jr(r,e){let t=r.defaults(e);return Object.assign((o,n)=>Nl(t,o,n),{defaults:Jr.bind(null,t),endpoint:t.endpoint})}function ai(r){return Jr(r,{method:"POST",url:"/graphql"})}var Fl,Ml,Ll,jl,ii,Bp,ci=A(()=>{Wr();Wt();Fl="0.0.0-development";Ml=class extends Error{constructor(r,e,t){super(Ul(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},Ll=["method","baseUrl","url","headers","request","query","mediaType","operationName"],jl=["query","method","url"],ii=/\/api\/v3\/?$/;Bp=Jr(Qt,{headers:{"user-agent":`octokit-graphql.js/${Fl} ${lt()}`},method:"POST",url:"/graphql"})});async function ql(r){let e=Hl(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 Bl(r){return r.split(/\./).length===3?`bearer ${r}`:`token ${r}`}async function Vl(r,e,t,s){let o=e.endpoint.merge(t,s);return o.headers.authorization=Bl(r),e(o)}var Kr,li,ui,Hl,di,pi=A(()=>{Kr="(?:[a-zA-Z0-9_-]+)",li="\\.",ui=new RegExp(`^${Kr}${li}${Kr}${li}${Kr}$`),Hl=ui.test.bind(ui);di=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(ql.bind(null,e),{hook:Vl.bind(null,e)})}});var Qr,gi=A(()=>{Qr="7.0.6"});function Jl(r={}){return typeof r.debug!="function"&&(r.debug=mi),typeof r.info!="function"&&(r.info=mi),typeof r.warn!="function"&&(r.warn=zl),typeof r.error!="function"&&(r.error=Wl),r}var mi,zl,Wl,hi,As,fi=A(()=>{Wt();Fn();Wr();ci();pi();gi();mi=()=>{},zl=console.warn.bind(console),Wl=console.error.bind(console);hi=`octokit-core.js/${Qr} ${lt()}`,As=class{static VERSION=Qr;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 In.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} ${hi}`:hi,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=ai(this.request).defaults(s),this.log=Jl(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=di(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 bi,yi=A(()=>{bi="6.0.0"});function Yr(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 vi=A(()=>{yi();Yr.VERSION=bi});function Ql(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 Xr(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=Ql(c);if(a=((l.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!a&&"total_commits"in l.data){let u=new URL(l.url),p=u.searchParams,m=parseInt(p.get("page")||"1",10),R=parseInt(p.get("per_page")||"250",10);m*R<l.data.total_commits&&(p.set("page",String(m+1)),a=u.toString())}return{value:l}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function _i(r,e,t,s){return typeof t=="function"&&(s=t,t=void 0),wi(r,[],Xr(r,e,t)[Symbol.asyncIterator](),s)}function wi(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:wi(r,e,t,s)})}function Zr(r){return{paginate:Object.assign(_i.bind(null,r),{iterator:Xr.bind(null,r)})}}var Kl,ag,Ri=A(()=>{Kl="0.0.0-development";ag=Object.assign(_i,{iterator:Xr});Zr.VERSION=Kl});var eo,Ei=A(()=>{eo="17.0.0"});var Yl,Ti,Si=A(()=>{Yl={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"]}},Ti=Yl});function to(r){let e={};for(let t of wt.keys())e[t]=new Proxy({octokit:r,scope:t,cache:{}},Xl);return e}function Zl(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,u]=o.renamed;r.log.warn(`octokit.${e}.${t}() has been renamed to octokit.${l}.${u}()`)}if(o.deprecated&&r.log.warn(o.deprecated),o.renamedParameters){let l=n.endpoint.merge(...a);for(let[u,p]of Object.entries(o.renamedParameters))u in l&&(r.log.warn(`"${u}" parameter is deprecated for "octokit.${e}.${t}()". Use "${p}" instead`),p in l||(l[p]=l[u]),delete l[u]);return n(l)}return n(...a)}return Object.assign(i,n)}var wt,Xl,Ci=A(()=>{Si();wt=new Map;for(let[r,e]of Object.entries(Ti))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);wt.has(r)||wt.set(r,new Map),wt.get(r).set(t,{scope:r,methodName:t,endpointDefaults:l,decorations:i})}Xl={has({scope:r},e){return wt.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[...wt.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=wt.get(e).get(s);if(!o)return;let{endpointDefaults:n,decorations:i}=o;return i?t[s]=Zl(r,e,s,n,i):t[s]=r.request.defaults(n),t[s]}}});function eu(r){return{rest:to(r)}}function so(r){let e=to(r);return{...e,rest:e}}var Pi=A(()=>{Ei();Ci();eu.VERSION=eo;so.VERSION=eo});var ki,Ai=A(()=>{ki="22.0.1"});var Oi,Gi=A(()=>{fi();vi();Ri();Pi();Ai();Oi=As.plugin(Yr,so,Zr).defaults({userAgent:`octokit-rest.js/${ki}`})});var $i=Je((ro,oo)=>{(function(r,e){typeof ro=="object"&&typeof oo<"u"?oo.exports=e():typeof define=="function"&&define.amd?define(e):r.Bottleneck=e()})(ro,(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,d={}){var b,w,E;for(b in f)E=f[b],d[b]=(w=x[b])!=null?w:E;return d},s=function(x,f,d={}){var b,w;for(b in x)w=x[b],f[b]!==void 0&&(d[b]=w);return d},o={load:t,overwrite:s},n;n=class{constructor(f,d){this.incr=f,this.decr=d,this._first=null,this._last=null,this.length=0}push(f){var d;this.length++,typeof this.incr=="function"&&this.incr(),d={value:f,prev:this._last,next:null},this._last!=null?(this._last.next=d,this._last=d):this._first=this._last=d}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,d,b;for(f=this._first,b=[];f!=null;)b.push((d=f,f=f.next,d.value));return b}forEachShift(f){var d;for(d=this.shift();d!=null;)f(d),d=this.shift()}debug(){var f,d,b,w,E;for(f=this._first,E=[];f!=null;)E.push((d=f,f=f.next,{value:d.value,prev:(b=d.prev)!=null?b.value:void 0,next:(w=d.next)!=null?w.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=(d,b)=>this._addListener(d,"many",b),this.instance.once=(d,b)=>this._addListener(d,"once",b),this.instance.removeAllListeners=(d=null)=>d!=null?delete this._events[d]:this._events={}}_addListener(f,d,b){var w;return(w=this._events)[f]==null&&(w[f]=[]),this._events[f].push({cb:b,status:d}),this.instance}listenerCount(f){return this._events[f]!=null?this._events[f].length:0}async trigger(f,...d){var b,w;try{return f!=="debug"&&this.trigger("debug",`Event triggered: ${f}`,d),this._events[f]==null?void 0:(this._events[f]=this._events[f].filter(function(E){return E.status!=="none"}),w=this._events[f].map(async E=>{var P,$;if(E.status!=="none"){E.status==="once"&&(E.status="none");try{return $=typeof E.cb=="function"?E.cb(...d):void 0,typeof $?.then=="function"?await $:$}catch(V){return P=V,this.trigger("error",P),null}}}),(await Promise.all(w)).find(function(E){return E!=null}))}catch(E){return b=E,this.trigger("error",b),null}}};var c=a,l,u,p;l=i,u=c,p=class{constructor(f){var d;this.Events=new u(this),this._length=0,this._lists=(function(){var b,w,E;for(E=[],d=b=1,w=f;1<=w?b<=w:b>=w;d=1<=w?++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(d){return d.forEachShift(f)})}getFirst(f=this._lists){var d,b,w;for(d=0,b=f.length;d<b;d++)if(w=f[d],w.length>0)return w;return[]}shiftLastFrom(f){return this.getFirst(this._lists.slice(f).reverse()).shift()}};var m=p,R;R=class extends Error{};var g=R,v,k,h,C,S;C=10,k=5,S=o,v=g,h=class{constructor(f,d,b,w,E,P,$,V){this.task=f,this.args=d,this.rejectOnDrop=E,this.Events=P,this._states=$,this.Promise=V,this.options=S.load(b,w),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===w.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((le,he)=>{this._resolve=le,this._reject=he}),this.retryCount=0}_sanitizePriority(f){var d;return d=~~f!==f?k:f,d<0?0:d>C-1?C-1:d}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:f,message:d="This job has been dropped by Bottleneck"}={}){return this._states.remove(this.options.id)?(this.rejectOnDrop&&this._reject(f??new v(d)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0):!1}_assertStatus(f){var d;if(d=this._states.jobStatus(this.options.id),!(d===f||f==="DONE"&&d===null))throw new v(`Invalid job status ${d}, 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,d){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:f,blocked:d})}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,d,b,w){var E,P,$;this.retryCount===0?(this._assertStatus("RUNNING"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),P={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",P);try{if($=await(f!=null?f.schedule(this.options,this.task,...this.args):this.task(...this.args)),d())return this.doDone(P),await w(this.options,P),this._assertStatus("DONE"),this._resolve($)}catch(V){return E=V,this._onFailure(E,P,d,b,w)}}doExpire(f,d,b){var w,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},w=new v(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(w,E,f,d,b)}async _onFailure(f,d,b,w,E){var P,$;if(b())return P=await this.Events.trigger("failed",f,d),P!=null?($=~~P,this.Events.trigger("retry",`Retrying ${this.options.id} after ${$} ms`,d),this.retryCount++,w($)):(this.doDone(d),await E(this.options,d),this._assertStatus("DONE"),this._reject(f))}doDone(f){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",f)}};var _=h,G,F,H;H=o,G=g,F=class{constructor(f,d,b){this.instance=f,this.storeOptions=d,this.clientId=this.instance._randomIndex(),H.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 d,b,w,E,P;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:d,reservoirIncreaseMaximum:w,reservoir:P}=this.storeOptions,this._lastReservoirIncrease=E,b=w!=null?Math.min(d,w-P):d,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(d,b){return setTimeout(d,f)})}computePenalty(){var f;return(f=this.storeOptions.penalty)!=null?f:15*this.storeOptions.minTime||5e3}async __updateSettings__(f){return await this.yieldLoop(),H.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,d;return{maxConcurrent:f,reservoir:d}=this.storeOptions,f!=null&&d!=null?Math.min(f-this._running,d):f!=null?f-this._running:d??null}conditionsCheck(f){var d;return d=this.computeCapacity(),d==null||f<=d}async __incrementReservoir__(f){var d;return await this.yieldLoop(),d=this.storeOptions.reservoir+=f,this.instance._drainAll(this.computeCapacity()),d}async __currentReservoir__(){return await this.yieldLoop(),this.storeOptions.reservoir}isBlocked(f){return this._unblockTime>=f}check(f,d){return this.conditionsCheck(f)&&this._nextRequest-d<=0}async __check__(f){var d;return await this.yieldLoop(),d=Date.now(),this.check(f,d)}async __register__(f,d,b){var w,E;return await this.yieldLoop(),w=Date.now(),this.conditionsCheck(d)?(this._running+=d,this.storeOptions.reservoir!=null&&(this.storeOptions.reservoir-=d),E=Math.max(this._nextRequest-w,0),this._nextRequest=w+E+this.storeOptions.minTime,{success:!0,wait:E,reservoir:this.storeOptions.reservoir}):{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(f,d){var b,w,E;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&d>this.storeOptions.maxConcurrent)throw new G(`Impossible to add a job having a weight of ${d} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);return w=Date.now(),E=this.storeOptions.highWater!=null&&f===this.storeOptions.highWater&&!this.check(d,w),b=this.strategyIsBlock()&&(E||this.isBlocked(w)),b&&(this._unblockTime=w+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued()),{reachedHWM:E,blocked:b,strategy:this.storeOptions.strategy}}async __free__(f,d){return await this.yieldLoop(),this._running-=d,this._done+=d,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var te=F,ne,me;ne=g,me=class{constructor(f){this.status=f,this._jobs={},this.counts=this.status.map(function(){return 0})}next(f){var d,b;if(d=this._jobs[f],b=d+1,d!=null&&b<this.status.length)return this.counts[d]--,this.counts[b]++,this._jobs[f]++;if(d!=null)return this.counts[d]--,delete this._jobs[f]}start(f){var d;return d=0,this._jobs[f]=d,this.counts[d]++}remove(f){var d;return d=this._jobs[f],d!=null&&(this.counts[d]--,delete this._jobs[f]),d!=null}jobStatus(f){var d;return(d=this.status[this._jobs[f]])!=null?d:null}statusJobs(f){var d,b,w,E,P;if(f!=null){if(b=this.status.indexOf(f),b<0)throw new ne(`status must be one of ${this.status.join(", ")}`);w=this._jobs,E=[];for(d in w)P=w[d],P===b&&E.push(d);return E}else return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce(((f,d,b)=>(f[this.status[b]]=d,f)),{})}};var Ne=me,Ee,be;Ee=i,be=class{constructor(f,d){this.schedule=this.schedule.bind(this),this.name=f,this.Promise=d,this._running=0,this._queue=new Ee}isEmpty(){return this._queue.length===0}async _tryToRun(){var f,d,b,w,E,P,$;if(this._running<1&&this._queue.length>0)return this._running++,{task:$,args:f,resolve:E,reject:w}=this._queue.shift(),d=await(async function(){try{return P=await $(...f),function(){return E(P)}}catch(V){return b=V,function(){return w(b)}}})(),this._running--,this._tryToRun(),d()}schedule(f,...d){var b,w,E;return E=w=null,b=new this.Promise(function(P,$){return E=P,w=$}),this._queue.push({task:f,args:d,resolve:E,reject:w}),this._tryToRun(),b}};var ze=be,ve="2.19.5",Oe={version:ve},Te=Object.freeze({version:ve,default:Oe}),U=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),N=()=>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."),L,q,X,De,it,We;We=o,L=c,De=U,X=N,it=se,q=(function(){class x{constructor(d={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=d,We.load(this.limiterOptions,this.defaults,this),this.Events=new L(this),this.instances={},this.Bottleneck=on,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 X(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(d=""){var b;return(b=this.instances[d])!=null?b:(()=>{var w;return w=this.instances[d]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${d}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",w,d),w})()}async deleteKey(d=""){var b,w;return w=this.instances[d],this.connection&&(b=await this.connection.__runCommand__(["del",...it.allKeys(`${this.id}-${d}`)])),w!=null&&(delete this.instances[d],await w.disconnect()),w!=null||b>0}limiters(){var d,b,w,E;b=this.instances,w=[];for(d in b)E=b[d],w.push({key:d,limiter:E});return w}keys(){return Object.keys(this.instances)}async clusterKeys(){var d,b,w,E,P,$,V,le,he;if(this.connection==null)return this.Promise.resolve(this.keys());for($=[],d=null,he=`b_${this.id}-`.length,b=9;d!==0;)for([le,w]=await this.connection.__runCommand__(["scan",d??0,"match",`b_${this.id}-*_settings`,"count",1e4]),d=~~le,E=0,V=w.length;E<V;E++)P=w[E],$.push(P.slice(he,-b));return $}_startAutoCleanup(){var d;return clearInterval(this.interval),typeof(d=this.interval=setInterval(async()=>{var b,w,E,P,$,V;$=Date.now(),E=this.instances,P=[];for(w in E){V=E[w];try{await V._store.__groupCheck__($)?P.push(this.deleteKey(w)):P.push(void 0)}catch(le){b=le,P.push(V.Events.trigger("error",b))}}return P},this.timeout/2)).unref=="function"?d.unref():void 0}updateSettings(d={}){if(We.overwrite(d,this.defaults,this),We.overwrite(d,d,this.limiterOptions),d.timeout!=null)return this._startAutoCleanup()}disconnect(d=!0){var b;if(!this.sharedConnection)return(b=this.connection)!=null?b.disconnect(d):void 0}}return x.prototype.defaults={timeout:1e3*60*5,connection:null,Promise,id:"group-key"},x}).call(r);var gr=q,Jo,Ko,Qo;Qo=o,Ko=c,Jo=(function(){class x{constructor(d={}){this.options=d,Qo.load(this.options,this.defaults,this),this.Events=new Ko(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((d,b)=>this._resolve=d)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(d){var b;return this._arr.push(d),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 Cc=Jo,Pc=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),kc=e(Te),Yo,Xo,mr,hr,Zo,fr,en,tn,sn,br,He,rn=[].splice;fr=10,Xo=5,He=o,en=m,hr=_,Zo=te,tn=Pc,mr=c,sn=Ne,br=ze,Yo=(function(){class x{constructor(d={},...b){var w,E;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(d,b),He.load(d,this.instanceDefaults,this),this._queues=new en(fr),this._scheduled={},this._states=new sn(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new mr(this),this._submitLock=new br("submit",this.Promise),this._registerLock=new br("register",this.Promise),E=He.load(d,this.storeDefaults,{}),this._store=(function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return w=He.load(d,this.redisStoreDefaults,{}),new tn(this,E,w);if(this.datastore==="local")return w=He.load(d,this.localStoreDefaults,{}),new Zo(this,E,w);throw new x.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}).call(this),this._queues.on("leftzero",()=>{var P;return(P=this._store.heartbeat)!=null&&typeof P.ref=="function"?P.ref():void 0}),this._queues.on("zero",()=>{var P;return(P=this._store.heartbeat)!=null&&typeof P.unref=="function"?P.unref():void 0})}_validateOptions(d,b){if(!(d!=null&&typeof d=="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(d){return this._store.__publish__(d)}disconnect(d=!0){return this._store.__disconnect__(d)}chain(d){return this._limiter=d,this}queued(d){return this._queues.queued(d)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(d){return this._states.jobStatus(d)}jobs(d){return this._states.statusJobs(d)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(d=1){return this._store.__check__(d)}_clearGlobalState(d){return this._scheduled[d]!=null?(clearTimeout(this._scheduled[d].expiration),delete this._scheduled[d],!0):!1}async _free(d,b,w,E){var P,$;try{if({running:$}=await this._store.__free__(d,w.weight),this.Events.trigger("debug",`Freed ${w.id}`,E),$===0&&this.empty())return this.Events.trigger("idle")}catch(V){return P=V,this.Events.trigger("error",P)}}_run(d,b,w){var E,P,$;return b.doRun(),E=this._clearGlobalState.bind(this,d),$=this._run.bind(this,d,b),P=this._free.bind(this,d,b),this._scheduled[d]={timeout:setTimeout(()=>b.doExecute(this._limiter,E,$,P),w),expiration:b.options.expiration!=null?setTimeout(function(){return b.doExpire(E,$,P)},w+b.options.expiration):void 0,job:b}}_drainOne(d){return this._registerLock.schedule(()=>{var b,w,E,P,$;return this.queued()===0?this.Promise.resolve(null):($=this._queues.getFirst(),{options:P,args:b}=E=$.first(),d!=null&&P.weight>d?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${P.id}`,{args:b,options:P}),w=this._randomIndex(),this._store.__register__(w,P.weight,P.expiration).then(({success:V,wait:le,reservoir:he})=>{var jt;return this.Events.trigger("debug",`Drained ${P.id}`,{success:V,args:b,options:P}),V?($.shift(),jt=this.empty(),jt&&this.Events.trigger("empty"),he===0&&this.Events.trigger("depleted",jt),this._run(w,E,le),this.Promise.resolve(P.weight)):this.Promise.resolve(null)})))})}_drainAll(d,b=0){return this._drainOne(d).then(w=>{var E;return w!=null?(E=d!=null?d-w:d,this._drainAll(E,b+w)):this.Promise.resolve(b)}).catch(w=>this.Events.trigger("error",w))}_dropAllQueued(d){return this._queues.shiftAll(function(b){return b.doDrop({message:d})})}stop(d={}){var b,w;return d=He.load(d,this.stopDefaults),w=E=>{var P;return P=()=>{var $;return $=this._states.counts,$[0]+$[1]+$[2]+$[3]===E},new this.Promise(($,V)=>P()?$():this.on("done",()=>{if(P())return this.removeAllListeners("done"),$()}))},b=d.dropWaitingJobs?(this._run=function(E,P){return P.doDrop({message:d.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var E,P,$;P=this._scheduled;for(E in P)$=P[E],this.jobStatus($.job.options.id)==="RUNNING"&&(clearTimeout($.timeout),clearTimeout($.expiration),$.job.doDrop({message:d.dropErrorMessage}));return this._dropAllQueued(d.dropErrorMessage),w(0)}))):this.schedule({priority:fr-1,weight:0},()=>w(1)),this._receive=function(E){return E._reject(new x.prototype.BottleneckError(d.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new x.prototype.BottleneckError("stop() has already been called")),b}async _addToQueue(d){var b,w,E,P,$,V,le;({args:b,options:P}=d);try{({reachedHWM:$,blocked:w,strategy:le}=await this._store.__submit__(this.queued(),P.weight))}catch(he){return E=he,this.Events.trigger("debug",`Could not queue ${P.id}`,{args:b,options:P,error:E}),d.doDrop({error:E}),!1}return w?(d.doDrop(),!0):$&&(V=le===x.prototype.strategy.LEAK?this._queues.shiftLastFrom(P.priority):le===x.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(P.priority+1):le===x.prototype.strategy.OVERFLOW?d:void 0,V?.doDrop(),V==null||le===x.prototype.strategy.OVERFLOW)?(V==null&&d.doDrop(),$):(d.doQueue($,w),this._queues.push(d),await this._drainAll(),$)}_receive(d){return this._states.jobStatus(d.options.id)!=null?(d._reject(new x.prototype.BottleneckError(`A job with the same id already exists (id=${d.options.id})`)),!1):(d.doReceive(),this._submitLock.schedule(this._addToQueue,d))}submit(...d){var b,w,E,P,$,V,le;return typeof d[0]=="function"?($=d,[w,...d]=$,[b]=rn.call(d,-1),P=He.load({},this.jobDefaults)):(V=d,[P,w,...d]=V,[b]=rn.call(d,-1),P=He.load(P,this.jobDefaults)),le=(...he)=>new this.Promise(function(jt,Oc){return w(...he,function(...nn){return(nn[0]!=null?Oc:jt)(nn)})}),E=new hr(le,d,P,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),E.promise.then(function(he){return typeof b=="function"?b(...he):void 0}).catch(function(he){return Array.isArray(he)?typeof b=="function"?b(...he):void 0:typeof b=="function"?b(he):void 0}),this._receive(E)}schedule(...d){var b,w,E;return typeof d[0]=="function"?([E,...d]=d,w={}):[w,E,...d]=d,b=new hr(E,d,w,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(b),b.promise}wrap(d){var b,w;return b=this.schedule.bind(this),w=function(...E){return b(d.bind(this),...E)},w.withOptions=function(E,...P){return b(E,d,...P)},w}async updateSettings(d={}){return await this._store.__updateSettings__(He.overwrite(d,this.storeDefaults)),He.overwrite(d,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(d=0){return this._store.__incrementReservoir__(d)}}return x.default=x,x.Events=mr,x.version=x.prototype.version=kc.version,x.strategy=x.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},x.BottleneckError=x.prototype.BottleneckError=g,x.Group=x.prototype.Group=gr,x.RedisConnection=x.prototype.RedisConnection=U,x.IORedisConnection=x.prototype.IORedisConnection=N,x.Batcher=x.prototype.Batcher=Cc,x.prototype.jobDefaults={priority:Xo,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 on=Yo,Ac=on;return Ac}))});function su(r,e,t){return r.retryLimiter.schedule(ru,r,e,t)}async function ru(r,e,t){let{pathname:s}=new URL(t.url,"http://github.test"),o=ou(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,no),n&&r.triggersNotification(s)&&await r.notifications.key(r.id).schedule(l,no),i&&await r.search.key(r.id).schedule(l,no);let u=(o?r.auth:r.global).key(r.id).schedule(l,e,t);if(a){let p=await u;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 u}function ou(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 iu(r){let t=`^(?:${r.map(s=>s.split("/").map(o=>o.startsWith("{")?"(?:.+?)":o).join("/")).map(s=>`(?:${s})`).join("|")})[^/]*$`;return new RegExp(t,"i")}function Os(r,e){let{enabled:t=!0,Bottleneck:s=Di.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),Rt.global==null&&au(s,a);let c=Object.assign({clustering:i!=null,triggersNotification:Ii,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new s,id:o,...Rt},e.throttle);if(typeof c.onSecondaryRateLimit!="function"||typeof c.onRateLimit!="function")throw new Error(`octokit/plugin-throttling error:
|
|
35
|
+
`)}function Du(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($u.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)=>Gu.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 Ou(o,a,i.data)}return i.data.data})}function qr(r,e){let t=r.defaults(e);return Object.assign((o,n)=>Du(t,o,n),{defaults:qr.bind(null,t),endpoint:t.endpoint})}function ti(r){return qr(r,{method:"POST",url:"/graphql"})}var ku,Ou,Gu,$u,ei,Fd,si=P(()=>{Hr();Wt();ku="0.0.0-development";Ou=class extends Error{constructor(r,e,t){super(Au(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},Gu=["method","baseUrl","url","headers","request","query","mediaType","operationName"],$u=["query","method","url"],ei=/\/api\/v3\/?$/;Fd=qr(Kt,{headers:{"user-agent":`octokit-graphql.js/${ku} ${nt()}`},method:"POST",url:"/graphql"})});async function Fu(r){let e=Iu(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 xu(r){return r.split(/\./).length===3?`bearer ${r}`:`token ${r}`}async function Uu(r,e,t,s){let o=e.endpoint.merge(t,s);return o.headers.authorization=xu(r),e(o)}var Br,ri,oi,Iu,ni,ii=P(()=>{Br="(?:[a-zA-Z0-9_-]+)",ri="\\.",oi=new RegExp(`^${Br}${ri}${Br}${ri}${Br}$`),Iu=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(Fu.bind(null,e),{hook:Uu.bind(null,e)})}});var Vr,ai=P(()=>{Vr="7.0.6"});function ju(r={}){return typeof r.debug!="function"&&(r.debug=ci),typeof r.info!="function"&&(r.info=ci),typeof r.warn!="function"&&(r.warn=Lu),typeof r.error!="function"&&(r.error=Mu),r}var ci,Lu,Mu,ui,Ss,li=P(()=>{Wt();On();Hr();si();ii();ai();ci=()=>{},Lu=console.warn.bind(console),Mu=console.error.bind(console);ui=`octokit-core.js/${Vr} ${nt()}`,Ss=class{static VERSION=Vr;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:Kt.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} ${ui}`:ui,e.baseUrl&&(s.baseUrl=e.baseUrl),e.previews&&(s.mediaType.previews=e.previews),e.timeZone&&(s.headers["time-zone"]=e.timeZone),this.request=Kt.defaults(s),this.graphql=ti(this.request).defaults(s),this.log=ju(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 pi,di=P(()=>{pi="6.0.0"});function Wr(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 mi=P(()=>{di();Wr.VERSION=pi});function Hu(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}),u=Hu(c);if(a=((u.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!a&&"total_commits"in u.data){let p=new URL(u.url),d=p.searchParams,m=parseInt(d.get("page")||"1",10),R=parseInt(d.get("per_page")||"250",10);m*R<u.data.total_commits&&(d.set("page",String(m+1)),a=p.toString())}return{value:u}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function gi(r,e,t,s){return typeof t=="function"&&(s=t,t=void 0),hi(r,[],zr(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 Jr(r){return{paginate:Object.assign(gi.bind(null,r),{iterator:zr.bind(null,r)})}}var Nu,Xd,fi=P(()=>{Nu="0.0.0-development";Xd=Object.assign(gi,{iterator:zr});Jr.VERSION=Nu});var Kr,bi=P(()=>{Kr="17.0.0"});var qu,yi,_i=P(()=>{qu={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=qu});function Qr(r){let e={};for(let t of yt.keys())e[t]=new Proxy({octokit:r,scope:t,cache:{}},Bu);return e}function Vu(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[u,p]=o.renamed;r.log.warn(`octokit.${e}.${t}() has been renamed to octokit.${u}.${p}()`)}if(o.deprecated&&r.log.warn(o.deprecated),o.renamedParameters){let u=n.endpoint.merge(...a);for(let[p,d]of Object.entries(o.renamedParameters))p in u&&(r.log.warn(`"${p}" parameter is deprecated for "octokit.${e}.${t}()". Use "${d}" instead`),d in u||(u[d]=u[p]),delete u[p]);return n(u)}return n(...a)}return Object.assign(i,n)}var yt,Bu,wi=P(()=>{_i();yt=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(/ /),u=Object.assign({method:a,url:c},n);yt.has(r)||yt.set(r,new Map),yt.get(r).set(t,{scope:r,methodName:t,endpointDefaults:u,decorations:i})}Bu={has({scope:r},e){return yt.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[...yt.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=yt.get(e).get(s);if(!o)return;let{endpointDefaults:n,decorations:i}=o;return i?t[s]=Vu(r,e,s,n,i):t[s]=r.request.defaults(n),t[s]}}});function Wu(r){return{rest:Qr(r)}}function Yr(r){let e=Qr(r);return{...e,rest:e}}var Ei=P(()=>{bi();wi();Wu.VERSION=Kr;Yr.VERSION=Kr});var Ri,Ti=P(()=>{Ri="22.0.1"});var vi,Si=P(()=>{li();mi();fi();Ei();Ti();vi=Ss.plugin(Wr,Yr,Jr).defaults({userAgent:`octokit-rest.js/${Ri}`})});var Ci=We((Xr,Zr)=>{(function(r,e){typeof Xr=="object"&&typeof Zr<"u"?Zr.exports=e():typeof define=="function"&&define.amd?define(e):r.Bottleneck=e()})(Xr,(function(){"use strict";var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function e(D){return D&&D.default||D}var t=function(D,h,l={}){var f,y,_;for(f in h)_=h[f],l[f]=(y=D[f])!=null?y:_;return l},s=function(D,h,l={}){var f,y;for(f in D)y=D[f],h[f]!==void 0&&(l[f]=y);return l},o={load:t,overwrite:s},n;n=class{constructor(h,l){this.incr=h,this.decr=l,this._first=null,this._last=null,this.length=0}push(h){var l;this.length++,typeof this.incr=="function"&&this.incr(),l={value:h,prev:this._last,next:null},this._last!=null?(this._last.next=l,this._last=l):this._first=this._last=l}shift(){var h;if(this._first!=null)return this.length--,typeof this.decr=="function"&&this.decr(),h=this._first.value,(this._first=this._first.next)!=null?this._first.prev=null:this._last=null,h}first(){if(this._first!=null)return this._first.value}getArray(){var h,l,f;for(h=this._first,f=[];h!=null;)f.push((l=h,h=h.next,l.value));return f}forEachShift(h){var l;for(l=this.shift();l!=null;)h(l),l=this.shift()}debug(){var h,l,f,y,_;for(h=this._first,_=[];h!=null;)_.push((l=h,h=h.next,{value:l.value,prev:(f=l.prev)!=null?f.value:void 0,next:(y=l.next)!=null?y.value:void 0}));return _}};var i=n,a;a=class{constructor(h){if(this.instance=h,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=(l,f)=>this._addListener(l,"many",f),this.instance.once=(l,f)=>this._addListener(l,"once",f),this.instance.removeAllListeners=(l=null)=>l!=null?delete this._events[l]:this._events={}}_addListener(h,l,f){var y;return(y=this._events)[h]==null&&(y[h]=[]),this._events[h].push({cb:f,status:l}),this.instance}listenerCount(h){return this._events[h]!=null?this._events[h].length:0}async trigger(h,...l){var f,y;try{return h!=="debug"&&this.trigger("debug",`Event triggered: ${h}`,l),this._events[h]==null?void 0:(this._events[h]=this._events[h].filter(function(_){return _.status!=="none"}),y=this._events[h].map(async _=>{var v,$;if(_.status!=="none"){_.status==="once"&&(_.status="none");try{return $=typeof _.cb=="function"?_.cb(...l):void 0,typeof $?.then=="function"?await $:$}catch(z){return v=z,this.trigger("error",v),null}}}),(await Promise.all(y)).find(function(_){return _!=null}))}catch(_){return f=_,this.trigger("error",f),null}}};var c=a,u,p,d;u=i,p=c,d=class{constructor(h){var l;this.Events=new p(this),this._length=0,this._lists=(function(){var f,y,_;for(_=[],l=f=1,y=h;1<=y?f<=y:f>=y;l=1<=y?++f:--f)_.push(new u((()=>this.incr()),(()=>this.decr())));return _}).call(this)}incr(){if(this._length++===0)return this.Events.trigger("leftzero")}decr(){if(--this._length===0)return this.Events.trigger("zero")}push(h){return this._lists[h.options.priority].push(h)}queued(h){return h!=null?this._lists[h].length:this._length}shiftAll(h){return this._lists.forEach(function(l){return l.forEachShift(h)})}getFirst(h=this._lists){var l,f,y;for(l=0,f=h.length;l<f;l++)if(y=h[l],y.length>0)return y;return[]}shiftLastFrom(h){return this.getFirst(this._lists.slice(h).reverse()).shift()}};var m=d,R;R=class extends Error{};var w=R,E,C,g,G,I;G=10,C=5,I=o,E=w,g=class{constructor(h,l,f,y,_,v,$,z){this.task=h,this.args=l,this.rejectOnDrop=_,this.Events=v,this._states=$,this.Promise=z,this.options=I.load(f,y),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===y.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((pe,he)=>{this._resolve=pe,this._reject=he}),this.retryCount=0}_sanitizePriority(h){var l;return l=~~h!==h?C:h,l<0?0:l>G-1?G-1:l}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:h,message:l="This job has been dropped by Bottleneck"}={}){return this._states.remove(this.options.id)?(this.rejectOnDrop&&this._reject(h??new E(l)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0):!1}_assertStatus(h){var l;if(l=this._states.jobStatus(this.options.id),!(l===h||h==="DONE"&&l===null))throw new E(`Invalid job status ${l}, expected ${h}. 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(h,l){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:h,blocked:l})}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(h,l,f,y){var _,v,$;this.retryCount===0?(this._assertStatus("RUNNING"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),v={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",v);try{if($=await(h!=null?h.schedule(this.options,this.task,...this.args):this.task(...this.args)),l())return this.doDone(v),await y(this.options,v),this._assertStatus("DONE"),this._resolve($)}catch(z){return _=z,this._onFailure(_,v,l,f,y)}}doExpire(h,l,f){var y,_;return this._states.jobStatus(this.options.id==="RUNNING")&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),_={args:this.args,options:this.options,retryCount:this.retryCount},y=new E(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(y,_,h,l,f)}async _onFailure(h,l,f,y,_){var v,$;if(f())return v=await this.Events.trigger("failed",h,l),v!=null?($=~~v,this.Events.trigger("retry",`Retrying ${this.options.id} after ${$} ms`,l),this.retryCount++,y($)):(this.doDone(l),await _(this.options,l),this._assertStatus("DONE"),this._reject(h))}doDone(h){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",h)}};var O=g,U,k,A;A=o,U=w,k=class{constructor(h,l,f){this.instance=h,this.storeOptions=l,this.clientId=this.instance._randomIndex(),A.load(f,f,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 h;return this.heartbeat==null&&(this.storeOptions.reservoirRefreshInterval!=null&&this.storeOptions.reservoirRefreshAmount!=null||this.storeOptions.reservoirIncreaseInterval!=null&&this.storeOptions.reservoirIncreaseAmount!=null)?typeof(h=this.heartbeat=setInterval(()=>{var l,f,y,_,v;if(_=Date.now(),this.storeOptions.reservoirRefreshInterval!=null&&_>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=_,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),this.storeOptions.reservoirIncreaseInterval!=null&&_>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval&&({reservoirIncreaseAmount:l,reservoirIncreaseMaximum:y,reservoir:v}=this.storeOptions,this._lastReservoirIncrease=_,f=y!=null?Math.min(l,y-v):l,f>0))return this.storeOptions.reservoir+=f,this.instance._drainAll(this.computeCapacity())},this.heartbeatInterval)).unref=="function"?h.unref():void 0:clearInterval(this.heartbeat)}async __publish__(h){return await this.yieldLoop(),this.instance.Events.trigger("message",h.toString())}async __disconnect__(h){return await this.yieldLoop(),clearInterval(this.heartbeat),this.Promise.resolve()}yieldLoop(h=0){return new this.Promise(function(l,f){return setTimeout(l,h)})}computePenalty(){var h;return(h=this.storeOptions.penalty)!=null?h:15*this.storeOptions.minTime||5e3}async __updateSettings__(h){return await this.yieldLoop(),A.overwrite(h,h,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__(h){return await this.yieldLoop(),this._nextRequest+this.timeout<h}computeCapacity(){var h,l;return{maxConcurrent:h,reservoir:l}=this.storeOptions,h!=null&&l!=null?Math.min(h-this._running,l):h!=null?h-this._running:l??null}conditionsCheck(h){var l;return l=this.computeCapacity(),l==null||h<=l}async __incrementReservoir__(h){var l;return await this.yieldLoop(),l=this.storeOptions.reservoir+=h,this.instance._drainAll(this.computeCapacity()),l}async __currentReservoir__(){return await this.yieldLoop(),this.storeOptions.reservoir}isBlocked(h){return this._unblockTime>=h}check(h,l){return this.conditionsCheck(h)&&this._nextRequest-l<=0}async __check__(h){var l;return await this.yieldLoop(),l=Date.now(),this.check(h,l)}async __register__(h,l,f){var y,_;return await this.yieldLoop(),y=Date.now(),this.conditionsCheck(l)?(this._running+=l,this.storeOptions.reservoir!=null&&(this.storeOptions.reservoir-=l),_=Math.max(this._nextRequest-y,0),this._nextRequest=y+_+this.storeOptions.minTime,{success:!0,wait:_,reservoir:this.storeOptions.reservoir}):{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(h,l){var f,y,_;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&l>this.storeOptions.maxConcurrent)throw new U(`Impossible to add a job having a weight of ${l} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);return y=Date.now(),_=this.storeOptions.highWater!=null&&h===this.storeOptions.highWater&&!this.check(l,y),f=this.strategyIsBlock()&&(_||this.isBlocked(y)),f&&(this._unblockTime=y+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued()),{reachedHWM:_,blocked:f,strategy:this.storeOptions.strategy}}async __free__(h,l){return await this.yieldLoop(),this._running-=l,this._done+=l,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var M=k,H,ce;H=w,ce=class{constructor(h){this.status=h,this._jobs={},this.counts=this.status.map(function(){return 0})}next(h){var l,f;if(l=this._jobs[h],f=l+1,l!=null&&f<this.status.length)return this.counts[l]--,this.counts[f]++,this._jobs[h]++;if(l!=null)return this.counts[l]--,delete this._jobs[h]}start(h){var l;return l=0,this._jobs[h]=l,this.counts[l]++}remove(h){var l;return l=this._jobs[h],l!=null&&(this.counts[l]--,delete this._jobs[h]),l!=null}jobStatus(h){var l;return(l=this.status[this._jobs[h]])!=null?l:null}statusJobs(h){var l,f,y,_,v;if(h!=null){if(f=this.status.indexOf(h),f<0)throw new H(`status must be one of ${this.status.join(", ")}`);y=this._jobs,_=[];for(l in y)v=y[l],v===f&&_.push(l);return _}else return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce(((h,l,f)=>(h[this.status[f]]=l,h)),{})}};var ye=ce,ne,le;ne=i,le=class{constructor(h,l){this.schedule=this.schedule.bind(this),this.name=h,this.Promise=l,this._running=0,this._queue=new ne}isEmpty(){return this._queue.length===0}async _tryToRun(){var h,l,f,y,_,v,$;if(this._running<1&&this._queue.length>0)return this._running++,{task:$,args:h,resolve:_,reject:y}=this._queue.shift(),l=await(async function(){try{return v=await $(...h),function(){return _(v)}}catch(z){return f=z,function(){return y(f)}}})(),this._running--,this._tryToRun(),l()}schedule(h,...l){var f,y,_;return _=y=null,f=new this.Promise(function(v,$){return _=v,y=$}),this._queue.push({task:h,args:l,resolve:_,reject:y}),this._tryToRun(),f}};var Be=le,_e="2.19.5",Oe={version:_e},ve=Object.freeze({version:_e,default:Oe}),L=()=>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."),se=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),N,B,Z,De,tt,Ve;Ve=o,N=c,De=L,Z=q,tt=se,B=(function(){class D{constructor(l={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=l,Ve.load(this.limiterOptions,this.defaults,this),this.Events=new N(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 Z(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(l=""){var f;return(f=this.instances[l])!=null?f:(()=>{var y;return y=this.instances[l]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${l}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",y,l),y})()}async deleteKey(l=""){var f,y;return y=this.instances[l],this.connection&&(f=await this.connection.__runCommand__(["del",...tt.allKeys(`${this.id}-${l}`)])),y!=null&&(delete this.instances[l],await y.disconnect()),y!=null||f>0}limiters(){var l,f,y,_;f=this.instances,y=[];for(l in f)_=f[l],y.push({key:l,limiter:_});return y}keys(){return Object.keys(this.instances)}async clusterKeys(){var l,f,y,_,v,$,z,pe,he;if(this.connection==null)return this.Promise.resolve(this.keys());for($=[],l=null,he=`b_${this.id}-`.length,f=9;l!==0;)for([pe,y]=await this.connection.__runCommand__(["scan",l??0,"match",`b_${this.id}-*_settings`,"count",1e4]),l=~~pe,_=0,z=y.length;_<z;_++)v=y[_],$.push(v.slice(he,-f));return $}_startAutoCleanup(){var l;return clearInterval(this.interval),typeof(l=this.interval=setInterval(async()=>{var f,y,_,v,$,z;$=Date.now(),_=this.instances,v=[];for(y in _){z=_[y];try{await z._store.__groupCheck__($)?v.push(this.deleteKey(y)):v.push(void 0)}catch(pe){f=pe,v.push(z.Events.trigger("error",f))}}return v},this.timeout/2)).unref=="function"?l.unref():void 0}updateSettings(l={}){if(Ve.overwrite(l,this.defaults,this),Ve.overwrite(l,l,this.limiterOptions),l.timeout!=null)return this._startAutoCleanup()}disconnect(l=!0){var f;if(!this.sharedConnection)return(f=this.connection)!=null?f.disconnect(l):void 0}}return D.prototype.defaults={timeout:1e3*60*5,connection:null,Promise,id:"group-key"},D}).call(r);var cr=B,Ho,qo,Bo;Bo=o,qo=c,Ho=(function(){class D{constructor(l={}){this.options=l,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((l,f)=>this._resolve=l)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(l){var f;return this._arr.push(l),f=this._promise,this._arr.length===this.maxSize?this._flush():this.maxTime!=null&&this._arr.length===1&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),f}}return D.prototype.defaults={maxTime:null,maxSize:null,Promise},D}).call(r);var yc=Ho,_c=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),wc=e(ve),Vo,Wo,ur,lr,zo,pr,Jo,Ko,Qo,dr,je,Yo=[].splice;pr=10,Wo=5,je=o,Jo=m,lr=O,zo=M,Ko=_c,ur=c,Qo=ye,dr=Be,Vo=(function(){class D{constructor(l={},...f){var y,_;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(l,f),je.load(l,this.instanceDefaults,this),this._queues=new Jo(pr),this._scheduled={},this._states=new Qo(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new ur(this),this._submitLock=new dr("submit",this.Promise),this._registerLock=new dr("register",this.Promise),_=je.load(l,this.storeDefaults,{}),this._store=(function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return y=je.load(l,this.redisStoreDefaults,{}),new Ko(this,_,y);if(this.datastore==="local")return y=je.load(l,this.localStoreDefaults,{}),new zo(this,_,y);throw new D.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}).call(this),this._queues.on("leftzero",()=>{var v;return(v=this._store.heartbeat)!=null&&typeof v.ref=="function"?v.ref():void 0}),this._queues.on("zero",()=>{var v;return(v=this._store.heartbeat)!=null&&typeof v.unref=="function"?v.unref():void 0})}_validateOptions(l,f){if(!(l!=null&&typeof l=="object"&&f.length===0))throw new D.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(l){return this._store.__publish__(l)}disconnect(l=!0){return this._store.__disconnect__(l)}chain(l){return this._limiter=l,this}queued(l){return this._queues.queued(l)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(l){return this._states.jobStatus(l)}jobs(l){return this._states.statusJobs(l)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(l=1){return this._store.__check__(l)}_clearGlobalState(l){return this._scheduled[l]!=null?(clearTimeout(this._scheduled[l].expiration),delete this._scheduled[l],!0):!1}async _free(l,f,y,_){var v,$;try{if({running:$}=await this._store.__free__(l,y.weight),this.Events.trigger("debug",`Freed ${y.id}`,_),$===0&&this.empty())return this.Events.trigger("idle")}catch(z){return v=z,this.Events.trigger("error",v)}}_run(l,f,y){var _,v,$;return f.doRun(),_=this._clearGlobalState.bind(this,l),$=this._run.bind(this,l,f),v=this._free.bind(this,l,f),this._scheduled[l]={timeout:setTimeout(()=>f.doExecute(this._limiter,_,$,v),y),expiration:f.options.expiration!=null?setTimeout(function(){return f.doExpire(_,$,v)},y+f.options.expiration):void 0,job:f}}_drainOne(l){return this._registerLock.schedule(()=>{var f,y,_,v,$;return this.queued()===0?this.Promise.resolve(null):($=this._queues.getFirst(),{options:v,args:f}=_=$.first(),l!=null&&v.weight>l?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${v.id}`,{args:f,options:v}),y=this._randomIndex(),this._store.__register__(y,v.weight,v.expiration).then(({success:z,wait:pe,reservoir:he})=>{var Mt;return this.Events.trigger("debug",`Drained ${v.id}`,{success:z,args:f,options:v}),z?($.shift(),Mt=this.empty(),Mt&&this.Events.trigger("empty"),he===0&&this.Events.trigger("depleted",Mt),this._run(y,_,pe),this.Promise.resolve(v.weight)):this.Promise.resolve(null)})))})}_drainAll(l,f=0){return this._drainOne(l).then(y=>{var _;return y!=null?(_=l!=null?l-y:l,this._drainAll(_,f+y)):this.Promise.resolve(f)}).catch(y=>this.Events.trigger("error",y))}_dropAllQueued(l){return this._queues.shiftAll(function(f){return f.doDrop({message:l})})}stop(l={}){var f,y;return l=je.load(l,this.stopDefaults),y=_=>{var v;return v=()=>{var $;return $=this._states.counts,$[0]+$[1]+$[2]+$[3]===_},new this.Promise(($,z)=>v()?$():this.on("done",()=>{if(v())return this.removeAllListeners("done"),$()}))},f=l.dropWaitingJobs?(this._run=function(_,v){return v.doDrop({message:l.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var _,v,$;v=this._scheduled;for(_ in v)$=v[_],this.jobStatus($.job.options.id)==="RUNNING"&&(clearTimeout($.timeout),clearTimeout($.expiration),$.job.doDrop({message:l.dropErrorMessage}));return this._dropAllQueued(l.dropErrorMessage),y(0)}))):this.schedule({priority:pr-1,weight:0},()=>y(1)),this._receive=function(_){return _._reject(new D.prototype.BottleneckError(l.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new D.prototype.BottleneckError("stop() has already been called")),f}async _addToQueue(l){var f,y,_,v,$,z,pe;({args:f,options:v}=l);try{({reachedHWM:$,blocked:y,strategy:pe}=await this._store.__submit__(this.queued(),v.weight))}catch(he){return _=he,this.Events.trigger("debug",`Could not queue ${v.id}`,{args:f,options:v,error:_}),l.doDrop({error:_}),!1}return y?(l.doDrop(),!0):$&&(z=pe===D.prototype.strategy.LEAK?this._queues.shiftLastFrom(v.priority):pe===D.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(v.priority+1):pe===D.prototype.strategy.OVERFLOW?l:void 0,z?.doDrop(),z==null||pe===D.prototype.strategy.OVERFLOW)?(z==null&&l.doDrop(),$):(l.doQueue($,y),this._queues.push(l),await this._drainAll(),$)}_receive(l){return this._states.jobStatus(l.options.id)!=null?(l._reject(new D.prototype.BottleneckError(`A job with the same id already exists (id=${l.options.id})`)),!1):(l.doReceive(),this._submitLock.schedule(this._addToQueue,l))}submit(...l){var f,y,_,v,$,z,pe;return typeof l[0]=="function"?($=l,[y,...l]=$,[f]=Yo.call(l,-1),v=je.load({},this.jobDefaults)):(z=l,[v,y,...l]=z,[f]=Yo.call(l,-1),v=je.load(v,this.jobDefaults)),pe=(...he)=>new this.Promise(function(Mt,Rc){return y(...he,function(...Zo){return(Zo[0]!=null?Rc:Mt)(Zo)})}),_=new lr(pe,l,v,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),_.promise.then(function(he){return typeof f=="function"?f(...he):void 0}).catch(function(he){return Array.isArray(he)?typeof f=="function"?f(...he):void 0:typeof f=="function"?f(he):void 0}),this._receive(_)}schedule(...l){var f,y,_;return typeof l[0]=="function"?([_,...l]=l,y={}):[y,_,...l]=l,f=new lr(_,l,y,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(f),f.promise}wrap(l){var f,y;return f=this.schedule.bind(this),y=function(..._){return f(l.bind(this),..._)},y.withOptions=function(_,...v){return f(_,l,...v)},y}async updateSettings(l={}){return await this._store.__updateSettings__(je.overwrite(l,this.storeDefaults)),je.overwrite(l,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(l=0){return this._store.__incrementReservoir__(l)}}return D.default=D,D.Events=ur,D.version=D.prototype.version=wc.version,D.strategy=D.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},D.BottleneckError=D.prototype.BottleneckError=w,D.Group=D.prototype.Group=cr,D.RedisConnection=D.prototype.RedisConnection=L,D.IORedisConnection=D.prototype.IORedisConnection=q,D.Batcher=D.prototype.Batcher=yc,D.prototype.jobDefaults={priority:Wo,weight:1,expiration:null,id:"<no-id>"},D.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:D.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},D.prototype.localStoreDefaults={Promise,timeout:null,heartbeatInterval:250},D.prototype.redisStoreDefaults={Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},D.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise},D.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},D}).call(r);var Xo=Vo,Ec=Xo;return Ec}))});function Ju(r,e,t){return r.retryLimiter.schedule(Ku,r,e,t)}async function Ku(r,e,t){let{pathname:s}=new URL(t.url,"http://github.test"),o=Qu(t.method,s),n=!o&&t.method!=="GET"&&t.method!=="HEAD",i=t.method==="GET"&&s.startsWith("/search/"),a=s.startsWith("/graphql"),u=~~e.retryCount>0?{priority:0,weight:0}:{};r.clustering&&(u.expiration=1e3*60),(n||a)&&await r.write.key(r.id).schedule(u,eo),n&&r.triggersNotification(s)&&await r.notifications.key(r.id).schedule(u,eo),i&&await r.search.key(r.id).schedule(u,eo);let p=(o?r.auth:r.global).key(r.id).schedule(u,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 Qu(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 Xu(r){let t=`^(?:${r.map(s=>s.split("/").map(o=>o.startsWith("{")?"(?:.+?)":o).join("/")).map(s=>`(?:${s})`).join("|")})[^/]*$`;return new RegExp(t,"i")}function Cs(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),_t.global==null&&Zu(s,a);let c=Object.assign({clustering:i!=null,triggersNotification:Ai,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new s,id:o,..._t},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={},u=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[R,g,v]=m.args,{pathname:k}=new URL(v.url,"http://github.test");if(!(k.startsWith("/graphql")&&p.status!==401||p.status===403||p.status===429))return;let C=~~g.retryCount;g.retryCount=C,v.request.retryCount=C;let{wantRetry:S,retryAfter:_=0}=await(async function(){if(/\bsecondary rate\b/i.test(p.message)){let G=Number(p.response.headers["retry-after"])||R.fallbackSecondaryRateRetryAfter;return{wantRetry:await u.trigger("secondary-limit",G,v,r,C),retryAfter:G}}if(p.response.headers!=null&&p.response.headers["x-ratelimit-remaining"]==="0"||(p.response.data?.errors??[]).some(G=>G.type==="RATE_LIMITED")){let G=new Date(~~p.response.headers["x-ratelimit-reset"]*1e3).getTime(),F=Math.max(Math.ceil((G-Date.now())/1e3)+1,0);return{wantRetry:await u.trigger("rate-limit",F,v,r,C),retryAfter:F}}return{}})();if(S)return g.retryCount++,_*R.retryAfterBaseValue}),r.hook.wrap("request",su.bind(null,c)),{}}var Di,tu,no,nu,xi,Ii,Rt,au,Fi=A(()=>{Di=Q($i(),1),tu="0.0.0-development",no=()=>Promise.resolve();nu=["/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"];xi=iu(nu),Ii=xi.test.bind(xi),Rt={},au=function(r,e){Rt.global=new r.Group({id:"octokit-global",maxConcurrent:10,...e}),Rt.auth=new r.Group({id:"octokit-auth",maxConcurrent:1,...e}),Rt.search=new r.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...e}),Rt.write=new r.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...e}),Rt.notifications=new r.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...e})};Os.VERSION=tu;Os.triggersNotification=Ii});function xs(r){return r.toLocaleTimeString("en-US",{hour12:!1})}function fe(r){return $s&&Ui===r||($s=new cu({auth:r,throttle:{onRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<2?(y(Gs,`Rate limit hit (retry ${o+1}/2, waiting ${e}s, resets at ${xs(i)}) \u2014 ${n.method} ${n.url}`),!0):(y(Gs,`Rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${xs(i)})`),!1)},onSecondaryRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<1?(y(Gs,`Secondary rate limit hit (retry ${o+1}/1, waiting ${e}s, resets at ${xs(i)}) \u2014 ${n.method} ${n.url}`),!0):(y(Gs,`Secondary rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${xs(i)})`),!1)}}}),Ui=r),$s}async function io(r){let e=fe(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 Gs,cu,$s,Ui,xt=A(()=>{"use strict";Gi();Fi();de();Gs="github",cu=Oi.plugin(Os),$s=null,Ui=null});async function Ds(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 ao=A(()=>{"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 Yt=A(()=>{"use strict"});function tt(){return co||(co=new Fs),co}async function Xt(r,e,t){let s=r.getInflight(e);if(s)return T(ut,`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),u=l.headers?.etag;return u&&r.set(e,u,l.data),l.data}catch(l){if(uu(l)){let u=r.get(e);if(u)return T(ut,`304 cache hit for ${e}`),u.body}throw l}})(),i=r.setInflight(e,n);try{return await n}finally{i()}}async function Us(r,e,t,s){let o=r.getIfFresh(e,t);if(o)return T(ut,`Time-based cache hit for ${e}`),o;let n=await s();return r.set(e,"",n),n}function uu(r){return _e(r)===304}var Ce,Is,Mi,ut,lu,Fs,co,Dt=A(()=>{"use strict";Ce=Q(require("fs"),1),Is=Q(require("path"),1),Mi=Q(require("crypto"),1);Re();de();ie();ut="http-cache",lu=1440*60*1e3,Fs=class{cacheDir;inflightRequests=new Map;constructor(e){this.cacheDir=e??vs()}keyFor(e){return Mi.createHash("sha256").update(e).digest("hex")}pathFor(e){return Is.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=Ce.readFileSync(t,"utf-8"),o=JSON.parse(s);return o.url!==e?(T(ut,`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{Ce.writeFileSync(this.pathFor(e),JSON.stringify(o),{encoding:"utf-8",mode:384}),T(ut,`Cached response for ${e}`)}catch(n){T(ut,`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=lu){let t=0;try{let s=Ce.readdirSync(this.cacheDir),o=Date.now();for(let n of s){if(!n.endsWith(".json"))continue;let i=Is.join(this.cacheDir,n);try{let a=Ce.readFileSync(i,"utf-8"),c=JSON.parse(a);o-new Date(c.cachedAt).getTime()>e&&(Ce.unlinkSync(i),t++)}catch{try{Ce.unlinkSync(i),t++}catch{}}}}catch{}return t>0&&T(ut,`Evicted ${t} stale cache entries`),t}clear(){try{let e=Ce.readdirSync(this.cacheDir);for(let t of e)t.endsWith(".json")&&Ce.unlinkSync(Is.join(this.cacheDir,t));T(ut,"Cache cleared")}catch{}}size(){try{return Ce.readdirSync(this.cacheDir).filter(e=>e.endsWith(".json")).length}catch{return 0}}},co=null});function lo(r,e,t){if(t==="cancelled"||t==="timed_out")return"infrastructure";let s=r.toLowerCase();if(ji.some(o=>o.test(s)))return"auth_gate";if(Li.some(o=>o.test(s)))return"fork_limitation";if(Ni.some(o=>o.test(s)))return"infrastructure";if(e){let o=e.toLowerCase();if(ji.some(n=>n.test(o)))return"auth_gate";if(Li.some(n=>n.test(o)))return"fork_limitation";if(Ni.some(n=>n.test(o)))return"infrastructure"}return"actionable"}function Ms(r,e){return r.map(t=>{let s=e?.get(t);return{name:t,category:lo(t,void 0,s),conclusion:s}})}function Hi(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 qi(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 Bi(r,e,t){let{hasFailingChecks:s,hasPendingChecks:o,hasSuccessfulChecks:n,failingCheckNames:i,failingCheckConclusions:a}=r,{effectiveCombinedState:c,hasStatuses:l,failingStatusNames:u}=e,p=[...i,...u];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 Li,ji,Ni,uo=A(()=>{"use strict";Li=[/vercel/i,/netlify/i,/\bpreview\s*deploy/i,/\bdeploy\s*preview/i,/storybook/i,/chromatic/i,/percy/i,/cloudflare pages/i],ji=[/authoriz/i,/approval/i,/\bcla\b/i,/license\/cla/i],Ni=[/\binstall\s*(os\s*)?dep(endenc|s\b)/i,/\bsetup\s+fail(ed|ure)?\b/i,/\bservice\s*unavailable/i,/\binfrastructure/i]});function It(r){return r.includes("[bot]")||du.has(r.toLowerCase())}function Zt(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 du,Ls=A(()=>{"use strict";du=new Set(["allcontributors","changeset-bot","claassistant","codecov-commenter","greenkeeper","imgbot","netlify","renovate","snyk-bot","sonarcloud","stale","vercel"])});function Vi(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 zi(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 pu(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 gu(r,e){return e.find(t=>t.pull_request_review_id===r&&t.body?.trim())?.body?.trim()}function Wi(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 u=c.user?.login||"unknown";if(!l&&c.state==="COMMENTED"&&c.id!=null&&pu(c.id,t))continue;let p=l||(c.id!=null?gu(c.id,t):void 0)||(c.state==="CHANGES_REQUESTED"?"(requested changes via inline review comments)":"(posted inline review comments)");o.push({author:u,body:p,createdAt:c.submitted_at,isUser:u.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"||It(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&&Zt(a.body)&&(a=void 0),{hasUnrespondedComment:!!a,lastMaintainerComment:a}}var Ji=A(()=>{"use strict";Ls()});function Ki(r){return mu.test(r.toLowerCase())}function Qi(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=>!Ki(l)),c=n+a.length;return{hasIncompleteChecklist:a.length>0,checklistStats:{checked:n,total:c}}}var mu,po=A(()=>{"use strict";mu=/\(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 Yi(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 Xi=A(()=>{"use strict"});function js(r){if(r.status==="needs_addressing"&&r.actionReason){let e=hu[r.actionReason];if(e)return{displayLabel:e.label,displayDescription:e.description(r)}}if(r.status==="waiting_on_maintainer"&&r.waitReason){let e=fu[r.waitReason];if(e)return{displayLabel:e.label,displayDescription:e.description(r)}}return y("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 hu,fu,go=A(()=>{"use strict";de();hu={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"}},fu={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 yu(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 Zi(r,e,t,s,o,n){if(!e)return Et();let i=tt(),a=n?`:stars${n.minStars}`:"",c=`pr-counts:v3:${s}:${e}${a}`,l=i.getIfFresh(c,bu);if(l&&yu(l))return T(Ue,`Using cached ${s} PR counts for @${e}`),{repos:new Map(l.reposEntries),monthlyCounts:l.monthlyCounts,monthlyOpenedCounts:l.monthlyOpenedCounts,dailyActivityCounts:l.dailyActivityCounts};T(Ue,`Fetching ${s} PR counts for @${e}...`);let u=new Map,p={},m={},R={},g=1,v=0,k;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});k=h.total_count;for(let C of h.items){let S=bt(C.html_url);if(!S){y(Ue,`Skipping ${s} PR with unparseable URL: ${C.html_url}`);continue}let{owner:_}=S,G=`${_}/${S.repo}`;if(Ze(_,e)||n&&Qe(n.knownStarCounts.get(G),n.minStars))continue;let F=o(u,G,C);if(F){let H=F.slice(0,7);p[H]=(p[H]||0)+1;let te=F.slice(0,10);te.length===10&&(R[te]=(R[te]||0)+1)}if(C.created_at){let H=C.created_at.slice(0,7);m[H]=(m[H]||0)+1;let te=C.created_at.slice(0,10);te.length===10&&(R[te]=(R[te]||0)+1)}}if(v+=h.items.length,v>=h.total_count||v>=1e3||h.items.length===0||g>=mo)break;g++}return v<k&&g>=mo&&y(Ue,`Pagination capped at ${mo} pages: fetched ${v} of ${k} ${s} PRs. Stats may be incomplete for prolific contributors.`),T(Ue,`Found ${v} ${s} PRs across ${u.size} repos`),i.set(c,"",{reposEntries:Array.from(u.entries()),monthlyCounts:p,monthlyOpenedCounts:m,dailyActivityCounts:R}),{repos:u,monthlyCounts:p,monthlyOpenedCounts:m,dailyActivityCounts:R}}function ea(r,e,t){return Zi(r,e,"is:merged","merged",(s,o,n)=>{n.pull_request?.merged_at||y(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 ta(r,e,t){return Zi(r,e,"is:closed is:unmerged","closed",(s,o,n)=>(s.set(o,(s.get(o)||0)+1),n.closed_at||""),t)}async function sa(r,e,t,s,o,n){if(!e.githubUsername)return y(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];T(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 u of c.items){let p=we(u.html_url);if(!p){y(Ue,`Could not parse GitHub URL from API response: ${u.html_url}`);continue}let m=`${p.owner}/${p.repo}`;Ze(p.owner,e.githubUsername)||l.push(n(u,{owner:p.owner,repo:m,number:p.number}))}return T(Ue,`Found ${l.length} recently ${s} PRs`),l}async function ra(r,e,t=7){return sa(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 oa(r,e,t=7){return sa(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||y(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,bu,mo,Ns=A(()=>{"use strict";Re();gt();de();Dt();Ue="github-stats",bu=1440*60*1e3,mo=3});var Hs,vu,Tt,na=A(()=>{"use strict";xt();zt();Re();ao();ie();Yt();de();Dt();uo();Ji();po();Xi();go();Ns();go();uo();po();Hs="pr-monitor",vu=at,Tt=class r{octokit;stateManager;constructor(e){this.octokit=fe(e),this.stateManager=I()}async fetchUserOpenPRs(){let e=this.stateManager.getState().config;if(!e.githubUsername)throw new Ye("No GitHub username configured. Run setup first.");T("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;T("pr-monitor",`Found ${i} open PRs`);let a=Math.min(Math.ceil(i/o),10);for(;s<a;){s++;let p=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open author:${e.githubUsername}`,sort:"updated",order:"desc",per_page:o,page:s});t.push(...p.data.items)}let c=[],l=[],u=t.filter(p=>{if(!p.pull_request)return!1;let m=bt(p.html_url);return m?!Ze(m.owner,e.githubUsername):(y("pr-monitor",`Skipping PR with unparseable URL: ${p.html_url}`),!1)});return T("pr-monitor",`Filtered to ${u.length} PRs after excluding own repos`),await Mr("pr-monitor",`Fetch details for ${u.length} PRs`,async()=>{await Ds(u,async p=>{try{T("pr-monitor",`Fetching details for ${p.html_url}`);let m=await this.fetchPRDetails(p.html_url);m&&c.push(m)}catch(m){let R=O(m);y("pr-monitor",`Error fetching ${p.html_url}: ${R}`),l.push({prUrl:p.html_url,error:R})}},vu)}),c.sort((p,m)=>p.status===m.status?0:p.status==="needs_addressing"?-1:1),{prs:c,failures:l}}async fetchPRDetails(e){let t=we(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,u]=await Promise.all([this.octokit.pulls.get({owner:s,repo:o,pull_number:n}),Fe(L=>this.octokit.issues.listComments({owner:s,repo:o,issue_number:n,per_page:100,page:L})),this.octokit.pulls.listReviews({owner:s,repo:o,pull_number:n}),Fe(L=>this.octokit.pulls.listReviewComments({owner:s,repo:o,pull_number:n,per_page:100,page:L})).catch(L=>{let q=_e(L);if(q===429)throw L;if(q===403){let X=O(L).toLowerCase();if(X.includes("rate limit")||X.includes("abuse detection"))throw L;return y("pr-monitor",`403 fetching review comments for ${s}/${o}#${n}: ${X}`),[]}return q===404?T("pr-monitor",`Review comments 404 for ${s}/${o}#${n} (likely no inline comments)`):y("pr-monitor",`Failed to fetch review comments for ${s}/${o}#${n} (status ${q??"unknown"}): self-reply detection will be skipped`),[]})]),p=a.data,m=l.data,R=Vi(m),g=this.hasMergeConflict(p.mergeable,p.mergeable_state),{hasUnrespondedComment:v,lastMaintainerComment:k}=Wi(c,m,u,i.githubUsername),h=this.getCIStatus(s,o,p.head.sha),S=v||R==="changes_requested"?this.octokit.repos.getCommit({owner:s,repo:o,ref:p.head.sha}).then(L=>({date:L.data.commit.author?.date,author:L.data.author?.login})).catch(L=>{let q=_e(L);if(q===429)throw L;if(q===403){let X=O(L).toLowerCase();if(X.includes("rate limit")||X.includes("abuse detection"))throw L;y("pr-monitor",`403 fetching commit date for ${s}/${o}@${p.head.sha.slice(0,7)}: ${O(L)}`);return}y("pr-monitor",`Failed to fetch commit date for ${s}/${o}@${p.head.sha.slice(0,7)}: ${O(L)}`)}):Promise.resolve(void 0),[{status:_,failingCheckNames:G,failingCheckConclusions:F},H]=await Promise.all([h,S]),te=H?.date,ne=H?.author,{hasIncompleteChecklist:me,checklistStats:Ne}=Qi(p.body||""),Ee=Yi(k?.body,R),be=xe(new Date(p.updated_at),new Date),ze=zi(m),ve=Ms(G,F),Oe=_==="failing"&&ve.some(L=>L.category==="actionable"),{status:Te,actionReason:U,waitReason:N,stalenessTier:se}=this.determineStatus({ciStatus:_,hasMergeConflict:g,hasUnrespondedComment:v,hasIncompleteChecklist:me,reviewDecision:R,daysSinceActivity:be,dormantThreshold:i.dormantThresholdDays,approachingThreshold:i.approachingDormantDays,latestCommitDate:te,latestCommitAuthor:ne,contributorUsername:i.githubUsername,lastMaintainerCommentDate:k?.createdAt,latestChangesRequestedDate:ze,hasActionableCIFailure:Oe});return this.buildFetchedPR({id:p.id,url:e,repo:`${s}/${o}`,number:n,title:p.title,status:Te,actionReason:U,waitReason:N,stalenessTier:se,createdAt:p.created_at,updatedAt:p.updated_at,daysSinceActivity:be,ciStatus:_,failingCheckNames:G,classifiedChecks:ve,hasMergeConflict:g,reviewDecision:R,hasUnrespondedComment:v,lastMaintainerComment:k,latestCommitDate:te,hasIncompleteChecklist:me,checklistStats:Ne,maintainerActionHints:Ee})}buildFetchedPR(e){let t={...e,displayLabel:"",displayDescription:""},{displayLabel:s,displayDescription:o}=js(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:u,latestCommitAuthor:p,contributorUsername:m,lastMaintainerCommentDate:R,latestChangesRequestedDate:g,hasActionableCIFailure:v=!0}=e,k="active";a>=c?k="dormant":a>=l&&(k="approaching_dormant");let h=u&&this.isContributorCommit(p,m)?u:void 0;return o?h&&R&&this.isCommitAfterComment(h,R)?g&&h<g?{status:"needs_addressing",actionReason:"needs_response",stalenessTier:k}:t==="failing"&&v?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:k}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:k}:{status:"needs_addressing",actionReason:"needs_response",stalenessTier:k}:i==="changes_requested"&&g?!h||h<g?{status:"needs_addressing",actionReason:"needs_changes",stalenessTier:k}:t==="failing"&&v?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:k}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:k}:t==="failing"?v?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:k}:{status:"waiting_on_maintainer",waitReason:"ci_blocked",stalenessTier:k}:s?{status:"needs_addressing",actionReason:"merge_conflict",stalenessTier:k}:n?{status:"needs_addressing",actionReason:"incomplete_checklist",stalenessTier:k}:i==="approved"&&(t==="passing"||t==="unknown")?{status:"waiting_on_maintainer",waitReason:"pending_merge",stalenessTier:k}:{status:"waiting_on_maintainer",waitReason:"pending_review",stalenessTier:k}}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 R=_e(m);if(R===429)throw m;if(R===403){let g=O(m).toLowerCase();if(g.includes("rate limit")||g.includes("abuse detection"))throw m}return R===404?T("pr-monitor",`Check runs 404 for ${e}/${t}@${s.slice(0,7)} (no checks configured)`):y("pr-monitor",`Non-404 error fetching check runs for ${e}/${t}@${s.slice(0,7)}: ${R??m}`),null})]),i=o.data,a=n?.data?.check_runs||[],c=new Map;for(let m of a){let R=c.get(m.name);(!R||new Date(m.started_at??0)>new Date(R.started_at??0))&&c.set(m.name,m)}let l=[...c.values()],u=Hi(l),p=qi(i);return Bi(u,p,l.length)}catch(o){let n=_e(o);if(n===401||n===403||n===429)throw o;return n===404?(T("pr-monitor",`CI check 404 for ${e}/${t} (no CI configured)`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}):(y("pr-monitor",`Failed to check CI for ${e}/${t}@${s.slice(0,7)}: ${O(o)}`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map})}}async fetchUserMergedPRCounts(e){let t=this.stateManager.getState().config;return ea(this.octokit,t.githubUsername,e)}async fetchUserClosedPRCounts(e){let t=this.stateManager.getState().config;return ta(this.octokit,t.githubUsername,e)}async fetchRepoStarCounts(e){if(e.length===0)return new Map;T(Hs,`Fetching star counts for ${e.length} repos...`);let t=new Map,s=tt(),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 u=>{let p=u.split("/");if(p.length!==2||!p[0]||!p[1])throw new Y(`Malformed repo identifier: "${u}"`);let[m,R]=p,g=`/repos/${m}/${R}`,v=await Xt(s,g,k=>this.octokit.repos.get({owner:m,repo:R,headers:k}));return{repo:u,stars:v.stargazers_count}})),l=0;for(let u=0;u<c.length;u++){let p=c[u];p.status==="fulfilled"?t.set(p.value.repo,p.value.stars):(l++,y(Hs,`Failed to fetch stars for ${a[u]}: ${O(p.reason)}`))}if(l===a.length&&a.length>0){let u=o.length-i-n;u>0&&y(Hs,`Entire chunk failed, aborting remaining ${u} repos`);break}}return T(Hs,`Fetched star counts for ${t.size}/${e.length} repos`),t}async fetchRecentlyClosedPRs(e=7){let t=this.stateManager.getState().config;return ra(this.octokit,t,e)}async fetchRecentlyMergedPRs(e=7){let t=this.stateManager.getState().config;return oa(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 qs(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=>ho.has(s))}function aa(r){return!r.labels||!Array.isArray(r.labels)?!1:r.labels.map(s=>(typeof s=="string"?s:s.name||"").toLowerCase()).filter(s=>ia.has(s)).length>=5}function ca(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 fo(r){let e=new Set,t=new Map;for(let s of r){let o=s.repository_url.split("/").slice(-2).join("/");if(aa(s)){e.add(o);continue}s.title&&ca(s.title)&&t.set(o,(t.get(o)||0)+1)}for(let[s,o]of t)o>=3&&e.add(s);return e}function Bs(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 ho,ia,bo=A(()=>{"use strict";ho=new Set(["documentation","docs","typo","spelling"]);ia=new Set(["good first issue","hacktoberfest","easy","up-for-grabs","first-timers-only","beginner-friendly","beginner","starter","newbie","low-hanging-fruit","community"])});function yo(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 es(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=xe(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 Vs=A(()=>{"use strict";Re()});function ua(){let r=Date.now();for(let[e,t]of st.entries())r-t.fetchedAt>da&&st.delete(e);if(st.size>la){let t=Array.from(st.entries()).sort((s,o)=>s[1].fetchedAt-o[1].fetchedAt).slice(0,st.size-la);for(let[s]of t)st.delete(s)}}var dt,_u,st,da,wu,la,zs,pa=A(()=>{"use strict";Yt();Re();ie();de();Dt();Vs();dt="issue-vetting",_u=at,st=new Map,da=3600*1e3,wu=14400*1e3,la=100;zs=class{octokit;stateManager;constructor(e,t){this.octokit=e,this.stateManager=t}async vetIssue(e){let t=we(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,u,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)]),R=c.passed,g=l.passed,v=this.analyzeRequirements(a.body||""),k=u.checkFailed?!0:u.isActive,h={passedAllChecks:R&&g&&k&&v,checks:{noExistingPR:R,notClaimed:g,projectActive:k,clearRequirements:v,contributionGuidelinesFound:!!p},contributionGuidelines:p,notes:[]};R||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"}`),u.checkFailed?h.notes.push(`Could not verify project activity: ${u.failureReason||"API error"}`):u.isActive||h.notes.push("Project may be inactive"),v||h.notes.push("Issue requirements are unclear"),p||h.notes.push("No CONTRIBUTING.md found");let C={id:a.id,url:e,repo:i,number:n,title:a.title,status:"candidate",labels:a.labels.map(Te=>typeof Te=="string"?Te:Te.name||""),createdAt:a.created_at,updatedAt:a.updated_at,vetted:!0,vettingResult:h},S=[],_=[];R||S.push("Has existing PR"),g||S.push("Already claimed"),!u.isActive&&!u.checkFailed&&S.push("Inactive project"),v||S.push("Unclear requirements"),R&&_.push("No existing PR"),g&&_.push("Not claimed"),u.isActive&&!u.checkFailed&&_.push("Active project"),v&&_.push("Clear requirements"),p&&_.push("Has contribution guidelines");let G=this.stateManager.getState().config,F=this.stateManager.getRepoScore(i),H=F&&F.mergedPRCount>0?F.mergedPRCount:m;H>0?_.push(`Trusted project (${H} PR${H>1?"s":""} merged)`):G.trustedProjects.includes(i)&&_.push("Trusted project (previous PR merged)"),F&&(F.closedWithoutMergeCount>0&&H===0?S.push("User has rejected PR(s) in this repo with no successful merges"):F.closedWithoutMergeCount>0&&H>0&&h.notes.push(`Mixed history: ${H} merged, ${F.closedWithoutMergeCount} closed without merge`));let te=i.split("/")[0],ne=!1;te&&i.includes("/")&&(ne=Object.values(this.stateManager.getState().repoScores).some(Te=>Te.repo&&Te.mergedPRCount>0&&Te.repo.startsWith(te+"/")&&Te.repo!==i)),ne&&_.push(`Org affinity (merged PRs in other ${te} repos)`);let me;h.passedAllChecks?me="approve":S.length>2?me="skip":me="needs_review";let Ne=u.checkFailed||c.inconclusive||l.inconclusive;me==="approve"&&Ne&&(me="needs_review",h.notes.push("Recommendation downgraded: one or more checks were inconclusive"));let Ee=yo(u.stargazersCount??0,u.forksCount??0);u.checkFailed&&Ee===0&&h.notes.push("Repo quality bonus unavailable: could not fetch star/fork counts due to API error");let be=this.getRepoScore(i),ze=es({repoScore:be,hasExistingPR:!R,isClaimed:!g,clearRequirements:v,hasContributionGuidelines:!!p,issueUpdatedAt:a.updated_at,closedWithoutMergeCount:F?.closedWithoutMergeCount??0,mergedPRCount:H,orgHasMergedPRs:ne,repoQualityBonus:Ee}),ve=this.stateManager.getStarredRepos(),Oe="normal";return H>0?Oe="merged_pr":ve.includes(i)&&(Oe="starred"),{issue:C,vettingResult:h,projectHealth:u,recommendation:me,reasonsToSkip:S,reasonsToApprove:_,viabilityScore:ze,searchPriority:Oe}}async vetIssuesParallel(e,t,s){let o=[],n=new Map,i=0,a=0,c=0;for(let u of e){if(o.length>=t)break;c++;let p=this.vetIssue(u).then(m=>{o.length<t&&(s&&(m.searchPriority=s),o.push(m))}).catch(m=>{i++,mt(m)&&a++,y(dt,`Error vetting issue ${u}:`,O(m))}).finally(()=>n.delete(u));n.set(u,p),n.size>=_u&&await Promise.race(n.values())}await Promise.allSettled(n.values());let l=i===c&&c>0;return l&&y(dt,`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=O(o);return y(dt,`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=O(s);return y(dt,`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(u=>l.includes(u)))return{passed:!1}}return{passed:!0}}catch(n){let i=O(n);return y(dt,`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=tt(),o=`health:${e}/${t}`;try{return await Us(s,o,wu,async()=>{let n=`/repos/${e}/${t}`,i=await Xt(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,u=xe(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 R=O(m);y(dt,`Failed to check CI status for ${e}/${t}: ${R}. Defaulting to unknown.`)}return{repo:`${e}/${t}`,lastCommitAt:l,daysSinceLastCommit:u,openIssuesCount:i.open_issues_count,avgIssueResponseDays:0,ciStatus:p,isActive:u<30,stargazersCount:i.stargazers_count,forksCount:i.forks_count}})}catch(n){let i=O(n);return y(dt,`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=st.get(s);if(o&&Date.now()-o.fetchedAt<da)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 st.set(s,{guidelines:l,fetchedAt:Date.now()}),ua(),l}if(c.status==="rejected"){let l=c.reason instanceof Error?c.reason.message:String(c.reason);!l.includes("404")&&!l.includes("Not Found")&&y(dt,`Unexpected error fetching ${n[a]} from ${e}/${t}: ${l}`)}}st.set(s,{guidelines:void 0,fetchedAt:Date.now()}),ua()}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 ga,ma,K,Ru,St,ha=A(()=>{"use strict";ga=Q(require("fs"),1),ma=Q(require("path"),1);xt();zt();Re();gt();ie();de();Dt();bo();pa();Vs();bo();Vs();K="issue-discovery",Ru=900*1e3,St=class{octokit;stateManager;githubToken;vetter;rateLimitWarning=null;constructor(e){this.githubToken=e,this.octokit=fe(e),this.stateManager=I(),this.vetter=new zs(this.octokit,this.stateManager)}async cachedSearch(e){let t=`search:${e.q}:${e.sort}:${e.order}:${e.per_page}`;return Us(tt(),t,Ru,async()=>{let{data:s}=await this.octokit.search.issuesAndPullRequests(e);return s})}async fetchStarredRepos(){ue(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){ue(K,"Reached pagination limit for starred repos (500)");break}}return ue(K,`Fetched ${e.length} starred repositories`),this.stateManager.setStarredRepos(e),e}catch(t){let s=this.stateManager.getStarredRepos(),o=O(t);return y(K,"Error fetching starred repos:",o),s.length===0?y(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 u={},p=new s.Events(u);return u.on("secondary-limit",c.onSecondaryRateLimit),u.on("rate-limit",c.onRateLimit),u.on("error",d=>r.log.warn("Error in throttling-plugin limit handler",d)),c.retryLimiter.on("failed",async function(d,m){let[R,w,E]=m.args,{pathname:C}=new URL(E.url,"http://github.test");if(!(C.startsWith("/graphql")&&d.status!==401||d.status===403||d.status===429))return;let G=~~w.retryCount;w.retryCount=G,E.request.retryCount=G;let{wantRetry:I,retryAfter:O=0}=await(async function(){if(/\bsecondary rate\b/i.test(d.message)){let U=Number(d.response.headers["retry-after"])||R.fallbackSecondaryRateRetryAfter;return{wantRetry:await p.trigger("secondary-limit",U,E,r,G),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(),k=Math.max(Math.ceil((U-Date.now())/1e3)+1,0);return{wantRetry:await p.trigger("rate-limit",k,E,r,G),retryAfter:k}}return{}})();if(I)return w.retryCount++,O*R.retryAfterBaseValue}),r.hook.wrap("request",Ju.bind(null,c)),{}}var ki,zu,eo,Yu,Pi,Ai,_t,Zu,Oi=P(()=>{ki=W(Ci(),1),zu="0.0.0-development",eo=()=>Promise.resolve();Yu=["/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=Xu(Yu),Ai=Pi.test.bind(Pi),_t={},Zu=function(r,e){_t.global=new r.Group({id:"octokit-global",maxConcurrent:10,...e}),_t.auth=new r.Group({id:"octokit-auth",maxConcurrent:1,...e}),_t.search=new r.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...e}),_t.write=new r.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...e}),_t.notifications=new r.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...e})};Cs.VERSION=zu;Cs.triggersNotification=Ai});function As(r){return r.toLocaleTimeString("en-US",{hour12:!1})}function fe(r){return ks&&Gi===r||(ks=new el({auth:r,throttle:{onRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<2?(b(Ps,`Rate limit hit (retry ${o+1}/2, waiting ${e}s, resets at ${As(i)}) \u2014 ${n.method} ${n.url}`),!0):(b(Ps,`Rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${As(i)})`),!1)},onSecondaryRateLimit:(e,t,s,o)=>{let n=t,i=new Date(Date.now()+e*1e3);return o<1?(b(Ps,`Secondary rate limit hit (retry ${o+1}/1, waiting ${e}s, resets at ${As(i)}) \u2014 ${n.method} ${n.url}`),!0):(b(Ps,`Secondary rate limit exceeded, not retrying \u2014 ${n.method} ${n.url} (resets at ${As(i)})`),!1)}}}),Gi=r),ks}async function to(r){let e=fe(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 Ps,el,ks,Gi,Gt=P(()=>{"use strict";Si();Oi();ue();Ps="github",el=vi.plugin(Cs),ks=null,Gi=null});async function Os(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 so=P(()=>{"use strict"});async function xe(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 Qt=P(()=>{"use strict"});function Ye(){return ro||(ro=new $s),ro}async function Yt(r,e,t){let s=r.getInflight(e);if(s)return T(it,`Dedup hit for ${e}`),await s;let n=(async()=>{let a={},c=r.get(e);c&&(a["if-none-match"]=c.etag);try{let u=await t(a),p=u.headers?.etag;return p&&r.set(e,p,u.data),u.data}catch(u){if(sl(u)){let p=r.get(e);if(p)return T(it,`304 cache hit for ${e}`),p.body}throw u}})(),i=r.setInflight(e,n);try{return await n}finally{i()}}async function Ds(r,e,t,s){let o=r.getIfFresh(e,t);if(o)return T(it,`Time-based cache hit for ${e}`),o;let n=await s();return r.set(e,"",n),n}function sl(r){return we(r)===304}var Ce,Gs,$i,it,tl,$s,ro,$t=P(()=>{"use strict";Ce=W(require("fs"),1),Gs=W(require("path"),1),$i=W(require("crypto"),1);Re();ue();ae();it="http-cache",tl=1440*60*1e3,$s=class{cacheDir;inflightRequests=new Map;constructor(e){this.cacheDir=e??fs()}keyFor(e){return $i.createHash("sha256").update(e).digest("hex")}pathFor(e){return Gs.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=Ce.readFileSync(t,"utf-8"),o=JSON.parse(s);return o.url!==e?(T(it,`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{Ce.writeFileSync(this.pathFor(e),JSON.stringify(o),{encoding:"utf-8",mode:384}),T(it,`Cached response for ${e}`)}catch(n){T(it,`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=tl){let t=0;try{let s=Ce.readdirSync(this.cacheDir),o=Date.now();for(let n of s){if(!n.endsWith(".json"))continue;let i=Gs.join(this.cacheDir,n);try{let a=Ce.readFileSync(i,"utf-8"),c=JSON.parse(a);o-new Date(c.cachedAt).getTime()>e&&(Ce.unlinkSync(i),t++)}catch{try{Ce.unlinkSync(i),t++}catch{}}}}catch{}return t>0&&T(it,`Evicted ${t} stale cache entries`),t}clear(){try{let e=Ce.readdirSync(this.cacheDir);for(let t of e)t.endsWith(".json")&&Ce.unlinkSync(Gs.join(this.cacheDir,t));T(it,"Cache cleared")}catch{}}size(){try{return Ce.readdirSync(this.cacheDir).filter(e=>e.endsWith(".json")).length}catch{return 0}}},ro=null});function oo(r,e,t){if(t==="cancelled"||t==="timed_out")return"infrastructure";let s=r.toLowerCase();if(Ii.some(o=>o.test(s)))return"auth_gate";if(Di.some(o=>o.test(s)))return"fork_limitation";if(Fi.some(o=>o.test(s)))return"infrastructure";if(e){let o=e.toLowerCase();if(Ii.some(n=>n.test(o)))return"auth_gate";if(Di.some(n=>n.test(o)))return"fork_limitation";if(Fi.some(n=>n.test(o)))return"infrastructure"}return"actionable"}function Is(r,e){return r.map(t=>{let s=e?.get(t);return{name:t,category:oo(t,void 0,s),conclusion:s}})}function xi(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 u=(c.description||"").toLowerCase();return!(c.state==="failure"&&(u.includes("authorization required")||u.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 Li(r,e,t){let{hasFailingChecks:s,hasPendingChecks:o,hasSuccessfulChecks:n,failingCheckNames:i,failingCheckConclusions:a}=r,{effectiveCombinedState:c,hasStatuses:u,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}:!u&&t===0?{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}:{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}}var Di,Ii,Fi,no=P(()=>{"use strict";Di=[/vercel/i,/netlify/i,/\bpreview\s*deploy/i,/\bdeploy\s*preview/i,/storybook/i,/chromatic/i,/percy/i,/cloudflare pages/i],Ii=[/authoriz/i,/approval/i,/\bcla\b/i,/license\/cla/i],Fi=[/\binstall\s*(os\s*)?dep(endenc|s\b)/i,/\bsetup\s+fail(ed|ure)?\b/i,/\bservice\s*unavailable/i,/\binfrastructure/i]});function Dt(r){return r.includes("[bot]")||rl.has(r.toLowerCase())}function Xt(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 rl,Fs=P(()=>{"use strict";rl=new Set(["allcontributors","changeset-bot","claassistant","codecov-commenter","greenkeeper","imgbot","netlify","renovate","snyk-bot","sonarcloud","stale","vercel"])});function Mi(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 ol(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 nl(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 u=c.user?.login||"unknown";o.push({author:u,body:c.body||"",createdAt:c.created_at,isUser:u.toLowerCase()===n})}for(let c of e){if(!c.submitted_at)continue;let u=(c.body||"").trim();if(!u&&c.state!=="COMMENTED"&&c.state!=="CHANGES_REQUESTED")continue;let p=c.user?.login||"unknown";if(!u&&c.state==="COMMENTED"&&c.id!=null&&ol(c.id,t))continue;let d=u||(c.id!=null?nl(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,u)=>new Date(c.createdAt).getTime()-new Date(u.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"||Dt(c.author))continue;let u=new Date(c.createdAt);(!i||u>i)&&(a={author:c.author,body:c.body.slice(0,200)+(c.body.length>200?"...":""),createdAt:c.createdAt})}return a&&Xt(a.body)&&(a=void 0),{hasUnrespondedComment:!!a,lastMaintainerComment:a}}var Hi=P(()=>{"use strict";Fs()});function qi(r){return il.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(u=>!qi(u)),c=n+a.length;return{hasIncompleteChecklist:a.length>0,checklistStats:{checked:n,total:c}}}var il,io=P(()=>{"use strict";il=/\(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 Wi=P(()=>{"use strict"});function xs(r){if(r.status==="needs_addressing"&&r.actionReason){let e=al[r.actionReason];if(e)return{displayLabel:e.label,displayDescription:e.description(r)}}if(r.status==="waiting_on_maintainer"&&r.waitReason){let e=cl[r.waitReason];if(e)return{displayLabel:e.label,displayDescription:e.description(r)}}return b("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 al,cl,ao=P(()=>{"use strict";ue();al={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"}},cl={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 wt(){return{repos:new Map,monthlyCounts:{},monthlyOpenedCounts:{},dailyActivityCounts:{}}}function ll(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 zi(r,e,t,s,o,n){if(!e)return wt();let i=Ye(),a=n?`:stars${n.minStars}`:"",c=`pr-counts:v3:${s}:${e}${a}`,u=i.getIfFresh(c,ul);if(u&&ll(u))return T(Ue,`Using cached ${s} PR counts for @${e}`),{repos:new Map(u.reposEntries),monthlyCounts:u.monthlyCounts,monthlyOpenedCounts:u.monthlyOpenedCounts,dailyActivityCounts:u.dailyActivityCounts};T(Ue,`Fetching ${s} PR counts for @${e}...`);let p=new Map,d={},m={},R={},w=1,E=0,C;for(;;){let{data:g}=await r.search.issuesAndPullRequests({q:`is:pr ${t} author:${e} -user:${e}`,sort:"updated",order:"desc",per_page:100,page:w});C=g.total_count;for(let G of g.items){let I=gt(G.html_url);if(!I){b(Ue,`Skipping ${s} PR with unparseable URL: ${G.html_url}`);continue}let{owner:O}=I,U=`${O}/${I.repo}`;if(Ke(O,e)||n&&ut(n.knownStarCounts.get(U),n.minStars))continue;let k=o(p,U,G);if(k){let A=k.slice(0,7);d[A]=(d[A]||0)+1;let M=k.slice(0,10);M.length===10&&(R[M]=(R[M]||0)+1)}if(G.created_at){let A=G.created_at.slice(0,7);m[A]=(m[A]||0)+1;let M=G.created_at.slice(0,10);M.length===10&&(R[M]=(R[M]||0)+1)}}if(E+=g.items.length,E>=g.total_count||E>=1e3||g.items.length===0||w>=co)break;w++}return E<C&&w>=co&&b(Ue,`Pagination capped at ${co} pages: fetched ${E} of ${C} ${s} PRs. Stats may be incomplete for prolific contributors.`),T(Ue,`Found ${E} ${s} PRs across ${p.size} repos`),i.set(c,"",{reposEntries:Array.from(p.entries()),monthlyCounts:d,monthlyOpenedCounts:m,dailyActivityCounts:R}),{repos:p,monthlyCounts:d,monthlyOpenedCounts:m,dailyActivityCounts:R}}function Ji(r,e,t){return zi(r,e,"is:merged","merged",(s,o,n)=>{n.pull_request?.merged_at||b(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 zi(r,e,"is:closed is:unmerged","closed",(s,o,n)=>(s.set(o,(s.get(o)||0)+1),n.closed_at||""),t)}async function Qi(r,e,t,s,o,n){if(!e.githubUsername)return b(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];T(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}),u=[];for(let p of c.items){let d=Ee(p.html_url);if(!d){b(Ue,`Could not parse GitHub URL from API response: ${p.html_url}`);continue}let m=`${d.owner}/${d.repo}`;Ke(d.owner,e.githubUsername)||u.push(n(p,{owner:d.owner,repo:m,number:d.number}))}return T(Ue,`Found ${u.length} recently ${s} PRs`),u}async function Yi(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 Xi(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||b(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,ul,co,Us=P(()=>{"use strict";Re();Pt();ue();$t();Ue="github-stats",ul=1440*60*1e3,co=3});var Ls,pl,Et,Zi=P(()=>{"use strict";Gt();Vt();Re();so();ae();Qt();ue();$t();no();Hi();io();Wi();ao();Us();ao();no();io();Ls="pr-monitor",pl=st,Et=class r{octokit;stateManager;constructor(e){this.octokit=fe(e),this.stateManager=x()}async fetchUserOpenPRs(){let e=this.stateManager.getState().config;if(!e.githubUsername)throw new Je("No GitHub username configured. Run setup first.");T("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;T("pr-monitor",`Found ${i} open PRs`);let a=Math.min(Math.ceil(i/o),10);for(;s<a;){s++;let d=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open author:${e.githubUsername}`,sort:"updated",order:"desc",per_page:o,page:s});t.push(...d.data.items)}let c=[],u=[],p=t.filter(d=>{if(!d.pull_request)return!1;let m=gt(d.html_url);return m?!Ke(m.owner,e.githubUsername):(b("pr-monitor",`Skipping PR with unparseable URL: ${d.html_url}`),!1)});return T("pr-monitor",`Filtered to ${p.length} PRs after excluding own repos`),await Dr("pr-monitor",`Fetch details for ${p.length} PRs`,async()=>{await Os(p,async d=>{try{T("pr-monitor",`Fetching details for ${d.html_url}`);let m=await this.fetchPRDetails(d.html_url);m&&c.push(m)}catch(m){let R=S(m);b("pr-monitor",`Error fetching ${d.html_url}: ${R}`),u.push({prUrl:d.html_url,error:R})}},pl)}),c.sort((d,m)=>d.status===m.status?0:d.status==="needs_addressing"?-1:1),{prs:c,failures:u}}async fetchPRDetails(e){let t=Ee(e);if(!t||t.type!=="pull")throw new X(`Invalid PR URL format: ${e}`);let{owner:s,repo:o,number:n}=t,i=this.stateManager.getState().config,[a,c,u,p]=await Promise.all([this.octokit.pulls.get({owner:s,repo:o,pull_number:n}),xe(N=>this.octokit.issues.listComments({owner:s,repo:o,issue_number:n,per_page:100,page:N})),this.octokit.pulls.listReviews({owner:s,repo:o,pull_number:n}),xe(N=>this.octokit.pulls.listReviewComments({owner:s,repo:o,pull_number:n,per_page:100,page:N})).catch(N=>{let B=we(N);if(B===429)throw N;if(B===403){let Z=S(N).toLowerCase();if(Z.includes("rate limit")||Z.includes("abuse detection"))throw N;return b("pr-monitor",`403 fetching review comments for ${s}/${o}#${n}: ${Z}`),[]}return B===404?T("pr-monitor",`Review comments 404 for ${s}/${o}#${n} (likely no inline comments)`):b("pr-monitor",`Failed to fetch review comments for ${s}/${o}#${n} (status ${B??"unknown"}): self-reply detection will be skipped`),[]})]),d=a.data,m=u.data,R=Mi(m),w=this.hasMergeConflict(d.mergeable,d.mergeable_state),{hasUnrespondedComment:E,lastMaintainerComment:C}=Ni(c,m,p,i.githubUsername),g=this.getCIStatus(s,o,d.head.sha),I=E||R==="changes_requested"?this.octokit.repos.getCommit({owner:s,repo:o,ref:d.head.sha}).then(N=>({date:N.data.commit.author?.date,author:N.data.author?.login})).catch(N=>{let B=we(N);if(B===429)throw N;if(B===403){let Z=S(N).toLowerCase();if(Z.includes("rate limit")||Z.includes("abuse detection"))throw N;b("pr-monitor",`403 fetching commit date for ${s}/${o}@${d.head.sha.slice(0,7)}: ${S(N)}`);return}b("pr-monitor",`Failed to fetch commit date for ${s}/${o}@${d.head.sha.slice(0,7)}: ${S(N)}`)}):Promise.resolve(void 0),[{status:O,failingCheckNames:U,failingCheckConclusions:k},A]=await Promise.all([g,I]),M=A?.date,H=A?.author,{hasIncompleteChecklist:ce,checklistStats:ye}=Bi(d.body||""),ne=Vi(C?.body,R),le=$e(new Date(d.updated_at),new Date),Be=ji(m),_e=Is(U,k),Oe=O==="failing"&&_e.some(N=>N.category==="actionable"),{status:ve,actionReason:L,waitReason:q,stalenessTier:se}=this.determineStatus({ciStatus:O,hasMergeConflict:w,hasUnrespondedComment:E,hasIncompleteChecklist:ce,reviewDecision:R,daysSinceActivity:le,dormantThreshold:i.dormantThresholdDays,approachingThreshold:i.approachingDormantDays,latestCommitDate:M,latestCommitAuthor:H,contributorUsername:i.githubUsername,lastMaintainerCommentDate:C?.createdAt,latestChangesRequestedDate:Be,hasActionableCIFailure:Oe});return this.buildFetchedPR({id:d.id,url:e,repo:`${s}/${o}`,number:n,title:d.title,status:ve,actionReason:L,waitReason:q,stalenessTier:se,createdAt:d.created_at,updatedAt:d.updated_at,daysSinceActivity:le,ciStatus:O,failingCheckNames:U,classifiedChecks:_e,hasMergeConflict:w,reviewDecision:R,hasUnrespondedComment:E,lastMaintainerComment:C,latestCommitDate:M,hasIncompleteChecklist:ce,checklistStats:ye,maintainerActionHints:ne})}buildFetchedPR(e){let t={...e,displayLabel:"",displayDescription:""},{displayLabel:s,displayDescription:o}=xs(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:u,latestCommitDate:p,latestCommitAuthor:d,contributorUsername:m,lastMaintainerCommentDate:R,latestChangesRequestedDate:w,hasActionableCIFailure:E=!0}=e,C="active";a>=c?C="dormant":a>=u&&(C="approaching_dormant");let g=p&&this.isContributorCommit(d,m)?p:void 0;return o?g&&R&&this.isCommitAfterComment(g,R)?w&&g<w?{status:"needs_addressing",actionReason:"needs_response",stalenessTier:C}:t==="failing"&&E?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:C}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:C}:{status:"needs_addressing",actionReason:"needs_response",stalenessTier:C}:i==="changes_requested"&&w?!g||g<w?{status:"needs_addressing",actionReason:"needs_changes",stalenessTier:C}:t==="failing"&&E?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:C}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:C}:t==="failing"?E?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:C}:{status:"waiting_on_maintainer",waitReason:"ci_blocked",stalenessTier:C}:s?{status:"needs_addressing",actionReason:"merge_conflict",stalenessTier:C}:n?{status:"needs_addressing",actionReason:"incomplete_checklist",stalenessTier:C}:i==="approved"&&(t==="passing"||t==="unknown")?{status:"waiting_on_maintainer",waitReason:"pending_merge",stalenessTier:C}:{status:"waiting_on_maintainer",waitReason:"pending_review",stalenessTier:C}}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 R=we(m);if(R===429)throw m;if(R===403){let w=S(m).toLowerCase();if(w.includes("rate limit")||w.includes("abuse detection"))throw m}return R===404?T("pr-monitor",`Check runs 404 for ${e}/${t}@${s.slice(0,7)} (no checks configured)`):b("pr-monitor",`Non-404 error fetching check runs for ${e}/${t}@${s.slice(0,7)}: ${R??m}`),null})]),i=o.data,a=n?.data?.check_runs||[],c=new Map;for(let m of a){let R=c.get(m.name);(!R||new Date(m.started_at??0)>new Date(R.started_at??0))&&c.set(m.name,m)}let u=[...c.values()],p=xi(u),d=Ui(i);return Li(p,d,u.length)}catch(o){let n=we(o);if(n===401||n===403||n===429)throw o;return n===404?(T("pr-monitor",`CI check 404 for ${e}/${t} (no CI configured)`),{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}):(b("pr-monitor",`Failed to check CI for ${e}/${t}@${s.slice(0,7)}: ${S(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;T(Ls,`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 X(`Malformed repo identifier: "${p}"`);let[m,R]=d,w=`/repos/${m}/${R}`,E=await Yt(s,w,C=>this.octokit.repos.get({owner:m,repo:R,headers:C}));return{repo:p,stars:E.stargazers_count}})),u=0;for(let p=0;p<c.length;p++){let d=c[p];d.status==="fulfilled"?t.set(d.value.repo,d.value.stars):(u++,b(Ls,`Failed to fetch stars for ${a[p]}: ${S(d.reason)}`))}if(u===a.length&&a.length>0){let p=o.length-i-n;p>0&&b(Ls,`Entire chunk failed, aborting remaining ${p} repos`);break}}return T(Ls,`Fetched star counts for ${t.size}/${e.length} repos`),t}async fetchRecentlyClosedPRs(e=7){let t=this.stateManager.getState().config;return Yi(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 Ms(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=>uo.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 lo(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 js(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 uo,ea,po=P(()=>{"use strict";uo=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 mo(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 Zt(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 Ns=P(()=>{"use strict";Re()});function oa(){let r=Date.now();for(let[e,t]of Xe.entries())r-t.fetchedAt>na&&Xe.delete(e);if(Xe.size>ra){let t=Array.from(Xe.entries()).sort((s,o)=>s[1].fetchedAt-o[1].fetchedAt).slice(0,Xe.size-ra);for(let[s]of t)Xe.delete(s)}}var at,dl,Xe,na,ml,ra,Hs,ia=P(()=>{"use strict";Qt();Re();ae();ue();$t();Ns();at="issue-vetting",dl=st,Xe=new Map,na=3600*1e3,ml=14400*1e3,ra=100;Hs=class{octokit;stateManager;constructor(e,t){this.octokit=e,this.stateManager=t}async vetIssue(e){let t=Ee(e);if(!t||t.type!=="issues")throw new X(`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,u,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)]),R=c.passed,w=u.passed,E=this.analyzeRequirements(a.body||""),C=p.checkFailed?!0:p.isActive,g={passedAllChecks:R&&w&&C&&E,checks:{noExistingPR:R,notClaimed:w,projectActive:C,clearRequirements:E,contributionGuidelinesFound:!!d},contributionGuidelines:d,notes:[]};R||g.notes.push("Existing PR found for this issue"),w||g.notes.push("Issue appears to be claimed by someone"),c.inconclusive&&g.notes.push(`Could not verify absence of existing PRs: ${c.reason||"API error"}`),u.inconclusive&&g.notes.push(`Could not verify claim status: ${u.reason||"API error"}`),p.checkFailed?g.notes.push(`Could not verify project activity: ${p.failureReason||"API error"}`):p.isActive||g.notes.push("Project may be inactive"),E||g.notes.push("Issue requirements are unclear"),d||g.notes.push("No CONTRIBUTING.md found");let G={id:a.id,url:e,repo:i,number:n,title:a.title,status:"candidate",labels:a.labels.map(ve=>typeof ve=="string"?ve:ve.name||""),createdAt:a.created_at,updatedAt:a.updated_at,vetted:!0,vettingResult:g},I=[],O=[];R||I.push("Has existing PR"),w||I.push("Already claimed"),!p.isActive&&!p.checkFailed&&I.push("Inactive project"),E||I.push("Unclear requirements"),R&&O.push("No existing PR"),w&&O.push("Not claimed"),p.isActive&&!p.checkFailed&&O.push("Active project"),E&&O.push("Clear requirements"),d&&O.push("Has contribution guidelines");let U=this.stateManager.getState().config,k=this.stateManager.getRepoScore(i),A=k&&k.mergedPRCount>0?k.mergedPRCount:m;A>0?O.push(`Trusted project (${A} PR${A>1?"s":""} merged)`):U.trustedProjects.includes(i)&&O.push("Trusted project (previous PR merged)"),k&&(k.closedWithoutMergeCount>0&&A===0?I.push("User has rejected PR(s) in this repo with no successful merges"):k.closedWithoutMergeCount>0&&A>0&&g.notes.push(`Mixed history: ${A} merged, ${k.closedWithoutMergeCount} closed without merge`));let M=i.split("/")[0],H=!1;M&&i.includes("/")&&(H=Object.values(this.stateManager.getState().repoScores).some(ve=>ve.repo&&ve.mergedPRCount>0&&ve.repo.startsWith(M+"/")&&ve.repo!==i)),H&&O.push(`Org affinity (merged PRs in other ${M} repos)`);let ce;g.passedAllChecks?ce="approve":I.length>2?ce="skip":ce="needs_review";let ye=p.checkFailed||c.inconclusive||u.inconclusive;ce==="approve"&&ye&&(ce="needs_review",g.notes.push("Recommendation downgraded: one or more checks were inconclusive"));let ne=mo(p.stargazersCount??0,p.forksCount??0);p.checkFailed&&ne===0&&g.notes.push("Repo quality bonus unavailable: could not fetch star/fork counts due to API error");let le=this.getRepoScore(i),Be=Zt({repoScore:le,hasExistingPR:!R,isClaimed:!w,clearRequirements:E,hasContributionGuidelines:!!d,issueUpdatedAt:a.updated_at,closedWithoutMergeCount:k?.closedWithoutMergeCount??0,mergedPRCount:A,orgHasMergedPRs:H,repoQualityBonus:ne}),_e=this.stateManager.getStarredRepos(),Oe="normal";return A>0?Oe="merged_pr":_e.includes(i)&&(Oe="starred"),{issue:G,vettingResult:g,projectHealth:p,recommendation:ce,reasonsToSkip:I,reasonsToApprove:O,viabilityScore:Be,searchPriority:Oe}}async vetIssuesParallel(e,t,s){let o=[],n=new Map,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++,pt(m)&&a++,b(at,`Error vetting issue ${p}:`,S(m))}).finally(()=>n.delete(p));n.set(p,d),n.size>=dl&&await Promise.race(n.values())}await Promise.allSettled(n.values());let u=i===c&&c>0;return u&&b(at,`All ${c} issue(s) failed vetting. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:o.slice(0,t),allFailed:u,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 xe(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=S(o);return b(at,`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=S(s);return b(at,`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 u=(c.body||"").toLowerCase();if(a.some(p=>u.includes(p)))return{passed:!1}}return{passed:!0}}catch(n){let i=S(n);return b(at,`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 Ds(s,o,ml,async()=>{let n=`/repos/${e}/${t}`,i=await Yt(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}),u=a[0]?.commit?.author?.date||i.pushed_at,p=$e(new Date(u)),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 R=S(m);b(at,`Failed to check CI status for ${e}/${t}: ${R}. Defaulting to unknown.`)}return{repo:`${e}/${t}`,lastCommitAt:u,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=S(n);return b(at,`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<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 u=this.parseContributionGuidelines(c.value);return Xe.set(s,{guidelines:u,fetchedAt:Date.now()}),oa(),u}if(c.status==="rejected"){let u=c.reason instanceof Error?c.reason.message:String(c.reason);!u.includes("404")&&!u.includes("Not Found")&&b(at,`Unexpected error fetching ${n[a]} from ${e}/${t}: ${u}`)}}Xe.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,Y,gl,Rt,ua=P(()=>{"use strict";aa=W(require("fs"),1),ca=W(require("path"),1);Gt();Vt();Re();Pt();ae();ue();$t();po();ia();Ns();po();Ns();Y="issue-discovery",gl=900*1e3,Rt=class{octokit;stateManager;githubToken;vetter;rateLimitWarning=null;constructor(e){this.githubToken=e,this.octokit=fe(e),this.stateManager=x(),this.vetter=new Hs(this.octokit,this.stateManager)}async cachedSearch(e){let t=`search:${e.q}:${e.sort}:${e.order}:${e.per_page}`;return Ds(Ye(),t,gl,async()=>{let{data:s}=await this.octokit.search.issuesAndPullRequests(e);return s})}async fetchStarredRepos(){de(Y,"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(Y,"Reached pagination limit for starred repos (500)");break}}return de(Y,`Fetched ${e.length} starred repositories`),this.stateManager.setStarredRepos(e),e}catch(t){let s=this.stateManager.getStarredRepos(),o=S(t);return b(Y,"Error fetching starred repos:",o),s.length===0?b(Y,`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.`):b(Y,`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=lo(e);if(a.size>0){let w=e.filter(E=>a.has(E.repository_url.split("/").slice(-2).join("/"))).length;T(Y,`[SPAM_FILTER] Filtered ${w} issues from ${a.size} label-farming repos: ${[...a].join(", ")}`)}let c=t(e).filter(w=>{let E=w.repository_url.split("/").slice(-2).join("/");return a.has(E)?!1:s.every(C=>!C.has(E))}).slice(0,o*2);if(c.length===0)return T(Y,`[${i}] All ${e.length} items filtered before vetting`),{candidates:[],allVetFailed:!1,rateLimitHit:!1};let{candidates:u,allFailed:p,rateLimitHit:d}=await this.vetter.vetIssuesParallel(c.map(w=>w.html_url),o,"normal"),m=u.filter(w=>w.projectHealth.checkFailed?!0:(w.projectHealth.stargazersCount??0)>=n),R=u.length-m.length;return R>0&&T(Y,`[STAR_FILTER] Filtered ${R} ${i} candidates below ${n} stars`),{candidates:m,allVetFailed:p,rateLimitHit:d}}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,u=null,p=!1;this.rateLimitWarning=null;try{let L=await to(this.githubToken);if(L.remaining<5){let q=new Date(L.resetAt).toLocaleTimeString("en-US",{hour12:!1});this.rateLimitWarning=`GitHub search API quota low (${L.remaining}/${L.limit} remaining, resets at ${q}). Search may be slow.`,b(Y,this.rateLimitWarning)}}catch(L){if(we(L)===401)throw L;b(Y,"Could not check rate limit:",S(L))}let d=this.stateManager.getReposWithMergedPRs(),m=new Set(d),R=this.stateManager.getReposWithOpenPRs(),w=await this.getStarredReposWithRefresh(),E=new Set(w),C=new Set(this.stateManager.getLowScoringRepos(3)),g=new Set(this.stateManager.getState().activeIssues.map(L=>L.url)),G=new Set(t.excludeRepos),I=t.maxIssueAgeDays||90,O=new Date,U=o.map(L=>`label:"${L}"`).join(" "),A=s.some(L=>L.toLowerCase()==="any")?"":s.map(L=>`language:${L}`).join(" "),M=`is:issue is:open ${A} no:assignee`.replace(/ +/g," ").trim(),H=`is:issue is:open ${U} ${A} no:assignee`.replace(/ +/g," ").trim(),ce=t.includeDocIssues??!0,ye=new Set(t.aiPolicyBlocklist??lt.aiPolicyBlocklist??[]);ye.size>0&&T(Y,`[AI_POLICY_FILTER] Filtering issues from ${ye.size} blocklisted repo(s): ${[...ye].join(", ")}`);let ne=L=>L.filter(q=>{if(g.has(q.html_url))return!1;let se=q.repository_url.split("/").slice(-2).join("/");if(G.has(se)||ye.has(se)||C.has(se))return!1;let N=new Date(q.updated_at);return!($e(N,O)>I||!ce&&Ms(q))}),le=[...d,...R.filter(L=>!m.has(L))].slice(0,10),Be=new Set(le);if(le.length>0){let L=Math.min(d.length,le.length),q=le.length-L;de(Y,`Phase 0: Searching issues in ${le.length} repos (${L} merged-PR, ${q} open-PR, no label filter)...`);let se=le.slice(0,L);if(se.length>0){let B=n-a.length;if(B>0){let{candidates:Z,allBatchesFailed:De,rateLimitHit:tt}=await this.searchInRepos(se,M,B,"merged_pr",ne);a.push(...Z),De&&(c="All merged-PR repo batches failed"),tt&&(p=!0),de(Y,`Found ${Z.length} candidates from merged-PR repos`)}}let N=le.slice(L);if(N.length>0&&a.length<n){let B=n-a.length;if(B>0){let{candidates:Z,allBatchesFailed:De,rateLimitHit:tt}=await this.searchInRepos(N,M,B,"starred",ne);if(a.push(...Z),De){let Ve="All open-PR repo batches failed";c=c?`${c}; ${Ve}`:Ve}tt&&(p=!0),de(Y,`Found ${Z.length} candidates from open-PR repos`)}}}if(a.length<n&&w.length>0){let L=w.filter(q=>!Be.has(q));if(L.length>0){de(Y,`Phase 1: Searching issues in ${L.length} starred repos...`);let q=n-a.length;if(q>0){let{candidates:se,allBatchesFailed:N,rateLimitHit:B}=await this.searchInRepos(L.slice(0,10),H,q,"starred",ne);a.push(...se),N&&(u="All starred repo batches failed"),B&&(p=!0),de(Y,`Found ${se.length} candidates from starred repos`)}}}let _e=null;if(a.length<n){de(Y,"Phase 2: General issue search...");let L=n-a.length;try{let q=await this.cachedSearch({q:H,sort:"created",order:"desc",per_page:L*3});de(Y,`Found ${q.total_count} issues in general search, processing top ${q.items.length}...`);let se=new Set(a.map(De=>De.issue.repo)),{candidates:N,allVetFailed:B,rateLimitHit:Z}=await this.filterVetAndScore(q.items,ne,[Be,E,se],L,i,"Phase 2");a.push(...N),B&&(_e=(_e?_e+"; ":"")+"all vetting failed"),Z&&(p=!0),de(Y,`Found ${N.length} candidates from general search`)}catch(q){let se=S(q);_e=se,pt(q)&&(p=!0),b(Y,`Error in general issue search: ${se}`)}}let Oe=null;if(a.length<n){de(Y,"Phase 3: Searching actively maintained repos...");let L=n-a.length,q=new Date;q.setDate(q.getDate()-30);let se=q.toISOString().split("T")[0],N=`is:issue is:open no:assignee ${A} stars:>=${i} pushed:>=${se} archived:false`.replace(/ +/g," ").trim();try{let B=await this.cachedSearch({q:N,sort:"updated",order:"desc",per_page:L*3});de(Y,`Found ${B.total_count} issues in maintained-repo search, processing top ${B.items.length}...`);let Z=new Set(a.map(cr=>cr.issue.repo)),{candidates:De,allVetFailed:tt,rateLimitHit:Ve}=await this.filterVetAndScore(B.items,ne,[Be,E,Z],L,i,"Phase 3");a.push(...De),tt&&(Oe="all vetting failed"),Ve&&(p=!0),de(Y,`Found ${De.length} candidates from maintained-repo search`)}catch(B){let Z=S(B);Oe=Z,pt(B)&&(p=!0),b(Y,`Error in maintained-repo search: ${Z}`)}}if(a.length===0){let L=[c?`Phase 0 (merged-PR repos): ${c}`:null,u?`Phase 1 (starred repos): ${u}`:null,_e?`Phase 2 (general): ${_e}`:null,Oe?`Phase 3 (maintained repos): ${Oe}`:null].filter(Boolean),q=L.length>0?` ${L.join(". ")}.`:"";if(p)return this.rateLimitWarning=`Search returned no results due to GitHub API rate limits.${q} Try again after the rate limit resets.`,[];throw new X(`No issue candidates found across all search phases.${q} Try adjusting your search criteria (languages, labels) or check your network connection.`)}return p&&(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((L,q)=>{let se={merged_pr:0,starred:1,normal:2},N=se[L.searchPriority]-se[q.searchPriority];if(N!==0)return N;let B={approve:0,needs_review:1,skip:2},Z=B[L.recommendation]-B[q.recommendation];return Z!==0?Z:q.viabilityScore-L.viabilityScore}),js(a,2).slice(0,n)}async searchInRepos(e,t,s,o,n){let i=[],c=this.batchRepos(e,5),u=0,p=0;for(let R of c){if(i.length>=s)break;try{let w=R.map(g=>`repo:${g}`).join(" OR "),E=`${t} (${w})`,C=await this.cachedSearch({q:E,sort:"created",order:"desc",per_page:Math.min(30,(s-i.length)*3)});if(C.items.length>0){let g=n(C.items),G=s-i.length,{candidates:I}=await this.vetter.vetIssuesParallel(g.slice(0,G*2).map(O=>O.html_url),G,o);i.push(...I)}}catch(w){u++,pt(w)&&p++;let E=R.join(", ");b(Y,`Error searching issues in batch [${E}]:`,S(w))}}let d=u===c.length&&c.length>0,m=p>0;return d&&b(Y,`All ${c.length} batch(es) failed for ${o} phase. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:i,allBatchesFailed:d,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 Zt(e)}saveSearchResults(e){let t=[...e].sort((a,c)=>c.viabilityScore-a.viabilityScore),s=Ie(),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:
|
|
52
|
+
`;for(let a of t){let{issue:c,viabilityScore:u,recommendation:p}=a,d=c.labels.slice(0,3).join(", "),m=d.length>30?d.substring(0,27)+"...":d,R=c.title.length>50?c.title.substring(0,47)+"...":c.title,w=new Date(c.updatedAt).toLocaleDateString(),E=p==="approve"?"Y":p==="skip"?"N":"?";i+=`| ${u} | ${c.repo} | [#${c.number}](${c.url}) | ${R} | ${m} | ${w} | ${E} |
|
|
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"),de(Y,`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.`):y(K,`Fa
|
|
|
64
64
|
**URL:** ${t.url}
|
|
65
65
|
|
|
66
66
|
### Vetting Results
|
|
67
|
-
${Object.entries(s.checks).map(([
|
|
67
|
+
${Object.entries(s.checks).map(([u,p])=>`- ${p?"\u2713":"\u2717"} ${u.replace(/([A-Z])/g," $1").toLowerCase()}`).join(`
|
|
68
68
|
`)}
|
|
69
69
|
|
|
70
70
|
### Project Health
|
|
@@ -75,1398 +75,51 @@ ${Object.entries(s.checks).map(([l,u])=>`- ${u?"\u2713":"\u2717"} ${l.replace(/(
|
|
|
75
75
|
### Recommendation: **${n.toUpperCase()}**
|
|
76
76
|
${i.length>0?`
|
|
77
77
|
**Reasons to approve:**
|
|
78
|
-
${i.map(
|
|
78
|
+
${i.map(u=>`- ${u}`).join(`
|
|
79
79
|
`)}`:""}
|
|
80
80
|
${a.length>0?`
|
|
81
81
|
**Reasons to skip:**
|
|
82
|
-
${a.map(
|
|
82
|
+
${a.map(u=>`- ${u}`).join(`
|
|
83
83
|
`)}`:""}
|
|
84
84
|
${s.notes.length>0?`
|
|
85
85
|
**Notes:**
|
|
86
|
-
${s.notes.map(
|
|
86
|
+
${s.notes.map(u=>`- ${u}`).join(`
|
|
87
87
|
`)}`:""}
|
|
88
|
-
`}}});var
|
|
89
|
-
`)}function
|
|
88
|
+
`}}});var Ze,hl,la,Tt,pa=P(()=>{"use strict";Gt();Fs();Qt();Vt();Re();so();ae();ue();Ze="issue-conversation",hl=st,la=new Set(["OWNER","MEMBER","COLLABORATOR"]),Tt=class{octokit;stateManager;constructor(e){this.octokit=fe(e),this.stateManager=x()}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];T(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&&b(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(w=>w.status==="claimed"||w.status==="in_progress"||w.status==="pr_submitted").map(w=>`${w.repo}#${w.number}`)),u=new Set((t.aiPolicyBlocklist||[]).map(w=>w.toLowerCase())),p=[];for(let w of i.items){if(w.pull_request)continue;let E=gt(w.html_url);if(!E){b(Ze,`Skipping issue with unparseable URL: ${w.html_url}`);continue}let{owner:C,repo:g}=E,G=`${C}/${g}`;Ke(C,s)||w.user?.login?.toLowerCase()!==s.toLowerCase()&&(t.excludeRepos.includes(G)||t.excludeOrgs?.some(I=>C.toLowerCase()===I.toLowerCase())||u.has(G.toLowerCase())||c.has(`${G}#${w.number}`)||p.push({item:w,repoFullName:G}))}T(Ze,`Found ${p.length} commented issues to check`);let d=[],m=[];await Os(p,async({item:w,repoFullName:E})=>{try{let C=await this.analyzeIssueConversation(w,E,s);C?d.push(C):m.push({issueUrl:w.html_url,error:"No user comment found despite commenter: search match (possible pagination or eventual consistency)"})}catch(C){let g=S(C);m.push({issueUrl:w.html_url,error:g}),b(Ze,`Error analyzing issue ${w.html_url}: ${g}`)}},hl),m.length>0&&b(Ze,`${m.length}/${p.length} issue analysis call(s) failed`),m.length===p.length&&p.length>0&&b(Ze,`All ${p.length} issue analysis call(s) failed. Possible systemic issue (rate limit, auth, network).`);let R={new_response:0,waiting:1,acknowledged:2};return d.sort((w,E)=>R[w.status]-R[E.status]),T(Ze,`Analyzed ${d.length} issue conversations (${d.filter(w=>w.status==="new_response").length} with new responses)`),{issues:d,failures:m}}async analyzeIssueConversation(e,t,s){let{owner:o,repo:n}=kt(t),i=await xe(g=>this.octokit.issues.listComments({owner:o,repo:n,issue_number:e.number,per_page:100,page:g})),a=[];for(let g of i){if(!g.user?.login)continue;let G=g.user.login;a.push({author:G,body:g.body||"",createdAt:g.created_at,isUser:G.toLowerCase()===s.toLowerCase(),authorAssociation:String(g.author_association??"")})}a.sort((g,G)=>new Date(g.createdAt).getTime()-new Date(G.createdAt).getTime());let c;for(let g of a)g.isUser&&(c=g);if(!c)return b(Ze,`No user comment found for ${e.html_url} despite commenter: search match`),null;let u=new Date(c.createdAt),p=`@${s.toLowerCase()}`;function d(g){return la.has(g.authorAssociation)||g.body.toLowerCase().includes(p)}let m;for(let g of a){if(g.isUser||Dt(g.author))continue;if(new Date(g.createdAt)>u){if(Xt(g.body)||!d(g))continue;m={author:g.author,body:g.body.slice(0,200)+(g.body.length>200?"...":""),createdAt:g.createdAt,authorAssociation:g.authorAssociation}}}let R=(e.labels||[]).map(g=>g.name||"").filter(Boolean),w={repo:t,number:e.number,title:e.title,url:e.html_url,userLastCommentedAt:c.createdAt,labels:R,daysSinceUserComment:$e(u,new Date)};if(m)return{...w,status:"new_response",lastResponseAuthor:m.author,lastResponseBody:m.body,lastResponseAt:m.createdAt,isFromMaintainer:la.has(m.authorAssociation)};let C=[...a].reverse().find(g=>Dt(g.author)?!1:g.isUser?!0:d(g))?.isUser?"acknowledged":"waiting";return{...w,status:C}}}});function ma(r,e){let t=new Map;for(let s of r){if(!s.repo){b(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 es(r){let e=ma(r,"GROUP_BY_REPO"),t=[];for(let[s,o]of e)t.push({repo:s,prs:o});return t}function ts(r){let e=ma(r,"COMPUTE_SIGNALS"),t=new Map;for(let[s,o]of e){let n=o.some(a=>a.lastMaintainerComment&&!da.has(a.stalenessTier)),i=o.some(a=>!da.has(a.stalenessTier));t.set(s,{isResponsive:n,hasActiveMaintainers:i})}return t}function ss(r,e,t){let s=r.length,o=r.filter(p=>p.status==="needs_addressing"&&p.actionReason&&fl.has(p.actionReason)).length,n=s<e,i=o===0,a=n&&i,c,u=t>0?` + ${t} shelved`:"";if(a)c=`You have capacity: ${s}/${e} active PRs${u}, no critical issues`;else{let p=[];n||p.push(`at PR limit (${s}/${e}${u})`),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 rs(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:b("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 os(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 ns(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 is(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=bs(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 go(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.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 Ft,Tu,ya,_a=A(()=>{"use strict";Re();de();Ft=new Set(["needs_addressing"]),Tu=new Set(["needs_response","needs_changes","failing_ci","merge_conflict"]),ya=new Set(["dormant","approaching_dormant"])});function _o(r){let{repoScores:e,activePRCount:t}=r,s=0,o=0,n=[];for(let c of Object.values(e))s+=c.mergedPRCount,o+=c.closedWithoutMergeCount,c.mergedPRCount>0&&n.push({repo:c.repo,mergedCount:c.mergedPRCount});let i=s+o,a=i>0?s/i:0;return n.sort((c,l)=>l.mergedCount-c.mergedCount),{totalMerged:s,totalClosed:o,mergeRate:a,activePRs:t,reposContributed:n.length,topRepos:n.slice(0,10)}}var wo=A(()=>{"use strict"});async function Ro(r,e,t){for(let s of Su)try{T(Pt,`Checking ${e}/${t} for template at ${s}`);let{data:o}=await r.repos.getContent({owner:e,repo:t,path:s});if(Array.isArray(o)){T(Pt,`${s} is a directory (multiple templates?), skipping`);continue}if(o.type!=="file"){T(Pt,`${s} is type "${o.type}", skipping`);continue}if(!o.content){T(Pt,`${s} has no content, skipping`);continue}let n=Buffer.from(o.content,"base64").toString("utf-8");return T(Pt,`Found PR template at ${s} (${n.length} chars)`),{template:n,source:s}}catch(o){if(_e(o)===404)continue;if(ye(o))throw o;let n=O(o);return y(Pt,`Error checking ${e}/${t}/${s}: ${n}`),{template:null,source:null,error:n}}return T(Pt,`No PR template found for ${e}/${t}`),{template:null,source:null}}var Pt,Su,Eo=A(()=>{"use strict";de();ie();Pt="pr-template",Su=[".github/PULL_REQUEST_TEMPLATE.md",".github/pull_request_template.md","docs/pull_request_template.md","pull_request_template.md"]});var ee=A(()=>{"use strict";zt();na();ha();ba();Ls();xt();Re();ie();de();Dt();_a();wo();Eo();gt()});function wa(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 Ra(r){return r.map(e=>({type:e.type,prUrl:e.pr.url,label:e.label}))}function Ea(r){return r.map(e=>({repo:e.repo,prUrls:e.prs.map(t=>t.url)}))}function Cu(r){return{success:!0,data:r,timestamp:new Date().toISOString()}}function Pu(r){return{success:!1,error:r,timestamp:new Date().toISOString()}}function z(r){console.log(JSON.stringify(Cu(r),null,2))}function Ta(r){console.log(JSON.stringify(Pu(r),null,2))}var To=A(()=>{"use strict"});function cs(r,e){let t=r.summary||{totalActivePRs:0,totalMergedAllTime:0,mergeRate:0,totalNeedingAttention:0},s=e.config.minStars??50;return{activePRs:t.totalActivePRs,shelvedPRs:(r.shelvedPRs||[]).length,mergedPRs:t.totalMergedAllTime,closedPRs:Object.values(e.repoScores||{}).reduce((o,n)=>o+(Qe(n.stargazersCount,s)?0:n.closedWithoutMergeCount||0),0),mergeRate:`${(t.mergeRate??0).toFixed(1)}%`}}function So(r,e){let t={...r};for(let[s,o]of Object.entries(e))t[s]=o;return t}function Co(r,e,t,s,o){let n=I(),i=n.getState();try{Object.keys(e).length>0&&n.setMonthlyMergedCounts(So(i.monthlyMergedCounts||{},e))}catch(a){y(Pe,`Failed to store monthly merged counts: ${O(a)}`)}try{Object.keys(t).length>0&&n.setMonthlyClosedCounts(So(i.monthlyClosedCounts||{},t))}catch(a){y(Pe,`Failed to store monthly closed counts: ${O(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(So(i.monthlyOpenedCounts||{},a))}catch(a){y(Pe,`Failed to store monthly opened counts: ${O(a)}`)}}async function Po(r){let e=I(),t=new Tt(r),s=new Ct(r),o=Js(e.getState()),[{prs:n,failures:i},a,c,l,u,p]=await Promise.all([t.fetchUserOpenPRs(),t.fetchRecentlyClosedPRs().catch(_=>{if(ye(_))throw _;return y(Pe,`Failed to fetch recently closed PRs: ${O(_)}`),[]}),t.fetchRecentlyMergedPRs().catch(_=>{if(ye(_))throw _;return y(Pe,`Failed to fetch recently merged PRs: ${O(_)}`),[]}),t.fetchUserMergedPRCounts(o).catch(_=>{if(ye(_))throw _;return y(Pe,`Failed to fetch merged PR counts: ${O(_)}`),Et()}),t.fetchUserClosedPRCounts(o).catch(_=>{if(ye(_))throw _;return y(Pe,`Failed to fetch closed PR counts: ${O(_)}`),Et()}),s.fetchCommentedIssues().catch(_=>{if(ye(_))throw _;let G=O(_);return G.includes("No GitHub username configured")?y(Pe,`Issue conversation tracking requires setup: ${G}`):y(Pe,`Issue conversation fetch failed: ${G}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${G}`}]}})]),m=p.issues;p.failures.length>0&&y(Pe,`${p.failures.length} issue conversation check(s) failed`),i.length>0&&y(Pe,`${i.length} PR fetch(es) failed`);let{monthlyCounts:R,monthlyOpenedCounts:g}=l,{monthlyCounts:v,monthlyOpenedCounts:k}=u;Co(n,R,v,g,k);let h=t.generateDigest(n,a,c),C=new Set(e.getState().config.shelvedPRUrls||[]),S=n.filter(_=>C.has(_.url)||_.stalenessTier==="dormant"&&_.status!=="needs_addressing");h.shelvedPRs=S.map(ot),h.autoUnshelvedPRs=[],h.summary.totalActivePRs=n.length-S.length,e.setLastDigest(h);try{e.save()}catch(_){y(Pe,`Failed to save dashboard digest to state: ${O(_)}`)}return y(Pe,`Refreshed: ${n.length} PRs fetched`),{digest:h,commentedIssues:m}}function Sa(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||{}))Qe(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 Ca(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 Ws(r){return{monthlyMerged:r.monthlyMergedCounts||{},monthlyClosed:r.monthlyClosedCounts||{},monthlyOpened:r.monthlyOpenedCounts||{}}}var Pe,ls=A(()=>{"use strict";ee();ie();de();Ns();gt();us();Pe="dashboard-data"});var ko={};re(ko,{CRITICAL_STATUSES:()=>Ft,assessCapacity:()=>rs,buildStarFilter:()=>Js,collectActionableIssues:()=>os,computeActionMenu:()=>ns,computeRepoSignals:()=>ss,executeDailyCheck:()=>Ks,formatBriefSummary:()=>is,formatSummary:()=>as,groupPRsByRepo:()=>ts,printDigest:()=>vo,runDaily:()=>xu,runDailyForDisplay:()=>Du,toShelvedPRRef:()=>ot});function Js(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 ku(r,e){let{prs:t,failures:s}=await r.fetchUserOpenPRs();s.length>0&&y(W,`${s.length} PR fetch(es) failed`);let o=I().getState(),n=Js(o),i=new Ct(e),[a,c,l,u,p]=await Promise.all([r.fetchUserMergedPRCounts(n).catch(S=>{if(ye(S))throw S;return y(W,`Failed to fetch merged PR counts: ${O(S)}`),Et()}),r.fetchUserClosedPRCounts(n).catch(S=>{if(ye(S))throw S;return y(W,`Failed to fetch closed PR counts: ${O(S)}`),Et()}),r.fetchRecentlyClosedPRs().catch(S=>{if(ye(S))throw S;return y(W,`Failed to fetch recently closed PRs: ${O(S)}`),[]}),r.fetchRecentlyMergedPRs().catch(S=>{if(ye(S))throw S;return y(W,`Failed to fetch recently merged PRs: ${O(S)}`),[]}),i.fetchCommentedIssues().catch(S=>{if(ye(S))throw S;let _=O(S);return _.includes("No GitHub username configured")?y(W,`Issue conversation tracking requires setup: ${_}`):y(W,`Issue conversation fetch failed: ${_}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${_}`}]}})]),m=p.issues;p.failures.length>0&&y(W,`${p.failures.length} issue conversation check(s) failed`);let{repos:R,monthlyCounts:g,monthlyOpenedCounts:v}=a,{repos:k,monthlyCounts:h,monthlyOpenedCounts:C}=c;return{prs:t,failures:s,mergedCounts:R,closedCounts:k,monthlyCounts:g,monthlyClosedCounts:h,openedFromMerged:v,openedFromClosed:C,recentlyClosedPRs:l,recentlyMergedPRs:u,commentedIssues:m}}async function Au(r,e,t,s){let o=I(),n=Object.values(o.getState().repoScores).filter(v=>v.mergedPRCount>0);if(t.size===0&&n.length>0)y(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 v of Object.values(o.getState().repoScores))t.has(v.repo)||o.updateRepoScore(v.repo,{mergedPRCount:0});let i=0;for(let[v,{count:k,lastMergedAt:h}]of t)try{o.updateRepoScore(v,{mergedPRCount:k,lastMergedAt:h||void 0})}catch(C){i++,y(W,`Failed to update merged count for ${v}: ${O(C)}`)}i===t.size&&t.size>0&&y(W,`[ALL_MERGED_COUNT_UPDATES_FAILED] All ${t.size} merged count update(s) failed.`);let a=Object.values(o.getState().repoScores).filter(v=>(v.closedWithoutMergeCount||0)>0);s.size===0&&a.length>0&&y(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[v,k]of s)try{o.updateRepoScore(v,{closedWithoutMergeCount:k})}catch(h){c++,y(W,`Failed to update closed count for ${v}: ${O(h)}`)}c===s.size&&s.size>0&&y(W,`[ALL_CLOSED_COUNT_UPDATES_FAILED] All ${s.size} closed count update(s) failed.`);let l=ss(e),u=0;for(let[v,k]of l)try{o.updateRepoScore(v,{signals:k})}catch(h){u++,y(W,`Failed to update signals for ${v}: ${O(h)}`)}u===l.size&&l.size>0&&y(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(v){y(W,`Failed to fetch repo star counts: ${O(v)}`),y(W,"Repos without cached star data will be excluded from stats until star counts are fetched on the next successful run."),m=new Map}let R=0;for(let[v,k]of m)try{o.updateRepoScore(v,{stargazersCount:k})}catch(h){R++,y(W,`Failed to update star count for ${v}: ${O(h)}`)}R===m.size&&m.size>0&&y(W,`[ALL_STAR_COUNT_UPDATES_FAILED] All ${m.size} star count update(s) failed.`);let g=0;for(let[v]of t)try{o.addTrustedProject(v)}catch(k){g++,y(W,`Failed to sync trusted project ${v}: ${O(k)}`)}g===t.size&&t.size>0&&y(W,`[ALL_TRUST_SYNCS_FAILED] All ${t.size} trusted project sync(s) failed. This may indicate corrupted state.`)}function Ou(r,e,t,s){let o=I();try{let l=o.expireSnoozes();if(l.length>0){let u=l.map(p=>` - ${p}`).join(`
|
|
94
|
-
`);
|
|
95
|
-
${u}`),o.save()}}catch(l){y(W,`Failed to expire/persist snoozes: ${O(l)}`)}let n=[],i=[],a=[];for(let l of e)o.isPRShelved(l.url)?Ft.has(l.status)?(o.unshelvePR(l.url),i.push(ot(l)),a.push(l)):n.push(ot(l)):l.stalenessTier==="dormant"&&!Ft.has(l.status)?n.push(ot(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 Gu(r,e,t,s,o){let n=I(),i=rs(e,n.getState().config.maxActivePRs,t.length),a=!1,c=s.filter(h=>{let C=n.getIssueDismissedAt(h.url);if(!C)return!0;if(h.status==="new_response"){let S=new Date(h.lastResponseAt).getTime(),_=new Date(C).getTime();if(isNaN(S)||isNaN(_))return y(W,`Invalid timestamp in dismiss check for ${h.url}, including issue`),!0;if(S>_)return y(W,`Auto-undismissing issue ${h.url}: new response at ${h.lastResponseAt} after dismiss at ${C}`),n.undismissIssue(h.url),a=!0,!0}return!1}),l=c.filter(h=>h.status==="new_response"),u=as(r,i,l),p=new Set(Object.keys(n.getState().config.snoozedPRs??{}).filter(h=>n.isSnoozed(h))),m=e.filter(h=>{let C=n.getIssueDismissedAt(h.url);if(!C)return!0;let S=new Date(h.updatedAt).getTime(),_=new Date(C).getTime();return isNaN(S)||isNaN(_)?(y(W,`Invalid timestamp in PR dismiss check for ${h.url}, including PR`),!0):S>_?(y(W,`Auto-undismissing PR ${h.url}: new activity at ${h.updatedAt} after dismiss at ${C}`),n.undismissIssue(h.url),a=!0,!0):!1});if(a)try{n.save()}catch(h){y(W,`Failed to persist auto-undismissed state: ${O(h)}`)}let R=os(m,p);r.summary.totalNeedingAttention=R.length;let g=is(r,R.length,l.length),v=ns(R,i,c),k=ts(e);return{digest:r,capacity:i,summary:u,briefSummary:g,actionableIssues:R,actionMenu:v,commentedIssues:c,repoGroups:k,failures:o}}function $u(r){return{digest:wa(r.digest),capacity:r.capacity,summary:r.summary,briefSummary:r.briefSummary,actionableIssues:Ra(r.actionableIssues),actionMenu:r.actionMenu,commentedIssues:r.commentedIssues,repoGroups:Ea(r.repoGroups),failures:r.failures}}async function Ks(r){let e=await Pa(r);return $u(e)}async function Pa(r){let e=new Tt(r),{prs:t,failures:s,mergedCounts:o,closedCounts:n,monthlyCounts:i,monthlyClosedCounts:a,openedFromMerged:c,openedFromClosed:l,recentlyClosedPRs:u,recentlyMergedPRs:p,commentedIssues:m}=await ku(e,r);await Au(e,t,o,n),Co(t,i,a,c,l);let{activePRs:R,shelvedPRs:g,digest:v}=Ou(e,t,u,p);return Gu(v,R,g,m,s)}async function xu(){let r=pe();return Ks(r)}async function Du(){let r=pe();return Pa(r)}var W,us=A(()=>{"use strict";ee();ie();de();Ns();ls();To();ee();W="daily"});var ka={};re(ka,{runStatus:()=>Iu});async function Iu(r){let e=I(),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 Aa=A(()=>{"use strict";ee()});var Oa={};re(Oa,{runSearch:()=>Fu});async function Fu(r){let e=pe(),t=new St(e),s=await t.searchIssues({maxResults:r.maxResults}),o=I(),{config:n}=o.getState(),i=n.excludeRepos||[],a=n.aiPolicyBlocklist??pt.aiPolicyBlocklist??[],c={candidates:s.map(l=>{let u=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:u?{score:u.score,mergedPRCount:u.mergedPRCount,closedWithoutMergeCount:u.closedWithoutMergeCount,isResponsive:u.signals?.isResponsive??!1,lastMergedAt:u.lastMergedAt}:void 0}}),excludedRepos:i,aiPolicyBlocklist:a};return t.rateLimitWarning&&(c.rateLimitWarning=t.rateLimitWarning),c}var Ga=A(()=>{"use strict";ee()});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 Z(r){if(r.length>$a)throw new Y(`URL exceeds maximum length of ${$a} characters`);return r}function ps(r){if(r.length>xa)throw new Y(`Message exceeds maximum length of ${xa} characters`);return r}function Ut(r){if(!r||r.trim().length===0)throw new Y("GitHub username cannot be empty.");let e=r.trim();if(e.length>Da)throw new Y(`GitHub username must be at most ${Da} characters (got ${e.length}).`);if(!Uu.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(Mu.test(e))throw new Y("GitHub username cannot contain consecutive hyphens.");return e}var ge,Qs,ds,$a,xa,Da,Uu,Mu,ke=A(()=>{"use strict";ie();ge=/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+$/,Qs=/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/,ds=/^https:\/\/github\.com\/[^/]+\/[^/]+\/(issues|pull)\/\d+$/,$a=2048,xa=1e3;Da=39,Uu=/^[a-zA-Z0-9-]+$/,Mu=/--/});var Ia={};re(Ia,{runVet:()=>Lu});async function Lu(r){Z(r.issueUrl),oe(r.issueUrl,Qs,"issue");let e=pe(),s=await new St(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 Fa=A(()=>{"use strict";ee();ke()});var Ao={};re(Ao,{runTrack:()=>ju,runUntrack:()=>Nu});async function ju(r){Z(r.prUrl),oe(r.prUrl,ge,"PR");let e=pe(),t=fe(e),s=we(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 Nu(r){return Z(r.prUrl),oe(r.prUrl,ge,"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 Oo=A(()=>{"use strict";ee();ke();Re()});var Ua={};re(Ua,{runRead:()=>Hu});async function Hu(r){if(!r.all&&!r.prUrl)throw new Error("PR URL or --all flag required");return r.prUrl&&Z(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 Ma=A(()=>{"use strict";ke()});var Ys={};re(Ys,{runClaim:()=>Vu,runComments:()=>qu,runPost:()=>Bu});async function qu(r){Z(r.prUrl),oe(r.prUrl,ge,"PR");let e=pe(),t=I(),s=fe(e),o=we(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,u,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,R=h=>!(!h.user||h.user.login===m||h.user.type==="Bot"&&!r.showBots),g=l.filter(R).sort((h,C)=>new Date(C.created_at).getTime()-new Date(h.created_at).getTime()),v=u.filter(R).sort((h,C)=>new Date(C.created_at).getTime()-new Date(h.created_at).getTime()),k=p.filter(h=>R(h)&&h.body&&h.body.trim()).sort((h,C)=>new Date(C.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:k.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:v.map(h=>({user:h.user?.login,body:h.body,createdAt:h.created_at})),summary:{reviewCount:k.length,inlineCommentCount:g.length,discussionCommentCount:v.length}}}async function Bu(r){if(Z(r.url),oe(r.url,ds,"issue or PR"),!r.message.trim())throw new Error("No message provided");ps(r.message);let e=pe(),t=we(r.url);if(!t)throw new Error("Invalid GitHub URL format");let{owner:s,repo:o,number:n}=t,i=fe(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 Vu(r){Z(r.issueUrl),oe(r.issueUrl,Qs,"issue");let e=pe(),t=r.message||"Hi! I'd like to work on this issue. Could you assign it to me?";ps(t);let s=we(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=fe(e),{data:c}=await a.issues.createComment({owner:o,repo:n,issue_number:i,body:t});try{let l=I();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 Xs=A(()=>{"use strict";ee();Yt();ke()});var La={};re(La,{runConfig:()=>zu});async function zu(r){let e=I(),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:Ut(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 ja=A(()=>{"use strict";ee();ke()});var Na={};re(Na,{runInit:()=>Wu});async function Wu(r){Ut(r.username);let e=I();return e.updateConfig({githubUsername:r.username}),e.save(),{username:r.username,message:"Username saved. Run `daily` to fetch your open PRs from GitHub."}}var Ha=A(()=>{"use strict";ee();ke()});var $o={};re($o,{runCheckSetup:()=>Ku,runSetup:()=>Ju});function Go(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 Ju(r){let e=I(),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":Ut(c),e.updateConfig({githubUsername:c}),s[i]=c;break;case"maxActivePRs":{let l=Go(c,"maxActivePRs");e.updateConfig({maxActivePRs:l}),s[i]=String(l);break}case"dormantDays":{let l=Go(c,"dormantDays");e.updateConfig({dormantThresholdDays:l}),s[i]=String(l);break}case"approachingDays":{let l=Go(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),u=[],p=[];for(let m of l){let R=m.replace(/\s+/g,"");/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(R)?u.push(R):p.push(m)}if(p.length>0&&(o.push(`Warning: Skipping invalid entries (expected "owner/repo" format): ${p.join(", ")}`),s.aiPolicyBlocklist_invalidEntries=p.join(", ")),u.length===0&&l.length>0){o.push("Warning: All entries were invalid. Blocklist not updated."),s[i]="(all entries invalid)";break}e.updateConfig({aiPolicyBlocklist:u}),s[i]=u.length>0?u.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??pt.aiPolicyBlocklist??null,default:["matplotlib/matplotlib"],type:"list"}]}}async function Ku(){let r=I();return{setupComplete:r.isSetupComplete(),username:r.getState().config.githubUsername}}var xo=A(()=>{"use strict";ee();ie();ke()});function j(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var Zs=A(()=>{"use strict"});var qa,Ba=A(()=>{"use strict";qa=`
|
|
96
|
-
:root, [data-theme="dark"] {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
--text-secondary: #8b949e;
|
|
104
|
-
--text-muted: #6e7681;
|
|
105
|
-
--accent-merged: #a855f7;
|
|
106
|
-
--accent-merged-dim: rgba(168, 85, 247, 0.12);
|
|
107
|
-
--accent-open: #3fb950;
|
|
108
|
-
--accent-open-dim: rgba(63, 185, 80, 0.12);
|
|
109
|
-
--accent-warning: #d29922;
|
|
110
|
-
--accent-warning-dim: rgba(210, 153, 34, 0.12);
|
|
111
|
-
--accent-error: #f85149;
|
|
112
|
-
--accent-error-dim: rgba(248, 81, 73, 0.10);
|
|
113
|
-
--accent-conflict: #da3633;
|
|
114
|
-
--accent-info: #58a6ff;
|
|
115
|
-
--accent-info-dim: rgba(88, 166, 255, 0.08);
|
|
116
|
-
--chart-border: rgba(8, 11, 16, 0.8);
|
|
117
|
-
--chart-grid: rgba(48, 54, 61, 0.3);
|
|
118
|
-
--scrollbar-track: rgba(28, 33, 40, 0.8);
|
|
119
|
-
--scrollbar-thumb: rgba(48, 54, 61, 0.6);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
[data-theme="light"] {
|
|
123
|
-
--bg-base: #f6f8fa;
|
|
124
|
-
--bg-surface: rgba(255, 255, 255, 0.85);
|
|
125
|
-
--bg-elevated: rgba(246, 248, 250, 0.95);
|
|
126
|
-
--border: rgba(208, 215, 222, 0.6);
|
|
127
|
-
--border-muted: rgba(216, 222, 228, 0.5);
|
|
128
|
-
--text-primary: #1f2328;
|
|
129
|
-
--text-secondary: #656d76;
|
|
130
|
-
--text-muted: #8b949e;
|
|
131
|
-
--accent-merged: #8250df;
|
|
132
|
-
--accent-merged-dim: rgba(130, 80, 223, 0.1);
|
|
133
|
-
--accent-open: #1a7f37;
|
|
134
|
-
--accent-open-dim: rgba(26, 127, 55, 0.1);
|
|
135
|
-
--accent-warning: #9a6700;
|
|
136
|
-
--accent-warning-dim: rgba(154, 103, 0, 0.1);
|
|
137
|
-
--accent-error: #cf222e;
|
|
138
|
-
--accent-error-dim: rgba(207, 34, 46, 0.08);
|
|
139
|
-
--accent-conflict: #cf222e;
|
|
140
|
-
--accent-info: #0969da;
|
|
141
|
-
--accent-info-dim: rgba(9, 105, 218, 0.08);
|
|
142
|
-
--chart-border: rgba(255, 255, 255, 0.8);
|
|
143
|
-
--chart-grid: rgba(208, 215, 222, 0.4);
|
|
144
|
-
--scrollbar-track: rgba(246, 248, 250, 0.95);
|
|
145
|
-
--scrollbar-thumb: rgba(208, 215, 222, 0.6);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
@media (prefers-color-scheme: light) {
|
|
149
|
-
:root:not([data-theme="dark"]) {
|
|
150
|
-
--bg-base: #f6f8fa;
|
|
151
|
-
--bg-surface: rgba(255, 255, 255, 0.85);
|
|
152
|
-
--bg-elevated: rgba(246, 248, 250, 0.95);
|
|
153
|
-
--border: rgba(208, 215, 222, 0.6);
|
|
154
|
-
--border-muted: rgba(216, 222, 228, 0.5);
|
|
155
|
-
--text-primary: #1f2328;
|
|
156
|
-
--text-secondary: #656d76;
|
|
157
|
-
--text-muted: #8b949e;
|
|
158
|
-
--accent-merged: #8250df;
|
|
159
|
-
--accent-merged-dim: rgba(130, 80, 223, 0.1);
|
|
160
|
-
--accent-open: #1a7f37;
|
|
161
|
-
--accent-open-dim: rgba(26, 127, 55, 0.1);
|
|
162
|
-
--accent-warning: #9a6700;
|
|
163
|
-
--accent-warning-dim: rgba(154, 103, 0, 0.1);
|
|
164
|
-
--accent-error: #cf222e;
|
|
165
|
-
--accent-error-dim: rgba(207, 34, 46, 0.08);
|
|
166
|
-
--accent-conflict: #cf222e;
|
|
167
|
-
--accent-info: #0969da;
|
|
168
|
-
--accent-info-dim: rgba(9, 105, 218, 0.08);
|
|
169
|
-
--chart-border: rgba(255, 255, 255, 0.8);
|
|
170
|
-
--chart-grid: rgba(208, 215, 222, 0.4);
|
|
171
|
-
--scrollbar-track: rgba(246, 248, 250, 0.95);
|
|
172
|
-
--scrollbar-thumb: rgba(208, 215, 222, 0.6);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
177
|
-
|
|
178
|
-
body {
|
|
179
|
-
font-family: 'Geist', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
180
|
-
background: var(--bg-base);
|
|
181
|
-
color: var(--text-primary);
|
|
182
|
-
min-height: 100vh;
|
|
183
|
-
line-height: 1.5;
|
|
184
|
-
overflow-x: hidden;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
body::before {
|
|
188
|
-
content: '';
|
|
189
|
-
position: fixed;
|
|
190
|
-
top: -20%; left: -10%;
|
|
191
|
-
width: 60%; height: 60%;
|
|
192
|
-
background: radial-gradient(ellipse, rgba(88, 166, 255, 0.06) 0%, transparent 70%);
|
|
193
|
-
pointer-events: none;
|
|
194
|
-
z-index: 0;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
body::after {
|
|
198
|
-
content: '';
|
|
199
|
-
position: fixed;
|
|
200
|
-
bottom: -20%; right: -10%;
|
|
201
|
-
width: 50%; height: 50%;
|
|
202
|
-
background: radial-gradient(ellipse, rgba(168, 85, 247, 0.05) 0%, transparent 70%);
|
|
203
|
-
pointer-events: none;
|
|
204
|
-
z-index: 0;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
[data-theme="light"] body::before,
|
|
208
|
-
[data-theme="light"] body::after {
|
|
209
|
-
display: none;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
.container {
|
|
213
|
-
max-width: 1400px;
|
|
214
|
-
margin: 0 auto;
|
|
215
|
-
padding: 2rem;
|
|
216
|
-
position: relative;
|
|
217
|
-
z-index: 1;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
.header {
|
|
221
|
-
display: flex;
|
|
222
|
-
align-items: center;
|
|
223
|
-
justify-content: space-between;
|
|
224
|
-
margin-bottom: 1.5rem;
|
|
225
|
-
padding-bottom: 1rem;
|
|
226
|
-
border-bottom: 1px solid var(--border-muted);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
.header-left {
|
|
230
|
-
display: flex;
|
|
231
|
-
align-items: center;
|
|
232
|
-
gap: 1rem;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
.logo {
|
|
236
|
-
width: 44px;
|
|
237
|
-
height: 44px;
|
|
238
|
-
background: linear-gradient(135deg, var(--accent-info) 0%, var(--accent-merged) 50%, #f778ba 100%);
|
|
239
|
-
border-radius: 12px;
|
|
240
|
-
display: flex;
|
|
241
|
-
align-items: center;
|
|
242
|
-
justify-content: center;
|
|
243
|
-
font-size: 1.5rem;
|
|
244
|
-
box-shadow: 0 0 24px rgba(168, 85, 247, 0.3), 0 0 48px rgba(88, 166, 255, 0.15);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.header h1 {
|
|
248
|
-
font-size: 1.75rem;
|
|
249
|
-
font-weight: 600;
|
|
250
|
-
letter-spacing: -0.02em;
|
|
251
|
-
background: linear-gradient(135deg, var(--text-primary) 0%, var(--text-secondary) 100%);
|
|
252
|
-
-webkit-background-clip: text;
|
|
253
|
-
-webkit-text-fill-color: transparent;
|
|
254
|
-
background-clip: text;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
.header-subtitle {
|
|
258
|
-
font-family: 'Geist Mono', monospace;
|
|
259
|
-
font-size: 0.75rem;
|
|
260
|
-
color: var(--text-muted);
|
|
261
|
-
text-transform: uppercase;
|
|
262
|
-
letter-spacing: 0.1em;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
.timestamp {
|
|
266
|
-
font-family: 'Geist Mono', monospace;
|
|
267
|
-
font-size: 0.8rem;
|
|
268
|
-
color: var(--text-muted);
|
|
269
|
-
display: flex;
|
|
270
|
-
align-items: center;
|
|
271
|
-
gap: 0.5rem;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
.timestamp::before {
|
|
275
|
-
content: '';
|
|
276
|
-
width: 8px;
|
|
277
|
-
height: 8px;
|
|
278
|
-
background: var(--accent-open);
|
|
279
|
-
border-radius: 50%;
|
|
280
|
-
animation: pulse 2s ease-in-out infinite;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
@keyframes pulse {
|
|
284
|
-
0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(35, 134, 54, 0.4); }
|
|
285
|
-
50% { opacity: 0.8; box-shadow: 0 0 0 8px rgba(35, 134, 54, 0); }
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
.stats-grid {
|
|
289
|
-
display: flex;
|
|
290
|
-
background: var(--bg-surface);
|
|
291
|
-
border: 1px solid var(--border-muted);
|
|
292
|
-
border-radius: 12px;
|
|
293
|
-
margin-bottom: 1.5rem;
|
|
294
|
-
overflow: hidden;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
@media (max-width: 768px) {
|
|
298
|
-
.stats-grid { flex-wrap: wrap; }
|
|
299
|
-
.stat-card { flex: 1 1 33%; }
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
.stat-card {
|
|
303
|
-
flex: 1;
|
|
304
|
-
padding: 1rem 1.25rem;
|
|
305
|
-
position: relative;
|
|
306
|
-
transition: background 0.2s ease;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
.stat-card + .stat-card {
|
|
310
|
-
border-left: 1px solid var(--border-muted);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.stat-card:hover {
|
|
314
|
-
background: rgba(255, 255, 255, 0.02);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
.stat-card::after {
|
|
318
|
-
content: '';
|
|
319
|
-
position: absolute;
|
|
320
|
-
bottom: 0; left: 0.75rem; right: 0.75rem;
|
|
321
|
-
height: 2px;
|
|
322
|
-
background: var(--accent-color, var(--border));
|
|
323
|
-
border-radius: 2px;
|
|
324
|
-
opacity: 0.7;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
.stat-card.active { --accent-color: var(--accent-open); }
|
|
328
|
-
.stat-card.merged { --accent-color: var(--accent-merged); }
|
|
329
|
-
.stat-card.closed { --accent-color: var(--text-muted); }
|
|
330
|
-
.stat-card.rate { --accent-color: var(--accent-info); }
|
|
331
|
-
|
|
332
|
-
.stat-value {
|
|
333
|
-
font-family: 'Geist Mono', monospace;
|
|
334
|
-
font-size: 1.75rem;
|
|
335
|
-
font-weight: 600;
|
|
336
|
-
line-height: 1;
|
|
337
|
-
margin-bottom: 0.25rem;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
.stat-card.active .stat-value { color: var(--accent-open); }
|
|
341
|
-
.stat-card.merged .stat-value { color: var(--accent-merged); }
|
|
342
|
-
.stat-card.closed .stat-value { color: var(--text-muted); }
|
|
343
|
-
.stat-card.rate .stat-value { color: var(--accent-info); }
|
|
344
|
-
|
|
345
|
-
.stat-label {
|
|
346
|
-
font-size: 0.7rem;
|
|
347
|
-
color: var(--text-secondary);
|
|
348
|
-
text-transform: uppercase;
|
|
349
|
-
letter-spacing: 0.05em;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
.health-section {
|
|
353
|
-
background: var(--bg-surface);
|
|
354
|
-
border: 1px solid var(--border-muted);
|
|
355
|
-
border-radius: 10px;
|
|
356
|
-
padding: 1.25rem;
|
|
357
|
-
margin-bottom: 1.25rem;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
.health-header {
|
|
361
|
-
display: flex;
|
|
362
|
-
align-items: center;
|
|
363
|
-
gap: 0.75rem;
|
|
364
|
-
margin-bottom: 1rem;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
.health-header h2 {
|
|
368
|
-
font-size: 1rem;
|
|
369
|
-
font-weight: 600;
|
|
370
|
-
color: var(--text-primary);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
.health-badge {
|
|
374
|
-
font-family: 'Geist Mono', monospace;
|
|
375
|
-
font-size: 0.7rem;
|
|
376
|
-
padding: 0.25rem 0.5rem;
|
|
377
|
-
border-radius: 4px;
|
|
378
|
-
background: var(--accent-error-dim);
|
|
379
|
-
color: var(--accent-error);
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
.health-items {
|
|
383
|
-
display: grid;
|
|
384
|
-
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
385
|
-
gap: 0.75rem;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
.health-item {
|
|
389
|
-
display: flex;
|
|
390
|
-
align-items: center;
|
|
391
|
-
gap: 0.75rem;
|
|
392
|
-
padding: 0.75rem 1rem;
|
|
393
|
-
background: var(--bg-elevated);
|
|
394
|
-
border-radius: 8px;
|
|
395
|
-
border-left: 3px solid;
|
|
396
|
-
transition: transform 0.15s ease;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
.health-item:hover { transform: translateX(4px); }
|
|
400
|
-
|
|
401
|
-
.health-item.ci-failing {
|
|
402
|
-
border-left-color: var(--accent-error);
|
|
403
|
-
background: var(--accent-error-dim);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
.health-item.conflict {
|
|
407
|
-
border-left-color: var(--accent-conflict);
|
|
408
|
-
background: rgba(218, 54, 51, 0.1);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
.health-item.incomplete-checklist {
|
|
412
|
-
border-left-color: var(--accent-info);
|
|
413
|
-
}
|
|
414
|
-
.health-item.needs-response,
|
|
415
|
-
.health-item.needs-changes {
|
|
416
|
-
border-left-color: var(--accent-warning);
|
|
417
|
-
background: var(--accent-warning-dim);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
.health-item.changes-addressed,
|
|
421
|
-
.health-item.waiting-maintainer {
|
|
422
|
-
border-left-color: var(--accent-info);
|
|
423
|
-
background: var(--accent-info-dim);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
.health-item.ci-not-running {
|
|
427
|
-
border-left-color: var(--text-muted);
|
|
428
|
-
background: rgba(110, 118, 129, 0.1);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
.health-item.missing-files {
|
|
432
|
-
border-left-color: var(--accent-warning);
|
|
433
|
-
background: var(--accent-warning-dim);
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
.health-item.ci-blocked {
|
|
437
|
-
border-left-color: var(--text-muted);
|
|
438
|
-
background: rgba(110, 118, 129, 0.1);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
.health-item.needs-rebase {
|
|
442
|
-
border-left-color: var(--accent-warning);
|
|
443
|
-
background: var(--accent-warning-dim);
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
.health-item.shelved {
|
|
447
|
-
border-left-color: var(--text-muted);
|
|
448
|
-
background: rgba(110, 118, 129, 0.06);
|
|
449
|
-
opacity: 0.6;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
.health-item.shelved .health-icon { background: rgba(110, 118, 129, 0.12); color: var(--text-muted); }
|
|
453
|
-
|
|
454
|
-
.health-item.auto-unshelved {
|
|
455
|
-
border-left-color: var(--accent-info);
|
|
456
|
-
background: var(--accent-info-dim);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
.health-item.auto-unshelved .health-icon { background: var(--accent-info-dim); color: var(--accent-info); }
|
|
460
|
-
|
|
461
|
-
.stat-card.shelved { --accent-color: var(--text-muted); }
|
|
462
|
-
.stat-card.shelved .stat-value { color: var(--text-muted); }
|
|
463
|
-
|
|
464
|
-
.waiting-section {
|
|
465
|
-
border-color: rgba(88, 166, 255, 0.2);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
.health-icon {
|
|
469
|
-
width: 32px;
|
|
470
|
-
height: 32px;
|
|
471
|
-
border-radius: 8px;
|
|
472
|
-
display: flex;
|
|
473
|
-
align-items: center;
|
|
474
|
-
justify-content: center;
|
|
475
|
-
font-size: 1rem;
|
|
476
|
-
flex-shrink: 0;
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
.health-item.ci-failing .health-icon { background: var(--accent-error-dim); color: var(--accent-error); }
|
|
480
|
-
.health-item.conflict .health-icon { background: rgba(218, 54, 51, 0.15); color: var(--accent-conflict); }
|
|
481
|
-
.health-item.incomplete-checklist .health-icon { background: var(--accent-info-dim); color: var(--accent-info); }
|
|
482
|
-
.health-item.needs-response .health-icon,
|
|
483
|
-
.health-item.needs-changes .health-icon { background: var(--accent-warning-dim); color: var(--accent-warning); }
|
|
484
|
-
.health-item.changes-addressed .health-icon,
|
|
485
|
-
.health-item.waiting-maintainer .health-icon { background: var(--accent-info-dim); color: var(--accent-info); }
|
|
486
|
-
.health-item.ci-not-running .health-icon { background: rgba(110, 118, 129, 0.15); color: var(--text-muted); }
|
|
487
|
-
.health-item.missing-files .health-icon { background: var(--accent-warning-dim); color: var(--accent-warning); }
|
|
488
|
-
.health-item.ci-blocked .health-icon { background: rgba(110, 118, 129, 0.15); color: var(--text-muted); }
|
|
489
|
-
.health-item.needs-rebase .health-icon { background: var(--accent-warning-dim); color: var(--accent-warning); }
|
|
490
|
-
|
|
491
|
-
.health-content { flex: 1; min-width: 0; }
|
|
492
|
-
|
|
493
|
-
.health-title {
|
|
494
|
-
font-size: 0.85rem;
|
|
495
|
-
font-weight: 500;
|
|
496
|
-
color: var(--text-primary);
|
|
497
|
-
white-space: nowrap;
|
|
498
|
-
overflow: hidden;
|
|
499
|
-
text-overflow: ellipsis;
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
.health-title a { color: inherit; text-decoration: none; }
|
|
503
|
-
.health-title a:hover { color: var(--accent-info); }
|
|
504
|
-
|
|
505
|
-
.health-meta {
|
|
506
|
-
font-family: 'Geist Mono', monospace;
|
|
507
|
-
font-size: 0.7rem;
|
|
508
|
-
color: var(--text-muted);
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
.health-empty {
|
|
512
|
-
display: flex;
|
|
513
|
-
align-items: center;
|
|
514
|
-
justify-content: center;
|
|
515
|
-
padding: 2rem;
|
|
516
|
-
color: var(--text-muted);
|
|
517
|
-
font-size: 0.9rem;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
.health-empty::before {
|
|
521
|
-
content: '\\2713';
|
|
522
|
-
display: inline-flex;
|
|
523
|
-
align-items: center;
|
|
524
|
-
justify-content: center;
|
|
525
|
-
width: 24px;
|
|
526
|
-
height: 24px;
|
|
527
|
-
background: var(--accent-open-dim);
|
|
528
|
-
color: var(--accent-open);
|
|
529
|
-
border-radius: 50%;
|
|
530
|
-
margin-right: 0.75rem;
|
|
531
|
-
font-weight: bold;
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
.main-grid {
|
|
535
|
-
display: grid;
|
|
536
|
-
grid-template-columns: 1fr 1fr;
|
|
537
|
-
gap: 1.25rem;
|
|
538
|
-
margin-bottom: 1.25rem;
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
@media (max-width: 1024px) { .main-grid { grid-template-columns: 1fr; } }
|
|
542
|
-
|
|
543
|
-
.card {
|
|
544
|
-
background: var(--bg-surface);
|
|
545
|
-
border: 1px solid var(--border-muted);
|
|
546
|
-
border-radius: 10px;
|
|
547
|
-
overflow: hidden;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
.card-header {
|
|
551
|
-
display: flex;
|
|
552
|
-
align-items: center;
|
|
553
|
-
justify-content: space-between;
|
|
554
|
-
padding: 0.75rem 1.125rem;
|
|
555
|
-
border-bottom: 1px solid var(--border-muted);
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
.card-title {
|
|
559
|
-
font-size: 0.75rem;
|
|
560
|
-
font-weight: 600;
|
|
561
|
-
color: var(--text-secondary);
|
|
562
|
-
text-transform: uppercase;
|
|
563
|
-
letter-spacing: 0.04em;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
.card-body { padding: 1rem 1.125rem; }
|
|
567
|
-
|
|
568
|
-
.chart-container {
|
|
569
|
-
position: relative;
|
|
570
|
-
height: 260px;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
.pr-list-section {
|
|
574
|
-
background: var(--bg-surface);
|
|
575
|
-
border: 1px solid var(--border-muted);
|
|
576
|
-
border-radius: 10px;
|
|
577
|
-
overflow: hidden;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
.pr-list-header {
|
|
581
|
-
display: flex;
|
|
582
|
-
align-items: center;
|
|
583
|
-
justify-content: space-between;
|
|
584
|
-
padding: 0.75rem 1.125rem;
|
|
585
|
-
border-bottom: 1px solid var(--border-muted);
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
.pr-list-title {
|
|
589
|
-
font-size: 0.75rem;
|
|
590
|
-
font-weight: 600;
|
|
591
|
-
color: var(--text-secondary);
|
|
592
|
-
text-transform: uppercase;
|
|
593
|
-
letter-spacing: 0.04em;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
.pr-count {
|
|
597
|
-
font-family: 'Geist Mono', monospace;
|
|
598
|
-
font-size: 0.75rem;
|
|
599
|
-
padding: 0.25rem 0.5rem;
|
|
600
|
-
background: var(--accent-open-dim);
|
|
601
|
-
color: var(--accent-open);
|
|
602
|
-
border-radius: 4px;
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
.pr-list {
|
|
606
|
-
max-height: 600px;
|
|
607
|
-
overflow-y: auto;
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
.pr-list::-webkit-scrollbar { width: 6px; }
|
|
611
|
-
.pr-list::-webkit-scrollbar-track { background: var(--scrollbar-track, var(--bg-elevated)); }
|
|
612
|
-
.pr-list::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb, var(--border)); border-radius: 3px; }
|
|
613
|
-
|
|
614
|
-
.pr-item {
|
|
615
|
-
display: flex;
|
|
616
|
-
align-items: flex-start;
|
|
617
|
-
gap: 1rem;
|
|
618
|
-
padding: 1rem 1.25rem;
|
|
619
|
-
border-bottom: 1px solid var(--border-muted);
|
|
620
|
-
transition: background 0.15s ease;
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
.pr-item:last-child { border-bottom: none; }
|
|
624
|
-
.pr-item:hover { background: var(--bg-elevated); }
|
|
625
|
-
|
|
626
|
-
.pr-status-indicator {
|
|
627
|
-
width: 40px;
|
|
628
|
-
height: 40px;
|
|
629
|
-
border-radius: 10px;
|
|
630
|
-
display: flex;
|
|
631
|
-
align-items: center;
|
|
632
|
-
justify-content: center;
|
|
633
|
-
flex-shrink: 0;
|
|
634
|
-
font-size: 1.1rem;
|
|
635
|
-
background: var(--accent-open-dim);
|
|
636
|
-
color: var(--accent-open);
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
.pr-item.has-issues .pr-status-indicator {
|
|
640
|
-
background: var(--accent-error-dim);
|
|
641
|
-
color: var(--accent-error);
|
|
642
|
-
animation: attention-pulse 2s ease-in-out infinite;
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
.pr-item.stale .pr-status-indicator {
|
|
646
|
-
background: var(--accent-warning-dim);
|
|
647
|
-
color: var(--accent-warning);
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
@keyframes attention-pulse {
|
|
651
|
-
0%, 100% { box-shadow: 0 0 0 0 rgba(248, 81, 73, 0.4); }
|
|
652
|
-
50% { box-shadow: 0 0 0 6px rgba(248, 81, 73, 0); }
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
.pr-content { flex: 1; min-width: 0; }
|
|
656
|
-
|
|
657
|
-
.pr-title-row {
|
|
658
|
-
display: flex;
|
|
659
|
-
align-items: center;
|
|
660
|
-
gap: 0.5rem;
|
|
661
|
-
margin-bottom: 0.25rem;
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
.pr-title {
|
|
665
|
-
font-size: 0.9rem;
|
|
666
|
-
font-weight: 500;
|
|
667
|
-
color: var(--text-primary);
|
|
668
|
-
text-decoration: none;
|
|
669
|
-
white-space: nowrap;
|
|
670
|
-
overflow: hidden;
|
|
671
|
-
text-overflow: ellipsis;
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
.pr-title:hover { color: var(--accent-info); }
|
|
675
|
-
|
|
676
|
-
.pr-repo {
|
|
677
|
-
font-family: 'Geist Mono', monospace;
|
|
678
|
-
font-size: 0.75rem;
|
|
679
|
-
color: var(--text-muted);
|
|
680
|
-
flex-shrink: 0;
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
.pr-badges {
|
|
684
|
-
display: flex;
|
|
685
|
-
flex-wrap: wrap;
|
|
686
|
-
gap: 0.5rem;
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
.badge {
|
|
690
|
-
font-family: 'Geist Mono', monospace;
|
|
691
|
-
font-size: 0.65rem;
|
|
692
|
-
font-weight: 500;
|
|
693
|
-
padding: 0.2rem 0.5rem;
|
|
694
|
-
border-radius: 4px;
|
|
695
|
-
text-transform: uppercase;
|
|
696
|
-
letter-spacing: 0.03em;
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
.badge-ci-failing { background: var(--accent-error-dim); color: var(--accent-error); }
|
|
700
|
-
.badge-conflict { background: rgba(218, 54, 51, 0.15); color: var(--accent-conflict); }
|
|
701
|
-
.badge-needs-response { background: var(--accent-warning-dim); color: var(--accent-warning); }
|
|
702
|
-
.badge-stale { background: var(--accent-warning-dim); color: var(--accent-warning); }
|
|
703
|
-
.badge-passing { background: var(--accent-open-dim); color: var(--accent-open); }
|
|
704
|
-
.badge-pending { background: var(--accent-info-dim); color: var(--accent-info); }
|
|
705
|
-
.badge-days { background: var(--bg-elevated); color: var(--text-muted); }
|
|
706
|
-
.badge-changes-requested { background: var(--accent-warning-dim); color: var(--accent-warning); }
|
|
707
|
-
.badge-changes-addressed { background: var(--accent-info-dim); color: var(--accent-info); }
|
|
708
|
-
|
|
709
|
-
.pr-activity {
|
|
710
|
-
font-family: 'Geist Mono', monospace;
|
|
711
|
-
font-size: 0.7rem;
|
|
712
|
-
color: var(--text-muted);
|
|
713
|
-
margin-left: auto;
|
|
714
|
-
text-align: right;
|
|
715
|
-
flex-shrink: 0;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
.empty-state {
|
|
719
|
-
display: flex;
|
|
720
|
-
flex-direction: column;
|
|
721
|
-
align-items: center;
|
|
722
|
-
justify-content: center;
|
|
723
|
-
padding: 3rem;
|
|
724
|
-
color: var(--text-muted);
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
.empty-state-icon {
|
|
728
|
-
font-size: 2.5rem;
|
|
729
|
-
margin-bottom: 1rem;
|
|
730
|
-
opacity: 0.5;
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
.footer {
|
|
734
|
-
text-align: center;
|
|
735
|
-
padding-top: 1.5rem;
|
|
736
|
-
border-top: 1px solid var(--border-muted);
|
|
737
|
-
margin-top: 1.5rem;
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
.footer p {
|
|
741
|
-
font-family: 'Geist Mono', monospace;
|
|
742
|
-
font-size: 0.7rem;
|
|
743
|
-
color: var(--text-muted);
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
@keyframes fadeInUp {
|
|
747
|
-
from { opacity: 0; transform: translateY(12px); }
|
|
748
|
-
to { opacity: 1; transform: translateY(0); }
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
.stats-grid, .health-section, .pr-list-section {
|
|
752
|
-
animation: fadeInUp 0.35s ease;
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
.theme-toggle {
|
|
756
|
-
background: var(--bg-elevated);
|
|
757
|
-
border: 1px solid var(--border-muted);
|
|
758
|
-
border-radius: 8px;
|
|
759
|
-
padding: 0.4rem 0.6rem;
|
|
760
|
-
cursor: pointer;
|
|
761
|
-
color: var(--text-secondary);
|
|
762
|
-
display: flex;
|
|
763
|
-
align-items: center;
|
|
764
|
-
gap: 0.4rem;
|
|
765
|
-
font-family: 'Geist Mono', monospace;
|
|
766
|
-
font-size: 0.7rem;
|
|
767
|
-
transition: background 0.2s ease, color 0.2s ease;
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
.theme-toggle:hover {
|
|
771
|
-
background: var(--bg-surface);
|
|
772
|
-
color: var(--text-primary);
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
.theme-toggle svg { flex-shrink: 0; }
|
|
776
|
-
|
|
777
|
-
.header-controls {
|
|
778
|
-
display: flex;
|
|
779
|
-
align-items: center;
|
|
780
|
-
gap: 0.75rem;
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
.filter-toolbar {
|
|
784
|
-
display: flex;
|
|
785
|
-
align-items: center;
|
|
786
|
-
gap: 0.75rem;
|
|
787
|
-
padding: 0.75rem 1rem;
|
|
788
|
-
background: var(--bg-surface);
|
|
789
|
-
border: 1px solid var(--border-muted);
|
|
790
|
-
border-radius: 10px;
|
|
791
|
-
margin-bottom: 1.25rem;
|
|
792
|
-
flex-wrap: wrap;
|
|
793
|
-
}
|
|
794
|
-
|
|
795
|
-
.filter-toolbar label {
|
|
796
|
-
font-family: 'Geist Mono', monospace;
|
|
797
|
-
font-size: 0.7rem;
|
|
798
|
-
color: var(--text-muted);
|
|
799
|
-
text-transform: uppercase;
|
|
800
|
-
letter-spacing: 0.04em;
|
|
801
|
-
flex-shrink: 0;
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
.filter-search {
|
|
805
|
-
flex: 1;
|
|
806
|
-
min-width: 180px;
|
|
807
|
-
padding: 0.4rem 0.75rem;
|
|
808
|
-
background: var(--bg-elevated);
|
|
809
|
-
border: 1px solid var(--border-muted);
|
|
810
|
-
border-radius: 6px;
|
|
811
|
-
color: var(--text-primary);
|
|
812
|
-
font-family: 'Geist', sans-serif;
|
|
813
|
-
font-size: 0.8rem;
|
|
814
|
-
outline: none;
|
|
815
|
-
transition: border-color 0.2s ease;
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
.filter-search:focus {
|
|
819
|
-
border-color: var(--accent-info);
|
|
820
|
-
}
|
|
821
|
-
|
|
822
|
-
.filter-search::placeholder {
|
|
823
|
-
color: var(--text-muted);
|
|
824
|
-
}
|
|
825
|
-
|
|
826
|
-
.filter-select {
|
|
827
|
-
padding: 0.4rem 0.75rem;
|
|
828
|
-
background: var(--bg-elevated);
|
|
829
|
-
border: 1px solid var(--border-muted);
|
|
830
|
-
border-radius: 6px;
|
|
831
|
-
color: var(--text-primary);
|
|
832
|
-
font-family: 'Geist', sans-serif;
|
|
833
|
-
font-size: 0.8rem;
|
|
834
|
-
outline: none;
|
|
835
|
-
cursor: pointer;
|
|
836
|
-
transition: border-color 0.2s ease;
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
.filter-select:focus {
|
|
840
|
-
border-color: var(--accent-info);
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
.filter-count {
|
|
844
|
-
font-family: 'Geist Mono', monospace;
|
|
845
|
-
font-size: 0.7rem;
|
|
846
|
-
color: var(--text-muted);
|
|
847
|
-
margin-left: auto;
|
|
848
|
-
flex-shrink: 0;
|
|
849
|
-
}
|
|
850
|
-
|
|
851
|
-
.pr-item[data-hidden="true"],
|
|
852
|
-
.health-item[data-hidden="true"] {
|
|
853
|
-
display: none;
|
|
854
|
-
}
|
|
855
|
-
`});function er(r,e=50){let t=r.length<=e?r:r.slice(0,e)+"...";return j(t)}function tr(r,e,t,s,o){return r.map(n=>{let i=typeof s=="string"?s:s(n),a=j(i);return`
|
|
856
|
-
<div class="health-item ${e}" data-status="${e}" data-repo="${j(n.repo)}" data-title="${j(n.title.toLowerCase())}">
|
|
857
|
-
<div class="health-icon">
|
|
858
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
859
|
-
${t}
|
|
860
|
-
</svg>
|
|
861
|
-
</div>
|
|
862
|
-
<div class="health-content">
|
|
863
|
-
<div class="health-title"><a href="${j(n.url)}" target="_blank">${j(n.repo)}#${n.number}</a> - ${a}</div>
|
|
864
|
-
<div class="health-meta">${o(n)}</div>
|
|
865
|
-
</div>
|
|
866
|
-
</div>`}).join("")}function Va(r){return er(r.title)}var Ve,za=A(()=>{"use strict";Zs();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 Wa(r,e,t,s,o,n){let i=`
|
|
867
|
-
Chart.defaults.color = '#6e7681';
|
|
868
|
-
Chart.defaults.borderColor = 'rgba(48, 54, 61, 0.4)';
|
|
869
|
-
Chart.defaults.font.family = "'Geist', sans-serif";
|
|
870
|
-
Chart.defaults.font.size = 11;
|
|
871
|
-
|
|
872
|
-
// === Status Doughnut ===
|
|
873
|
-
new Chart(document.getElementById('statusChart'), {
|
|
874
|
-
type: 'doughnut',
|
|
875
|
-
data: {
|
|
876
|
-
labels: ['Active', 'Shelved', 'Merged', 'Closed'],
|
|
877
|
-
datasets: [{
|
|
878
|
-
data: [${r.activePRs}, ${r.shelvedPRs}, ${r.mergedPRs}, ${r.closedPRs}],
|
|
879
|
-
backgroundColor: ['#3fb950', '#6e7681', '#a855f7', '#484f58'],
|
|
880
|
-
borderColor: 'rgba(8, 11, 16, 0.8)',
|
|
881
|
-
borderWidth: 2,
|
|
882
|
-
hoverOffset: 8
|
|
883
|
-
}]
|
|
884
|
-
},
|
|
885
|
-
options: {
|
|
886
|
-
responsive: true,
|
|
887
|
-
maintainAspectRatio: false,
|
|
888
|
-
cutout: '65%',
|
|
889
|
-
plugins: {
|
|
890
|
-
legend: {
|
|
891
|
-
position: 'bottom',
|
|
892
|
-
labels: { padding: 16, usePointStyle: true, pointStyle: 'circle', font: { size: 11 } }
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
});`,a=(()=>{let{minStars:l}=n.config,u=l??50,p=_=>{let G=(n.repoScores||{})[_];return Qe(G?.stargazersCount,u)},m=Object.entries((()=>{let _={};for(let G of o.openPRs||[])p(G.repo)||(_[G.repo]||(_[G.repo]={active:0,merged:0,closed:0}),_[G.repo].active++);for(let[G,F]of Object.entries(n.repoScores||{}))p(G)||(_[G]||(_[G]={active:0,merged:0,closed:0}),_[G].merged=F.mergedPRCount,_[G].closed=F.closedWithoutMergeCount);return _})()).sort((_,G)=>{let F=_[1].merged+_[1].active+_[1].closed;return G[1].merged+G[1].active+G[1].closed-F}),R=m.slice(0,10),g=m.slice(10),v=m.reduce((_,[,G])=>_+G.merged+G.active+G.closed,0);if(g.length>0){let _=g.reduce((G,[,F])=>({active:G.active+F.active,merged:G.merged+F.merged,closed:G.closed+F.closed}),{active:0,merged:0,closed:0});R.push(["Other",_])}let k=R.map(([_])=>_==="Other"?"Other":_.split("/")[1]||_),h=R.map(([,_])=>_.merged),C=R.map(([,_])=>_.active),S=R.map(([,_])=>_.closed);return`
|
|
897
|
-
new Chart(document.getElementById('reposChart'), {
|
|
898
|
-
type: 'bar',
|
|
899
|
-
data: {
|
|
900
|
-
labels: ${JSON.stringify(k)},
|
|
901
|
-
datasets: [
|
|
902
|
-
{ label: 'Merged', data: ${JSON.stringify(h)}, backgroundColor: '#a855f7', borderRadius: 3 },
|
|
903
|
-
{ label: 'Active', data: ${JSON.stringify(C)}, backgroundColor: '#3fb950', borderRadius: 3 },
|
|
904
|
-
{ label: 'Closed', data: ${JSON.stringify(S)}, backgroundColor: '#484f58', borderRadius: 3 }
|
|
905
|
-
]
|
|
906
|
-
},
|
|
907
|
-
options: {
|
|
908
|
-
responsive: true,
|
|
909
|
-
maintainAspectRatio: false,
|
|
910
|
-
scales: {
|
|
911
|
-
x: { stacked: true, grid: { display: false }, ticks: { font: { size: 10 } } },
|
|
912
|
-
y: { stacked: true, grid: { color: 'rgba(48, 54, 61, 0.3)' }, ticks: { stepSize: 1 } }
|
|
913
|
-
},
|
|
914
|
-
plugins: {
|
|
915
|
-
legend: { position: 'bottom', labels: { padding: 16, usePointStyle: true, pointStyle: 'circle', font: { size: 11 } } },
|
|
916
|
-
tooltip: {
|
|
917
|
-
callbacks: {
|
|
918
|
-
afterBody: function(context) {
|
|
919
|
-
const idx = context[0].dataIndex;
|
|
920
|
-
const total = ${JSON.stringify(h)}[idx] + ${JSON.stringify(C)}[idx] + ${JSON.stringify(S)}[idx];
|
|
921
|
-
const pct = ${v} > 0 ? ((total / ${v}) * 100).toFixed(1) : '0.0';
|
|
922
|
-
return pct + '% of all PRs';
|
|
923
|
-
}
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
});`})(),c=(()=>{let l=new Date,u=[];for(let p=5;p>=0;p--){let m=new Date(l.getFullYear(),l.getMonth()-p,1);u.push(`${m.getFullYear()}-${String(m.getMonth()+1).padStart(2,"0")}`)}return`
|
|
929
|
-
const timelineMonths = ${JSON.stringify(u)};
|
|
930
|
-
const openedData = ${JSON.stringify(s)};
|
|
931
|
-
const mergedData = ${JSON.stringify(e)};
|
|
932
|
-
const closedData = ${JSON.stringify(t)};
|
|
933
|
-
new Chart(document.getElementById('monthlyChart'), {
|
|
934
|
-
type: 'bar',
|
|
935
|
-
data: {
|
|
936
|
-
labels: timelineMonths,
|
|
937
|
-
datasets: [
|
|
938
|
-
{
|
|
939
|
-
label: 'Opened',
|
|
940
|
-
data: timelineMonths.map(m => openedData[m] || 0),
|
|
941
|
-
backgroundColor: '#58a6ff',
|
|
942
|
-
borderRadius: 3
|
|
943
|
-
},
|
|
944
|
-
{
|
|
945
|
-
label: 'Merged',
|
|
946
|
-
data: timelineMonths.map(m => mergedData[m] || 0),
|
|
947
|
-
backgroundColor: '#a855f7',
|
|
948
|
-
borderRadius: 3
|
|
949
|
-
},
|
|
950
|
-
{
|
|
951
|
-
label: 'Closed',
|
|
952
|
-
data: timelineMonths.map(m => closedData[m] || 0),
|
|
953
|
-
backgroundColor: '#484f58',
|
|
954
|
-
borderRadius: 3
|
|
955
|
-
}
|
|
956
|
-
]
|
|
957
|
-
},
|
|
958
|
-
options: {
|
|
959
|
-
responsive: true,
|
|
960
|
-
maintainAspectRatio: false,
|
|
961
|
-
scales: {
|
|
962
|
-
x: { grid: { display: false } },
|
|
963
|
-
y: { grid: { color: 'rgba(48, 54, 61, 0.3)' }, beginAtZero: true, ticks: { stepSize: 1 } }
|
|
964
|
-
},
|
|
965
|
-
plugins: {
|
|
966
|
-
legend: { position: 'bottom', labels: { padding: 16, usePointStyle: true, pointStyle: 'circle', font: { size: 11 } } }
|
|
967
|
-
},
|
|
968
|
-
interaction: { intersect: false, mode: 'index' }
|
|
969
|
-
}
|
|
970
|
-
});`})();return Qu+i+`
|
|
971
|
-
`+a+`
|
|
972
|
-
`+c}var Qu,Ja=A(()=>{"use strict";gt();Qu=`
|
|
973
|
-
// === Theme Toggle ===
|
|
974
|
-
(function() {
|
|
975
|
-
var html = document.documentElement;
|
|
976
|
-
var toggle = document.getElementById('themeToggle');
|
|
977
|
-
var sunIcon = document.getElementById('themeIconSun');
|
|
978
|
-
var moonIcon = document.getElementById('themeIconMoon');
|
|
979
|
-
var label = document.getElementById('themeLabel');
|
|
980
|
-
|
|
981
|
-
function getEffectiveTheme() {
|
|
982
|
-
try {
|
|
983
|
-
var stored = localStorage.getItem('oss-dashboard-theme');
|
|
984
|
-
if (stored === 'light' || stored === 'dark') return stored;
|
|
985
|
-
} catch (e) { /* localStorage unavailable (private browsing) */ }
|
|
986
|
-
return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';
|
|
987
|
-
}
|
|
988
|
-
|
|
989
|
-
function applyTheme(theme) {
|
|
990
|
-
html.setAttribute('data-theme', theme);
|
|
991
|
-
if (theme === 'light') {
|
|
992
|
-
sunIcon.style.display = 'none';
|
|
993
|
-
moonIcon.style.display = 'block';
|
|
994
|
-
label.textContent = 'Dark';
|
|
995
|
-
} else {
|
|
996
|
-
sunIcon.style.display = 'block';
|
|
997
|
-
moonIcon.style.display = 'none';
|
|
998
|
-
label.textContent = 'Light';
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
applyTheme(getEffectiveTheme());
|
|
1003
|
-
|
|
1004
|
-
toggle.addEventListener('click', function() {
|
|
1005
|
-
var current = html.getAttribute('data-theme');
|
|
1006
|
-
var next = current === 'dark' ? 'light' : 'dark';
|
|
1007
|
-
try { localStorage.setItem('oss-dashboard-theme', next); } catch (e) { /* private browsing */ }
|
|
1008
|
-
applyTheme(next);
|
|
1009
|
-
});
|
|
1010
|
-
})();
|
|
1011
|
-
|
|
1012
|
-
// === Filtering & Search ===
|
|
1013
|
-
(function() {
|
|
1014
|
-
var searchInput = document.getElementById('searchInput');
|
|
1015
|
-
var statusFilter = document.getElementById('statusFilter');
|
|
1016
|
-
var repoFilter = document.getElementById('repoFilter');
|
|
1017
|
-
var filterCount = document.getElementById('filterCount');
|
|
1018
|
-
|
|
1019
|
-
function applyFilters() {
|
|
1020
|
-
var query = searchInput.value.toLowerCase().trim();
|
|
1021
|
-
var status = statusFilter.value;
|
|
1022
|
-
var repo = repoFilter.value;
|
|
1023
|
-
var allItems = document.querySelectorAll('.health-item[data-status], .pr-item[data-status]');
|
|
1024
|
-
var visible = 0;
|
|
1025
|
-
var total = allItems.length;
|
|
1026
|
-
|
|
1027
|
-
allItems.forEach(function(item) {
|
|
1028
|
-
var itemStatus = item.getAttribute('data-status') || '';
|
|
1029
|
-
var itemRepo = item.getAttribute('data-repo') || '';
|
|
1030
|
-
var itemTitle = item.getAttribute('data-title') || '';
|
|
1031
|
-
|
|
1032
|
-
var matchesStatus = (status === 'all') || (itemStatus === status);
|
|
1033
|
-
var matchesRepo = (repo === 'all') || (itemRepo === repo);
|
|
1034
|
-
var matchesSearch = !query || itemTitle.indexOf(query) !== -1;
|
|
1035
|
-
|
|
1036
|
-
if (matchesStatus && matchesRepo && matchesSearch) {
|
|
1037
|
-
item.setAttribute('data-hidden', 'false');
|
|
1038
|
-
visible++;
|
|
1039
|
-
} else {
|
|
1040
|
-
item.setAttribute('data-hidden', 'true');
|
|
1041
|
-
}
|
|
1042
|
-
});
|
|
1043
|
-
|
|
1044
|
-
// Show/hide parent sections if all children are hidden
|
|
1045
|
-
var sections = document.querySelectorAll('.health-section, .pr-list-section');
|
|
1046
|
-
sections.forEach(function(section) {
|
|
1047
|
-
var items = section.querySelectorAll('.health-item[data-status], .pr-item[data-status]');
|
|
1048
|
-
if (items.length === 0) return; // sections without filterable items (e.g. empty state)
|
|
1049
|
-
var anyVisible = false;
|
|
1050
|
-
items.forEach(function(item) {
|
|
1051
|
-
if (item.getAttribute('data-hidden') !== 'true') anyVisible = true;
|
|
1052
|
-
});
|
|
1053
|
-
section.style.display = anyVisible ? '' : 'none';
|
|
1054
|
-
});
|
|
1055
|
-
|
|
1056
|
-
var isFiltering = (status !== 'all' || repo !== 'all' || query.length > 0);
|
|
1057
|
-
filterCount.textContent = isFiltering ? (visible + ' of ' + total + ' items') : '';
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
searchInput.addEventListener('input', applyFilters);
|
|
1061
|
-
statusFilter.addEventListener('change', applyFilters);
|
|
1062
|
-
repoFilter.addEventListener('change', applyFilters);
|
|
1063
|
-
})();
|
|
1064
|
-
`});function Ka(r,e,t,s,o,n,i=[]){let a=o.shelvedPRs||[],c=o.autoUnshelvedPRs||[],l=o.recentlyMergedPRs||[],u=new Set(a.map(g=>g.url)),p=(o.openPRs||[]).filter(g=>!u.has(g.url)),m=o.needsAddressingPRs||[],R=o.waitingOnMaintainerPRs||[];return`<!DOCTYPE html>
|
|
1065
|
-
<html lang="en">
|
|
1066
|
-
<head>
|
|
1067
|
-
<meta charset="UTF-8">
|
|
1068
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1069
|
-
<title>OSS Autopilot - Mission Control</title>
|
|
1070
|
-
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.5.1" integrity="sha384-jb8JQMbMoBUzgWatfe6COACi2ljcDdZQ2OxczGA3bGNeWe+6DChMTBJemed7ZnvJ" crossorigin="anonymous"></script>
|
|
1071
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
1072
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
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>${qa}
|
|
1075
|
-
</style>
|
|
1076
|
-
</head>
|
|
1077
|
-
<body>
|
|
1078
|
-
<div class="container">
|
|
1079
|
-
<header class="header">
|
|
1080
|
-
<div class="header-left">
|
|
1081
|
-
<div class="logo">
|
|
1082
|
-
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1083
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1084
|
-
<path d="M12 6v6l4 2"/>
|
|
1085
|
-
</svg>
|
|
1086
|
-
</div>
|
|
1087
|
-
<div>
|
|
1088
|
-
<h1>OSS Autopilot</h1>
|
|
1089
|
-
<span class="header-subtitle">Mission Control</span>
|
|
1090
|
-
</div>
|
|
1091
|
-
</div>
|
|
1092
|
-
<div class="header-controls">
|
|
1093
|
-
<div class="timestamp">
|
|
1094
|
-
Last updated: ${o.generatedAt?new Date(o.generatedAt).toLocaleString("en-US",{weekday:"short",month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}):"Unknown"}
|
|
1095
|
-
</div>
|
|
1096
|
-
<button class="theme-toggle" id="themeToggle" title="Toggle light/dark mode">
|
|
1097
|
-
<svg id="themeIconSun" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1098
|
-
<circle cx="12" cy="12" r="5"/>
|
|
1099
|
-
<line x1="12" y1="1" x2="12" y2="3"/>
|
|
1100
|
-
<line x1="12" y1="21" x2="12" y2="23"/>
|
|
1101
|
-
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/>
|
|
1102
|
-
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/>
|
|
1103
|
-
<line x1="1" y1="12" x2="3" y2="12"/>
|
|
1104
|
-
<line x1="21" y1="12" x2="23" y2="12"/>
|
|
1105
|
-
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/>
|
|
1106
|
-
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
|
|
1107
|
-
</svg>
|
|
1108
|
-
<svg id="themeIconMoon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:none;">
|
|
1109
|
-
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
|
|
1110
|
-
</svg>
|
|
1111
|
-
<span id="themeLabel">Light</span>
|
|
1112
|
-
</button>
|
|
1113
|
-
</div>
|
|
1114
|
-
</header>
|
|
1115
|
-
|
|
1116
|
-
<div class="stats-grid">
|
|
1117
|
-
<div class="stat-card active">
|
|
1118
|
-
<div class="stat-value">${r.activePRs}</div>
|
|
1119
|
-
<div class="stat-label">Active PRs</div>
|
|
1120
|
-
</div>
|
|
1121
|
-
<div class="stat-card shelved">
|
|
1122
|
-
<div class="stat-value">${r.shelvedPRs}</div>
|
|
1123
|
-
<div class="stat-label">Shelved</div>
|
|
1124
|
-
</div>
|
|
1125
|
-
<div class="stat-card merged">
|
|
1126
|
-
<div class="stat-value">${r.mergedPRs}</div>
|
|
1127
|
-
<div class="stat-label">Merged</div>
|
|
1128
|
-
</div>
|
|
1129
|
-
<div class="stat-card closed">
|
|
1130
|
-
<div class="stat-value">${r.closedPRs}</div>
|
|
1131
|
-
<div class="stat-label">Closed</div>
|
|
1132
|
-
</div>
|
|
1133
|
-
<div class="stat-card rate">
|
|
1134
|
-
<div class="stat-value">${r.mergeRate}</div>
|
|
1135
|
-
<div class="stat-label">Merge Rate</div>
|
|
1136
|
-
</div>
|
|
1137
|
-
</div>
|
|
1138
|
-
|
|
1139
|
-
<div class="filter-toolbar" id="filterToolbar">
|
|
1140
|
-
<label>Filters</label>
|
|
1141
|
-
<input type="text" class="filter-search" id="searchInput" placeholder="Search by PR title..." />
|
|
1142
|
-
<select class="filter-select" id="statusFilter">
|
|
1143
|
-
<option value="all">All Statuses</option>
|
|
1144
|
-
<option value="needs-addressing">Needs Addressing</option>
|
|
1145
|
-
<option value="waiting-on-maintainer">Waiting on Maintainer</option>
|
|
1146
|
-
<option value="shelved">Shelved</option>
|
|
1147
|
-
<option value="merged">Recently Merged</option>
|
|
1148
|
-
<option value="closed">Recently Closed</option>
|
|
1149
|
-
<option value="auto-unshelved">Auto-Unshelved</option>
|
|
1150
|
-
</select>
|
|
1151
|
-
<select class="filter-select" id="repoFilter">
|
|
1152
|
-
<option value="all">All Repositories</option>
|
|
1153
|
-
${(()=>{let g=new Set;for(let v of p)g.add(v.repo);for(let v of a)g.add(v.repo);for(let v of m)g.add(v.repo);for(let v of R)g.add(v.repo);for(let v of l)g.add(v.repo);for(let v of o.recentlyClosedPRs||[])g.add(v.repo);for(let v of c)g.add(v.repo);return Array.from(g).sort().map(v=>`<option value="${j(v)}">${j(v)}</option>`).join(`
|
|
1154
|
-
`)})()}
|
|
1155
|
-
</select>
|
|
1156
|
-
<span class="filter-count" id="filterCount"></span>
|
|
1157
|
-
</div>
|
|
1158
|
-
|
|
1159
|
-
${m.length>0?`
|
|
1160
|
-
<section class="health-section">
|
|
1161
|
-
<div class="health-header">
|
|
1162
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-warning)" stroke-width="2">
|
|
1163
|
-
<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/>
|
|
1164
|
-
<line x1="12" y1="9" x2="12" y2="13"/>
|
|
1165
|
-
<line x1="12" y1="17" x2="12.01" y2="17"/>
|
|
1166
|
-
</svg>
|
|
1167
|
-
<h2>Action Required</h2>
|
|
1168
|
-
<span class="health-badge">${m.length} issue${m.length!==1?"s":""}</span>
|
|
1169
|
-
</div>
|
|
1170
|
-
<div class="health-items">
|
|
1171
|
-
${tr(m,"needs-addressing",Ve.xCircle,g=>g.displayLabel,g=>j(g.displayDescription))}
|
|
1172
|
-
</div>
|
|
1173
|
-
</section>
|
|
1174
|
-
`:""}
|
|
1175
|
-
|
|
1176
|
-
${R.length>0?`
|
|
1177
|
-
<section class="health-section waiting-section">
|
|
1178
|
-
<div class="health-header">
|
|
1179
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-info)" stroke-width="2">
|
|
1180
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1181
|
-
<polyline points="12 6 12 12 16 14"/>
|
|
1182
|
-
</svg>
|
|
1183
|
-
<h2>Waiting on Others</h2>
|
|
1184
|
-
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${R.length} PR${R.length!==1?"s":""}</span>
|
|
1185
|
-
</div>
|
|
1186
|
-
<div class="health-items">
|
|
1187
|
-
${tr(R,"waiting-on-maintainer",Ve.clock,g=>g.displayLabel,g=>j(g.displayDescription))}
|
|
1188
|
-
</div>
|
|
1189
|
-
</section>
|
|
1190
|
-
`:""}
|
|
1191
|
-
|
|
1192
|
-
${m.length===0&&R.length===0?`
|
|
1193
|
-
<section class="health-section">
|
|
1194
|
-
<div class="health-header">
|
|
1195
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-open)" stroke-width="2">
|
|
1196
|
-
<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
|
|
1197
|
-
<polyline points="22 4 12 14.01 9 11.01"/>
|
|
1198
|
-
</svg>
|
|
1199
|
-
<h2>Health Status</h2>
|
|
1200
|
-
</div>
|
|
1201
|
-
<div class="health-empty">
|
|
1202
|
-
All PRs are on track - no CI failures, conflicts, or pending responses
|
|
1203
|
-
</div>
|
|
1204
|
-
</section>
|
|
1205
|
-
`:""}
|
|
1206
|
-
|
|
1207
|
-
${l.length>0?`
|
|
1208
|
-
<section class="health-section" style="animation-delay: 0.15s;">
|
|
1209
|
-
<div class="health-header">
|
|
1210
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-merged)" stroke-width="2">
|
|
1211
|
-
${Ve.gitMerge}
|
|
1212
|
-
</svg>
|
|
1213
|
-
<h2>Recently Merged</h2>
|
|
1214
|
-
<span class="health-badge" style="background: var(--accent-merged-dim); color: var(--accent-merged);">${l.length} merged</span>
|
|
1215
|
-
</div>
|
|
1216
|
-
<div class="health-items">
|
|
1217
|
-
${l.map(g=>`
|
|
1218
|
-
<div class="health-item" style="border-left-color: var(--accent-merged);" data-status="merged" data-repo="${j(g.repo)}" data-title="${j(g.title.toLowerCase())}">
|
|
1219
|
-
<div class="health-icon" style="background: var(--accent-merged-dim); color: var(--accent-merged);">
|
|
1220
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1221
|
-
${Ve.gitMerge}
|
|
1222
|
-
</svg>
|
|
1223
|
-
</div>
|
|
1224
|
-
<div class="health-content">
|
|
1225
|
-
<div class="health-title"><a href="${j(g.url)}" target="_blank">${j(g.repo)}#${g.number}</a> - Merged</div>
|
|
1226
|
-
<div class="health-meta">${er(g.title)}${g.mergedAt?` \xB7 ${new Date(g.mergedAt).toLocaleDateString()}`:""}</div>
|
|
1227
|
-
</div>
|
|
1228
|
-
</div>
|
|
1229
|
-
`).join("")}
|
|
1230
|
-
</div>
|
|
1231
|
-
</section>
|
|
1232
|
-
`:""}
|
|
1233
|
-
|
|
1234
|
-
${(o.recentlyClosedPRs||[]).length>0?`
|
|
1235
|
-
<section class="health-section" style="animation-delay: 0.2s;">
|
|
1236
|
-
<div class="health-header">
|
|
1237
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--text-muted)" stroke-width="2">
|
|
1238
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1239
|
-
<line x1="15" y1="9" x2="9" y2="15"/>
|
|
1240
|
-
<line x1="9" y1="9" x2="15" y2="15"/>
|
|
1241
|
-
</svg>
|
|
1242
|
-
<h2>Recently Closed</h2>
|
|
1243
|
-
<span class="health-badge" style="background: rgba(110, 118, 129, 0.15); color: var(--text-muted);">${(o.recentlyClosedPRs||[]).length} closed</span>
|
|
1244
|
-
</div>
|
|
1245
|
-
<div class="health-items">
|
|
1246
|
-
${(o.recentlyClosedPRs||[]).map(g=>`
|
|
1247
|
-
<div class="health-item" style="border-left-color: var(--text-muted); opacity: 0.7;" data-status="closed" data-repo="${j(g.repo)}" data-title="${j(g.title.toLowerCase())}">
|
|
1248
|
-
<div class="health-icon" style="background: rgba(110, 118, 129, 0.15); color: var(--text-muted);">
|
|
1249
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1250
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1251
|
-
<line x1="15" y1="9" x2="9" y2="15"/>
|
|
1252
|
-
<line x1="9" y1="9" x2="15" y2="15"/>
|
|
1253
|
-
</svg>
|
|
1254
|
-
</div>
|
|
1255
|
-
<div class="health-content">
|
|
1256
|
-
<div class="health-title"><a href="${j(g.url)}" target="_blank">${j(g.repo)}#${g.number}</a> - Closed</div>
|
|
1257
|
-
<div class="health-meta">${er(g.title)}${g.closedAt?` \xB7 ${new Date(g.closedAt).toLocaleDateString()}`:""}</div>
|
|
1258
|
-
</div>
|
|
1259
|
-
</div>
|
|
1260
|
-
`).join("")}
|
|
1261
|
-
</div>
|
|
1262
|
-
</section>
|
|
1263
|
-
`:""}
|
|
1264
|
-
|
|
1265
|
-
${c.length>0?`
|
|
1266
|
-
<section class="health-section" style="animation-delay: 0.25s;">
|
|
1267
|
-
<div class="health-header">
|
|
1268
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-info)" stroke-width="2">
|
|
1269
|
-
${Ve.bell}
|
|
1270
|
-
</svg>
|
|
1271
|
-
<h2>Auto-Unshelved</h2>
|
|
1272
|
-
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${c.length} unshelved</span>
|
|
1273
|
-
</div>
|
|
1274
|
-
<div class="health-items">
|
|
1275
|
-
${tr(c,"auto-unshelved",Ve.bell,g=>`Auto-Unshelved (${g.status.replace(/_/g," ")})`,Va)}
|
|
1276
|
-
</div>
|
|
1277
|
-
</section>
|
|
1278
|
-
`:""}
|
|
1279
|
-
|
|
1280
|
-
${i.length>0?`
|
|
1281
|
-
<section class="health-section" style="animation-delay: 0.3s;">
|
|
1282
|
-
<div class="health-header">
|
|
1283
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--accent-info)" stroke-width="2">
|
|
1284
|
-
${Ve.comment}
|
|
1285
|
-
</svg>
|
|
1286
|
-
<h2>Issue Conversations</h2>
|
|
1287
|
-
<span class="health-badge" style="background: var(--accent-info-dim); color: var(--accent-info);">${i.length} repl${i.length!==1?"ies":"y"}</span>
|
|
1288
|
-
</div>
|
|
1289
|
-
<div class="health-items">
|
|
1290
|
-
${i.map(g=>`
|
|
1291
|
-
<div class="health-item changes-addressed">
|
|
1292
|
-
<div class="health-icon" style="background: var(--accent-info-dim); color: var(--accent-info);">
|
|
1293
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1294
|
-
${Ve.comment}
|
|
1295
|
-
</svg>
|
|
1296
|
-
</div>
|
|
1297
|
-
<div class="health-content">
|
|
1298
|
-
<div class="health-title"><a href="${j(g.url)}" target="_blank">${j(g.repo)}#${g.number}</a> - ${j(g.title.slice(0,50))}${g.title.length>50?"...":""}</div>
|
|
1299
|
-
<div class="health-meta">@${j(g.lastResponseAuthor)}: ${j(g.lastResponseBody.slice(0,60))}${g.lastResponseBody.length>60?"...":""}</div>
|
|
1300
|
-
</div>
|
|
1301
|
-
</div>
|
|
1302
|
-
`).join("")}
|
|
1303
|
-
</div>
|
|
1304
|
-
</section>
|
|
1305
|
-
`:""}
|
|
1306
|
-
|
|
1307
|
-
<div class="main-grid">
|
|
1308
|
-
<div class="card">
|
|
1309
|
-
<div class="card-header">
|
|
1310
|
-
<span class="card-title">PR Status Distribution</span>
|
|
1311
|
-
</div>
|
|
1312
|
-
<div class="card-body">
|
|
1313
|
-
<div class="chart-container">
|
|
1314
|
-
<canvas id="statusChart"></canvas>
|
|
1315
|
-
</div>
|
|
1316
|
-
</div>
|
|
1317
|
-
</div>
|
|
1318
|
-
|
|
1319
|
-
<div class="card">
|
|
1320
|
-
<div class="card-header">
|
|
1321
|
-
<span class="card-title">Repository Breakdown</span>
|
|
1322
|
-
</div>
|
|
1323
|
-
<div class="card-body">
|
|
1324
|
-
<div class="chart-container">
|
|
1325
|
-
<canvas id="reposChart"></canvas>
|
|
1326
|
-
</div>
|
|
1327
|
-
</div>
|
|
1328
|
-
</div>
|
|
1329
|
-
</div>
|
|
1330
|
-
|
|
1331
|
-
<div class="card" style="margin-bottom: 1.25rem;">
|
|
1332
|
-
<div class="card-header">
|
|
1333
|
-
<span class="card-title">Contribution Timeline</span>
|
|
1334
|
-
</div>
|
|
1335
|
-
<div class="card-body">
|
|
1336
|
-
<div class="chart-container" style="height: 250px;">
|
|
1337
|
-
<canvas id="monthlyChart"></canvas>
|
|
1338
|
-
</div>
|
|
1339
|
-
</div>
|
|
1340
|
-
</div>
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
${p.length>0?`
|
|
1344
|
-
<section class="pr-list-section">
|
|
1345
|
-
<div class="pr-list-header">
|
|
1346
|
-
<h2 class="pr-list-title">Active Pull Requests</h2>
|
|
1347
|
-
<span class="pr-count">${p.length} open</span>
|
|
1348
|
-
</div>
|
|
1349
|
-
<div class="pr-list">
|
|
1350
|
-
${p.map(g=>{let v=g.status==="needs_addressing",k=g.stalenessTier!=="active",h=v?"has-issues":k?"stale":"",C=g.status==="needs_addressing"?"needs-addressing":"waiting-on-maintainer";return`
|
|
1351
|
-
<div class="pr-item ${h}" data-status="${C}" data-repo="${j(g.repo)}" data-title="${j(g.title.toLowerCase())}">
|
|
1352
|
-
<div class="pr-status-indicator">
|
|
1353
|
-
${v?`
|
|
1354
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1355
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1356
|
-
<line x1="12" y1="8" x2="12" y2="12"/>
|
|
1357
|
-
<line x1="12" y1="16" x2="12.01" y2="16"/>
|
|
1358
|
-
</svg>
|
|
1359
|
-
`:`
|
|
1360
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1361
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1362
|
-
<line x1="12" y1="16" x2="12" y2="12"/>
|
|
1363
|
-
<line x1="12" y1="8" x2="12.01" y2="8"/>
|
|
1364
|
-
</svg>
|
|
1365
|
-
`}
|
|
1366
|
-
</div>
|
|
1367
|
-
<div class="pr-content">
|
|
1368
|
-
<div class="pr-title-row">
|
|
1369
|
-
<a href="${j(g.url)}" target="_blank" class="pr-title">${j(g.title)}</a>
|
|
1370
|
-
<span class="pr-repo">${j(g.repo)}#${g.number}</span>
|
|
1371
|
-
</div>
|
|
1372
|
-
<div class="pr-badges">
|
|
1373
|
-
<span class="badge ${v?"badge-ci-failing":"badge-passing"}">${j(g.displayLabel)}</span>
|
|
1374
|
-
${k?`<span class="badge badge-stale">${g.daysSinceActivity}d inactive</span>`:""}
|
|
1375
|
-
</div>
|
|
1376
|
-
</div>
|
|
1377
|
-
<div class="pr-activity">
|
|
1378
|
-
${g.daysSinceActivity===0?"Today":g.daysSinceActivity===1?"Yesterday":g.daysSinceActivity+"d ago"}
|
|
1379
|
-
</div>
|
|
1380
|
-
</div>`}).join("")}
|
|
1381
|
-
</div>
|
|
1382
|
-
</section>
|
|
1383
|
-
`:`
|
|
1384
|
-
<section class="pr-list-section">
|
|
1385
|
-
<div class="pr-list-header">
|
|
1386
|
-
<h2 class="pr-list-title">Active Pull Requests</h2>
|
|
1387
|
-
<span class="pr-count">0 open</span>
|
|
1388
|
-
</div>
|
|
1389
|
-
<div class="empty-state">
|
|
1390
|
-
<div class="empty-state-icon">
|
|
1391
|
-
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
|
|
1392
|
-
<circle cx="12" cy="12" r="10"/>
|
|
1393
|
-
<path d="M8 12h8"/>
|
|
1394
|
-
</svg>
|
|
1395
|
-
</div>
|
|
1396
|
-
<p>No active pull requests</p>
|
|
1397
|
-
</div>
|
|
1398
|
-
</section>
|
|
1399
|
-
`}
|
|
1400
|
-
|
|
1401
|
-
${a.length>0?`
|
|
1402
|
-
<section class="pr-list-section" style="margin-top: 1.25rem; opacity: 0.7;">
|
|
1403
|
-
<div class="pr-list-header">
|
|
1404
|
-
<h2 class="pr-list-title">Shelved Pull Requests</h2>
|
|
1405
|
-
<span class="pr-count" style="background: rgba(110, 118, 129, 0.15); color: var(--text-muted);">${a.length} shelved</span>
|
|
1406
|
-
</div>
|
|
1407
|
-
<div class="pr-list">
|
|
1408
|
-
${a.map(g=>`
|
|
1409
|
-
<div class="pr-item" data-status="shelved" data-repo="${j(g.repo)}" data-title="${j(g.title.toLowerCase())}">
|
|
1410
|
-
<div class="pr-status-indicator" style="background: rgba(110, 118, 129, 0.1); color: var(--text-muted);">
|
|
1411
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1412
|
-
${Ve.box}
|
|
1413
|
-
</svg>
|
|
1414
|
-
</div>
|
|
1415
|
-
<div class="pr-content">
|
|
1416
|
-
<div class="pr-title-row">
|
|
1417
|
-
<a href="${j(g.url)}" target="_blank" class="pr-title">${j(g.title)}</a>
|
|
1418
|
-
<span class="pr-repo">${j(g.repo)}#${g.number}</span>
|
|
1419
|
-
</div>
|
|
1420
|
-
<div class="pr-badges">
|
|
1421
|
-
<span class="badge badge-days">${g.daysSinceActivity}d inactive</span>
|
|
1422
|
-
</div>
|
|
1423
|
-
</div>
|
|
1424
|
-
<div class="pr-activity">
|
|
1425
|
-
${g.daysSinceActivity===0?"Today":g.daysSinceActivity===1?"Yesterday":g.daysSinceActivity+"d ago"}
|
|
1426
|
-
</div>
|
|
1427
|
-
</div>`).join("")}
|
|
1428
|
-
</div>
|
|
1429
|
-
</section>
|
|
1430
|
-
`:""}
|
|
1431
|
-
|
|
1432
|
-
<footer class="footer">
|
|
1433
|
-
<p>OSS Autopilot // Mission Control</p>
|
|
1434
|
-
<p style="margin-top: 0.25rem;">Dashboard generated: ${o.generatedAt?new Date(o.generatedAt).toISOString():"Unknown"}</p>
|
|
1435
|
-
</footer>
|
|
1436
|
-
</div>
|
|
1437
|
-
|
|
1438
|
-
<script>
|
|
1439
|
-
${Wa(r,e,t,s,o,n)}
|
|
1440
|
-
</script>
|
|
1441
|
-
</body>
|
|
1442
|
-
</html>`}var Qa=A(()=>{"use strict";Zs();Ba();za();Ja();Zs();ls()});function ed(r){return new Promise(e=>setTimeout(e,r))}async function Xa(r){if(!rr())return null;let t=await Do();if(t){let c=gs(),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 u=!1;try{process.kill(c.pid,"SIGTERM"),u=!0}catch(p){p.code==="ESRCH"?u=!0:console.error(`[STARTUP] Could not kill outdated dashboard (PID ${c.pid}): ${p.message}`)}if(u)Mt();else return{url:t.url,port:t.port,alreadyRunning:!0}}else return{url:t.url,port:t.port,alreadyRunning:!0}}let s=r?.port??Yu,o=process.argv[1],n=(0,Ya.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<Zu;c++){if(await ed(Xu),i||a)return null;let l=gs();if(l&&await sr(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 Ya,Yu,Xu,Zu,Za=A(()=>{"use strict";Ya=require("child_process");Io();or();ee();Yu=3e3,Xu=200,Zu=25});var oc={};re(oc,{countIssueListItems:()=>sc,detectIssueList:()=>rc,openInBrowser:()=>ms,parseIssueListPathFromConfig:()=>tc,runStartup:()=>td});function tc(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 sc(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 rc(){let r="",e="auto-detected",t=".claude/oss-autopilot/config.md";if(kt.existsSync(t))try{let s=kt.readFileSync(t,"utf-8"),o=tc(s);o&&kt.existsSync(o)&&(r=o,e="configured")}catch(s){console.error("[STARTUP] Failed to read config:",O(s))}if(!r){let s=["open-source/potential-issue-list.md","oss/issue-list.md","issues.md"];for(let o of s)if(kt.existsSync(o)){r=o,e="auto-detected";break}}if(r)try{let s=kt.readFileSync(r,"utf-8"),{availableCount:o,completedCount:n}=sc(s);return{path:r,source:e,availableCount:o,completedCount:n}}catch(s){return console.error(`[STARTUP] Failed to read issue list at ${r}:`,O(s)),{path:r,source:e,availableCount:0,completedCount:0}}}function ms(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,ec.execFile)(e,t,s=>{s&&console.error(`[STARTUP] Failed to open dashboard in browser: ${s.message}`)})}async function td(){let r=Be(),e=I(),t=!1;if(!e.isSetupComplete()){let u=await Es();if(u)try{e.initializeWithDefaults(u),t=!0}catch(p){return console.error(`[STARTUP] Auto-detected username "${u}" but failed to save config:`,O(p)),{version:r,setupComplete:!1}}else return{version:r,setupComplete:!1}}let s=et();if(!s)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 o=await Ks(s),n,i,a=!1;function c(){try{return i=Uo(),ms(i),!0}catch(u){return console.error("[STARTUP] Static HTML dashboard fallback also failed:",O(u)),!1}}if(o.digest.summary.totalActivePRs>0)try{let u=await Xa();u?(n=u.url,ms(u.url),a=!0):(console.error("[STARTUP] Dashboard SPA assets not found, falling back to static HTML dashboard"),a=c())}catch(u){console.error("[STARTUP] SPA dashboard launch failed:",O(u)),a=c()}a&&(o.briefSummary+=" | Dashboard opened in browser");let l=rc();return{version:r,setupComplete:!0,autoDetected:t,daily:o,dashboardUrl:n,dashboardPath:i,issueList:l}}var kt,ec,Fo=A(()=>{"use strict";kt=Q(require("fs"),1),ec=require("child_process");ee();ie();us();Za();or()});var lc={};re(lc,{findRunningDashboardServer:()=>Do,getDashboardPidPath:()=>cr,isDashboardServerRunning:()=>sr,readDashboardServerInfo:()=>gs,removeDashboardServerInfo:()=>Mt,startDashboardServer:()=>ad,writeDashboardServerInfo:()=>ac});function nd(r,e){let t=e.config.statusOverrides;if(!t||Object.keys(t).length===0)return r;let s=I(),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){y(ce,`Failed to persist auto-cleared overrides \u2014 they may reappear on restart: ${O(a)}`)}return i}function cr(){return Me.join($e(),"dashboard-server.pid")}function ac(r){nt.writeFileSync(cr(),JSON.stringify(r),{mode:384})}function gs(){try{let r=nt.readFileSync(cr(),"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"?(y(ce,"PID file has invalid structure, ignoring"),null):e}catch(r){return r.code!=="ENOENT"&&y(ce,`Failed to read PID file: ${r.message}`),null}}function Mt(){try{nt.unlinkSync(cr())}catch(r){r.code!=="ENOENT"&&y(ce,`Failed to remove PID file: ${r.message}`)}}function sr(r){return new Promise(e=>{let t=ar.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 Do(){let r=gs();if(!r)return null;try{process.kill(r.pid,0)}catch(e){let t=e.code;return t!=="ESRCH"&&t!=="EPERM"&&y(ce,`Unexpected error checking PID ${r.pid}: ${e.message}`),Mt(),null}return await sr(r.port)?{port:r.port,url:`http://localhost:${r.port}`}:(Mt(),null)}function nr(r,e,t){let s=Sa(r,e),o=Ca(s),{monthlyMerged:n,monthlyOpened:i,monthlyClosed:a}=Ws(e),c=cs(r,e),l=t.filter(u=>u.status==="new_response");return{stats:c,prsByRepo:s,topRepos:o.map(([u,p])=>({repo:u,...p})),monthlyMerged:n,monthlyOpened:i,monthlyClosed:a,activePRs:nd(r.openPRs||[],e),shelvedPRUrls:e.config.shelvedPRUrls||[],recentlyMergedPRs:r.recentlyMergedPRs||[],recentlyClosedPRs:r.recentlyClosedPRs||[],autoUnshelvedPRs:r.autoUnshelvedPRs||[],commentedIssues:t,issueResponses:l}}function id(r,e=sd){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 cc(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 ic(r,e){let t=r.headers.origin;return t?[`http://localhost:${e}`,`http://127.0.0.1:${e}`].includes(t):!0}function ir(r,e,t){cc(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){ir(r,e,{error:t})}async function ad(r){let{port:e,assetsDir:t,token:s,open:o}=r,n=I(),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=nr(a,n.getState(),c)}catch(C){throw new Error(`Failed to build dashboard data: ${O(C)}. State data may be corrupted \u2014 try running: daily --json`,{cause:C})}let u=ar.createServer(async(C,S)=>{let _=C.method||"GET",G=C.url||"/";try{if(G==="/api/data"&&_==="GET"){ir(S,200,l);return}if(G==="/api/action"&&_==="POST"){if(!ic(C,v)){ae(S,403,"Invalid origin");return}await p(C,S);return}if(G==="/api/refresh"&&_==="POST"){if(!ic(C,v)){ae(S,403,"Invalid origin");return}await m(C,S);return}if(_==="GET"){R(G,S);return}ae(S,405,"Method not allowed")}catch(F){y(ce,`Unhandled request error: ${_} ${G} ${O(F)}`),S.headersSent||ae(S,500,"Internal server error")}});u.requestTimeout=rd;async function p(C,S){let _;try{let G=await id(C);_=JSON.parse(G)}catch(G){let F=G instanceof Error&&G.message==="Body too large";ae(S,F?413:400,F?"Request body too large":"Invalid JSON body");return}if(!_.action||!nc.has(_.action)){ae(S,400,`Invalid action. Must be one of: ${[...nc].join(", ")}`);return}if(!_.url||typeof _.url!="string"){ae(S,400,'Missing or invalid "url" field');return}try{Z(_.url),oe(_.url,ge,"PR")}catch(G){G instanceof Y?ae(S,400,G.message):(y(ce,`Unexpected error during URL validation: ${O(G)}`),ae(S,400,"Invalid URL"));return}if(_.action==="override_status"&&(!_.status||_.status!=="needs_addressing"&&_.status!=="waiting_on_maintainer")){ae(S,400,'override_status requires a valid "status" field (needs_addressing or waiting_on_maintainer)');return}try{switch(_.action){case"shelve":n.shelvePR(_.url);break;case"unshelve":n.unshelvePR(_.url);break;case"override_status":{let G=_.status,H=(a?.openPRs||[]).find(te=>te.url===_.url)?.updatedAt||new Date().toISOString();n.setStatusOverride(_.url,G,H);break}}n.save()}catch(G){y(ce,`Action failed: ${_.action} ${_.url} ${O(G)}`),ae(S,500,"Action failed");return}l=nr(a,n.getState(),c),ir(S,200,l)}async function m(C,S){let _=s||et();if(!_){ae(S,401,"No GitHub token available. Cannot refresh data.");return}try{y(ce,"Refreshing dashboard data from GitHub...");let G=await Po(_);a=G.digest,c=G.commentedIssues,l=nr(a,n.getState(),c),ir(S,200,l)}catch(G){y(ce,`Dashboard refresh failed: ${O(G)}`),ae(S,500,"Refresh failed")}}function R(C,S){let _;try{_=decodeURIComponent(C.split("?")[0])}catch{y(ce,`Malformed URL received: ${C}`),ae(S,400,"Malformed URL");return}if(_.includes("..")){ae(S,403,"Forbidden");return}let G=_==="/"?"index.html":_.replace(/^\/+/,""),F=Me.join(i,G);if(!F.startsWith(i+Me.sep)&&F!==i){ae(S,403,"Forbidden");return}try{nt.statSync(F).isDirectory()&&(F=Me.join(i,"index.html"))}catch(ne){if(ne.code==="ENOENT")F=Me.join(i,"index.html");else{y(ce,`Failed to stat file: ${F}`),ae(S,500,"Internal server error");return}}let H=Me.extname(F).toLowerCase(),te=od[H]||"application/octet-stream";try{let ne=nt.readFileSync(F);cc(S),S.writeHead(200,{"Content-Type":te,"Content-Length":ne.length,"Cache-Control":"public, max-age=3600"}),S.end(ne)}catch(ne){ne.code==="ENOENT"?ae(S,404,"Not found"):(y(ce,`Failed to serve static file: ${F}`),ae(S,500,"Failed to read file"))}}let g=10,v=e;for(let C=0;C<g;C++)try{await new Promise((S,_)=>{u.once("error",_),u.listen(v,"127.0.0.1",()=>S())});break}catch(S){let _=S;if(_.code==="EADDRINUSE"&&C<g-1){y(ce,`Port ${v} is in use, trying ${v+1}...`),v++;continue}throw new Error(`Failed to start server: ${_.message}`,{cause:S})}ac({pid:process.pid,port:v,startedAt:new Date().toISOString(),version:Be()});let k=`http://localhost:${v}`;y(ce,`Dashboard server running at ${k}`),s&&Po(s).then(C=>{a=C.digest,c=C.commentedIssues,l=nr(a,n.getState(),c),y(ce,"Background data refresh complete")}).catch(C=>{y(ce,`Background data refresh failed (serving cached data): ${O(C)}`)}),o&&ms(k);let h=()=>{y(ce,"Shutting down dashboard server..."),Mt(),u.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),3e3).unref()};process.on("SIGINT",h),process.on("SIGTERM",h)}var ar,nt,Me,nc,ce,sd,rd,od,Io=A(()=>{"use strict";ar=Q(require("http"),1),nt=Q(require("fs"),1),Me=Q(require("path"),1);ee();ie();de();ke();ls();Fo();nc=new Set(["shelve","unshelve","override_status"]),ce="dashboard-server",sd=10240,rd=3e4,od={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".json":"application/json",".png":"image/png",".ico":"image/x-icon"}});var uc={};re(uc,{resolveAssetsDir:()=>rr,serveDashboard:()=>cd,writeDashboardFromState:()=>Uo});function Uo(){let e=I().getState(),t=e.lastDigest;if(!t)throw new Error("No digest data available. Run daily check first.");let{monthlyMerged:s,monthlyClosed:o,monthlyOpened:n}=Ws(e),i=cs(t,e),a=Ka(i,s,o,n,t,e),c=_s();return Lt.writeFileSync(c,a,{mode:420}),c}function rr(){let r=Le.resolve(__dirname,"../../dashboard/dist");if(Lt.existsSync(Le.join(r,"index.html")))return r;let e=Le.resolve(Le.dirname(process.argv[1]),"../../dashboard/dist");if(Lt.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(Lt.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 cd(r){let e=rr();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=et(),{startDashboardServer:s}=await Promise.resolve().then(()=>(Io(),lc));await s({port:r.port,assetsDir:e,token:t,open:r.open})}var Lt,Le,or=A(()=>{"use strict";Lt=Q(require("fs"),1),Le=Q(require("path"),1);ee();ls();Qa()});var gc={};re(gc,{parseIssueList:()=>pc,runParseList:()=>pd});function ld(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 ud(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 dd(r){return!!(/~~.+~~/.test(r)||/\[[xX]\]/.test(r)||/\bdone\b/i.test(r))}function pc(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=ld(n);if(!a)continue;let c=ud(n),l={repo:a.repo,number:a.number,title:c||`#${a.number}`,tier:o,url:a.url};dd(n)?s.push(l):t.push(l)}return{available:t,completed:s,availableCount:t.length,completedCount:s.length}}async function pd(r){let e=dc.resolve(r.filePath);if(!lr.existsSync(e))throw new Error(`File not found: ${e}`);let t;try{t=lr.readFileSync(e,"utf-8")}catch(s){let o=O(s);throw new Error(`Failed to read file: ${o}`,{cause:s})}return pc(t)}var lr,dc,mc=A(()=>{"use strict";lr=Q(require("fs"),1),dc=Q(require("path"),1);ie()});var hc={};re(hc,{runCheckIntegration:()=>bd});function hd(r){let e=Ae.extname(r),t=Ae.basename(r,e);return t==="index"?Ae.basename(Ae.dirname(r)):t}function fd(r,e){let t=Ae.dirname(r),s=[];for(let n of[".ts",".tsx",".js",".jsx"]){let i=Ae.join(t,`index${n}`);e.includes(i)&&s.push(i)}let o=Ae.dirname(t);for(let n of[".ts",".tsx",".js",".jsx"]){let i=Ae.join(o,`index${n}`);e.includes(i)&&s.push(i)}return[...new Set(s)]}async function bd(r){let e=r.base,t;try{let a=(0,ur.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=O(a);throw new Error(`Failed to run git diff: ${c}`,{cause:a})}let s=t.filter(a=>{let c=Ae.extname(a);return gd.has(c)?!md.some(l=>l.test(a)):!1});if(s.length===0)return{newFiles:[],unreferencedCount:0};let o;try{o=(0,ur.execFileSync)("git",["ls-files"],{encoding:"utf-8",timeout:1e4}).trim().split(`
|
|
1446
|
-
`).filter(Boolean)}catch(a){T("check-integration","git ls-files failed, reference checking will be skipped",a),o=[]}let n=[];for(let a of s){let c=hd(a),l=a.replace(/\.[^.]+$/,""),u=[],p=[c];l.includes("/")&&p.push(l);for(let g of p)try{let v=(0,ur.execFileSync)("git",["grep","-l","--",g],{encoding:"utf-8",timeout:1e4}).trim();if(v){let k=v.split(`
|
|
1447
|
-
`).filter(h=>h!==a);u.push(...k)}}catch(v){let k=v&&typeof v=="object"&&"status"in v?v.status:void 0;if(k!==void 0&&k!==1){let h=O(v);T("check-integration",`git grep failed for "${g}": ${h}`)}}u=[...new Set(u)];let m=u.length>0,R={path:a,referencedBy:u,isIntegrated:m};m||(R.suggestedEntryPoints=fd(a,o)),n.push(R)}let i=n.filter(a=>!a.isIntegrated).length;return{newFiles:n,unreferencedCount:i}}var Ae,ur,gd,md,fc=A(()=>{"use strict";Ae=Q(require("path"),1),ur=require("child_process");ee();ie();gd=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".rb",".go",".rs",".java",".kt",".vue",".svelte"]),md=[/^\./,/\.(test|spec|e2e)\.[^.]+$/,/\.(config|rc)\.[^.]+$/,/__tests__\//,/\.d\.ts$/,/\.md$/,/\.json$/,/\.ya?ml$/]});var yc={};re(yc,{runLocalRepos:()=>wd,scanForRepos:()=>bc});function vd(r){try{let e=(0,dr.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 T("local-repos",`Failed to get GitHub remote for ${r}`,e),null}}function _d(r){try{return(0,dr.execFileSync)("git",["-C",r,"branch","--show-current"],{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim()||null}catch(e){return T("local-repos",`Failed to get current branch for ${r}`,e),null}}function bc(r){let e={};for(let t of r){if(!Mo.existsSync(t))continue;let s;try{let o=(0,dr.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){T("local-repos",`find failed for scan path ${t}`,o);continue}for(let o of s){let n=je.dirname(o),i=vd(n);if(!i)continue;let a=_d(n);e[i]={path:n,exists:!0,currentBranch:a}}}return e}async function wd(r){let e=I(),t=e.getState(),s=r.paths?.map(i=>je.resolve(i))??t.config.localRepoScanPaths??yd.filter(i=>Mo.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=bc(s),n=new Date().toISOString();try{e.setLocalRepoCache({repos:o,scanPaths:s,cachedAt:n}),e.save()}catch(i){let a=O(i);console.error(`Warning: Failed to cache scan results: ${a}`)}return{repos:o,scanPaths:s,cachedAt:n,fromCache:!1}}var Mo,je,At,dr,yd,vc=A(()=>{"use strict";Mo=Q(require("fs"),1),je=Q(require("path"),1),At=Q(require("os"),1),dr=require("child_process");ee();ie();yd=[je.join(At.homedir(),"Documents","oss"),je.join(At.homedir(),"dev"),je.join(At.homedir(),"projects"),je.join(At.homedir(),"src"),je.join(At.homedir(),"code"),je.join(At.homedir(),"repos")]});var Lo={};re(Lo,{PR_URL_PATTERN:()=>ge,runShelve:()=>Rd,runUnshelve:()=>Ed});async function Rd(r){Z(r.prUrl),oe(r.prUrl,ge,"PR");let e=I(),t=e.shelvePR(r.prUrl);return t&&e.save(),{shelved:t,url:r.prUrl}}async function Ed(r){Z(r.prUrl),oe(r.prUrl,ge,"PR");let e=I(),t=e.unshelvePR(r.prUrl);return t&&e.save(),{unshelved:t,url:r.prUrl}}var jo=A(()=>{"use strict";ee();ke()});var No={};re(No,{runDismiss:()=>Td,runUndismiss:()=>Sd});async function Td(r){Z(r.url),oe(r.url,ds,"issue or PR");let e=I(),t=e.dismissIssue(r.url,new Date().toISOString());return t&&e.save(),{dismissed:t,url:r.url}}async function Sd(r){Z(r.url),oe(r.url,ds,"issue or PR");let e=I(),t=e.undismissIssue(r.url);return t&&e.save(),{undismissed:t,url:r.url}}var Ho=A(()=>{"use strict";ee();ke()});var qo={};re(qo,{runSnooze:()=>Pd,runUnsnooze:()=>kd});async function Pd(r){Z(r.prUrl),oe(r.prUrl,ge,"PR"),ps(r.reason);let e=r.days??Cd;if(!Number.isFinite(e)||e<=0)throw new Error("Snooze duration must be a positive number of days.");let t=I(),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 kd(r){Z(r.prUrl),oe(r.prUrl,ge,"PR");let e=I(),t=e.unsnoozePR(r.prUrl);return t&&e.save(),{unsnoozed:t,url:r.prUrl}}var Cd,Bo=A(()=>{"use strict";ee();ke();Cd=7});var Vo={};re(Vo,{runClearOverride:()=>Od,runOverride:()=>Ad});async function Ad(r){if(Z(r.prUrl),oe(r.prUrl,ge,"PR"),!_c.includes(r.status))throw new Error(`Invalid status "${r.status}". Must be one of: ${_c.join(", ")}`);let e=r.status,t=I(),s=new Date().toISOString();return t.setStatusOverride(r.prUrl,e,s),t.save(),{url:r.prUrl,status:e}}async function Od(r){Z(r.prUrl),oe(r.prUrl,ge,"PR");let e=I(),t=e.clearStatusOverride(r.prUrl);return t&&e.save(),{url:r.prUrl,cleared:t}}var _c,zo=A(()=>{"use strict";ee();ke();_c=["needs_addressing","waiting_on_maintainer"]});var wc={};re(wc,{runPRTemplate:()=>Gd});async function Gd(r){let{owner:e,repo:t}=Ot(r.repo),s=pe(),o=fe(s);return Ro(o,e,t)}var Rc=A(()=>{"use strict";xt();Re();Eo()});var Ec={};re(Ec,{formatStatsBadge:()=>Id,formatStatsMarkdown:()=>xd,runStats:()=>$d});async function $d(){let e=I().getState(),t=e.lastDigest?.summary?.totalActivePRs??0,s=_o({repoScores:e.repoScores??{},activePRCount:t});return{...s,mergeRateFormatted:`${(s.mergeRate*100).toFixed(1)}%`,username:e.config.githubUsername}}function xd(r){let e=[`# OSS Contribution Stats for @${r.username}`,"","| Metric | Value |","|--------|-------|",`| Merged PRs | ${r.totalMerged} |`,`| Merge Rate | ${r.mergeRateFormatted} |`,`| Active PRs | ${r.activePRs} |`,`| Repos Contributed | ${r.reposContributed} |`,""];if(r.topRepos.length>0){e.push("## Top Repos","","| Repo | Merged PRs |","|------|-----------|");for(let t of r.topRepos)e.push(`| ${t.repo} | ${t.mergedCount} |`);e.push("")}return e.push("---","*Generated by [OSS Autopilot](https://github.com/costajohnt/oss-autopilot)*"),e.join(`
|
|
1449
|
-
`)}function Dd(r){return r.totalMerged===0?"blue":r.mergeRate>=.8?"brightgreen":r.mergeRate>=.6?"green":r.mergeRate>=.4?"yellow":"orange"}function Id(r){return{schemaVersion:1,label:"OSS Contributions",message:r.totalMerged>0?`${r.mergeRateFormatted} merge rate | ${r.totalMerged} merged`:"Getting Started",color:Dd(r)}}var Tc=A(()=>{"use strict";ee();wo()});var vn=Q(yn(),1),{program:zd,createCommand:Wd,createArgument:Jd,createOption:Kd,CommanderError:Qd,InvalidArgumentError:Yd,InvalidOptionArgumentError:Xd,Command:_n,Argument:Zd,Option:ep,Help:tp}=vn.default;ee();ie();To();function J(r,e){let t=O(r);e?Ta(t):console.error(`Error: ${t}`),process.exit(1)}function Sc(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 Wo=[{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(()=>(us(),ko)),s=await t();z(s)}else{let{runDailyForDisplay:t,printDigest:s}=await Promise.resolve().then(()=>(us(),ko)),o=await t();s(o.digest,o.capacity,o.commentedIssues)}}catch(t){J(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(()=>(Aa(),ka)),s=await t({offline:e.offline});e.json?z(s):(console.log(`
|
|
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 It,fl,da,ga=P(()=>{"use strict";Re();ue();It=new Set(["needs_addressing"]),fl=new Set(["needs_response","needs_changes","failing_ci","merge_conflict"]),da=new Set(["dormant","approaching_dormant"])});function ho(r){let{repoScores:e,activePRCount:t}=r,s=0,o=0,n=[];for(let c of Object.values(e))s+=c.mergedPRCount,o+=c.closedWithoutMergeCount,c.mergedPRCount>0&&n.push({repo:c.repo,mergedCount:c.mergedPRCount});let i=s+o,a=i>0?s/i:0;return n.sort((c,u)=>u.mergedCount-c.mergedCount),{totalMerged:s,totalClosed:o,mergeRate:a,activePRs:t,reposContributed:n.length,topRepos:n.slice(0,10)}}var fo=P(()=>{"use strict"});async function bo(r,e,t){for(let s of bl)try{T(vt,`Checking ${e}/${t} for template at ${s}`);let{data:o}=await r.repos.getContent({owner:e,repo:t,path:s});if(Array.isArray(o)){T(vt,`${s} is a directory (multiple templates?), skipping`);continue}if(o.type!=="file"){T(vt,`${s} is type "${o.type}", skipping`);continue}if(!o.content){T(vt,`${s} has no content, skipping`);continue}let n=Buffer.from(o.content,"base64").toString("utf-8");return T(vt,`Found PR template at ${s} (${n.length} chars)`),{template:n,source:s}}catch(o){if(we(o)===404)continue;if(be(o))throw o;let n=S(o);return b(vt,`Error checking ${e}/${t}/${s}: ${n}`),{template:null,source:null,error:n}}return T(vt,`No PR template found for ${e}/${t}`),{template:null,source:null}}var vt,bl,yo=P(()=>{"use strict";ue();ae();vt="pr-template",bl=[".github/PULL_REQUEST_TEMPLATE.md",".github/pull_request_template.md","docs/pull_request_template.md","pull_request_template.md"]});var ee=P(()=>{"use strict";Vt();Zi();ua();pa();Fs();Gt();Re();ae();ue();$t();ga();fo();yo();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 yl(r){return{success:!0,data:r,timestamp:new Date().toISOString()}}function _l(r){return{success:!1,error:r,timestamp:new Date().toISOString()}}function J(r){console.log(JSON.stringify(yl(r),null,2))}function ya(r){console.log(JSON.stringify(_l(r),null,2))}var _o=P(()=>{"use strict"});function _a(r,e){let t=r.summary||{totalActivePRs:0,totalMergedAllTime:0,mergeRate:0,totalNeedingAttention:0},s=e.config.minStars??50;return{activePRs:t.totalActivePRs,shelvedPRs:(r.shelvedPRs||[]).length,mergedPRs:t.totalMergedAllTime,closedPRs:Object.values(e.repoScores||{}).reduce((o,n)=>o+(ut(n.stargazersCount,s)?0:n.closedWithoutMergeCount||0),0),mergeRate:`${(t.mergeRate??0).toFixed(1)}%`}}function wo(r,e){let t={...r};for(let[s,o]of Object.entries(e))t[s]=o;return t}function Eo(r,e,t,s,o){let n=x(),i=n.getState();try{Object.keys(e).length>0&&n.setMonthlyMergedCounts(wo(i.monthlyMergedCounts||{},e))}catch(a){b(Pe,`Failed to store monthly merged counts: ${S(a)}`)}try{Object.keys(t).length>0&&n.setMonthlyClosedCounts(wo(i.monthlyClosedCounts||{},t))}catch(a){b(Pe,`Failed to store monthly closed counts: ${S(a)}`)}try{let a={...s};for(let[c,u]of Object.entries(o))a[c]=(a[c]||0)+u;for(let c of r)if(c.createdAt){let u=c.createdAt.slice(0,7);a[u]=(a[u]||0)+1}Object.keys(a).length>0&&n.setMonthlyOpenedCounts(wo(i.monthlyOpenedCounts||{},a))}catch(a){b(Pe,`Failed to store monthly opened counts: ${S(a)}`)}}async function Ro(r){let e=x(),t=new Et(r),s=new Tt(r),o=qs(e.getState()),[{prs:n,failures:i},a,c,u,p,d]=await Promise.all([t.fetchUserOpenPRs(),t.fetchRecentlyClosedPRs().catch(O=>{if(be(O))throw O;return b(Pe,`Failed to fetch recently closed PRs: ${S(O)}`),[]}),t.fetchRecentlyMergedPRs().catch(O=>{if(be(O))throw O;return b(Pe,`Failed to fetch recently merged PRs: ${S(O)}`),[]}),t.fetchUserMergedPRCounts(o).catch(O=>{if(be(O))throw O;return b(Pe,`Failed to fetch merged PR counts: ${S(O)}`),wt()}),t.fetchUserClosedPRCounts(o).catch(O=>{if(be(O))throw O;return b(Pe,`Failed to fetch closed PR counts: ${S(O)}`),wt()}),s.fetchCommentedIssues().catch(O=>{if(be(O))throw O;let U=S(O);return U.includes("No GitHub username configured")?b(Pe,`Issue conversation tracking requires setup: ${U}`):b(Pe,`Issue conversation fetch failed: ${U}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${U}`}]}})]),m=d.issues;d.failures.length>0&&b(Pe,`${d.failures.length} issue conversation check(s) failed`),i.length>0&&b(Pe,`${i.length} PR fetch(es) failed`);let{monthlyCounts:R,monthlyOpenedCounts:w}=u,{monthlyCounts:E,monthlyOpenedCounts:C}=p;Eo(n,R,E,w,C);let g=t.generateDigest(n,a,c),G=new Set(e.getState().config.shelvedPRUrls||[]),I=n.filter(O=>G.has(O.url)||O.stalenessTier==="dormant"&&O.status!=="needs_addressing");g.shelvedPRs=I.map(et),g.autoUnshelvedPRs=[],g.summary.totalActivePRs=n.length-I.length,e.setLastDigest(g);try{e.save()}catch(O){b(Pe,`Failed to save dashboard digest to state: ${S(O)}`)}return b(Pe,`Refreshed: ${n.length} PRs fetched`),{digest:g,commentedIssues:m}}function wa(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||{}))ut(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 Ea(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 Ra(r){return{monthlyMerged:r.monthlyMergedCounts||{},monthlyClosed:r.monthlyClosedCounts||{},monthlyOpened:r.monthlyOpenedCounts||{}}}var Pe,To=P(()=>{"use strict";ee();ae();ue();Us();Pt();as();Pe="dashboard-data"});var vo={};re(vo,{CRITICAL_STATUSES:()=>It,assessCapacity:()=>ss,buildStarFilter:()=>qs,collectActionableIssues:()=>rs,computeActionMenu:()=>os,computeRepoSignals:()=>ts,executeDailyCheck:()=>Bs,formatBriefSummary:()=>ns,formatSummary:()=>is,groupPRsByRepo:()=>es,printDigest:()=>go,runDaily:()=>Sl,runDailyForDisplay:()=>Cl,toShelvedPRRef:()=>et});function qs(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 wl(r,e){let{prs:t,failures:s}=await r.fetchUserOpenPRs();s.length>0&&b(K,`${s.length} PR fetch(es) failed`);let o=x().getState(),n=qs(o),i=new Tt(e),[a,c,u,p,d]=await Promise.all([r.fetchUserMergedPRCounts(n).catch(I=>{if(be(I))throw I;return b(K,`Failed to fetch merged PR counts: ${S(I)}`),wt()}),r.fetchUserClosedPRCounts(n).catch(I=>{if(be(I))throw I;return b(K,`Failed to fetch closed PR counts: ${S(I)}`),wt()}),r.fetchRecentlyClosedPRs().catch(I=>{if(be(I))throw I;return b(K,`Failed to fetch recently closed PRs: ${S(I)}`),[]}),r.fetchRecentlyMergedPRs().catch(I=>{if(be(I))throw I;return b(K,`Failed to fetch recently merged PRs: ${S(I)}`),[]}),i.fetchCommentedIssues().catch(I=>{if(be(I))throw I;let O=S(I);return O.includes("No GitHub username configured")?b(K,`Issue conversation tracking requires setup: ${O}`):b(K,`Issue conversation fetch failed: ${O}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${O}`}]}})]),m=d.issues;d.failures.length>0&&b(K,`${d.failures.length} issue conversation check(s) failed`);let{repos:R,monthlyCounts:w,monthlyOpenedCounts:E}=a,{repos:C,monthlyCounts:g,monthlyOpenedCounts:G}=c;return{prs:t,failures:s,mergedCounts:R,closedCounts:C,monthlyCounts:w,monthlyClosedCounts:g,openedFromMerged:E,openedFromClosed:G,recentlyClosedPRs:u,recentlyMergedPRs:p,commentedIssues:m}}async function El(r,e,t,s){let o=x(),n=Object.values(o.getState().repoScores).filter(E=>E.mergedPRCount>0);if(t.size===0&&n.length>0)b(K,`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 E of Object.values(o.getState().repoScores))t.has(E.repo)||o.updateRepoScore(E.repo,{mergedPRCount:0});let i=0;for(let[E,{count:C,lastMergedAt:g}]of t)try{o.updateRepoScore(E,{mergedPRCount:C,lastMergedAt:g||void 0})}catch(G){i++,b(K,`Failed to update merged count for ${E}: ${S(G)}`)}i===t.size&&t.size>0&&b(K,`[ALL_MERGED_COUNT_UPDATES_FAILED] All ${t.size} merged count update(s) failed.`);let a=Object.values(o.getState().repoScores).filter(E=>(E.closedWithoutMergeCount||0)>0);s.size===0&&a.length>0&&b(K,`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[E,C]of s)try{o.updateRepoScore(E,{closedWithoutMergeCount:C})}catch(g){c++,b(K,`Failed to update closed count for ${E}: ${S(g)}`)}c===s.size&&s.size>0&&b(K,`[ALL_CLOSED_COUNT_UPDATES_FAILED] All ${s.size} closed count update(s) failed.`);let u=ts(e),p=0;for(let[E,C]of u)try{o.updateRepoScore(E,{signals:C})}catch(g){p++,b(K,`Failed to update signals for ${E}: ${S(g)}`)}p===u.size&&u.size>0&&b(K,`[ALL_SIGNAL_UPDATES_FAILED] All ${u.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(E){b(K,`Failed to fetch repo star counts: ${S(E)}`),b(K,"Repos without cached star data will be excluded from stats until star counts are fetched on the next successful run."),m=new Map}let R=0;for(let[E,C]of m)try{o.updateRepoScore(E,{stargazersCount:C})}catch(g){R++,b(K,`Failed to update star count for ${E}: ${S(g)}`)}R===m.size&&m.size>0&&b(K,`[ALL_STAR_COUNT_UPDATES_FAILED] All ${m.size} star count update(s) failed.`);let w=0;for(let[E]of t)try{o.addTrustedProject(E)}catch(C){w++,b(K,`Failed to sync trusted project ${E}: ${S(C)}`)}w===t.size&&t.size>0&&b(K,`[ALL_TRUST_SYNCS_FAILED] All ${t.size} trusted project sync(s) failed. This may indicate corrupted state.`)}function Rl(r,e,t,s){let o=x();try{let u=o.expireSnoozes();if(u.length>0){let p=u.map(d=>` - ${d}`).join(`
|
|
94
|
+
`);b(K,`${u.length} snoozed PR(s) expired and will resurface:
|
|
95
|
+
${p}`),o.save()}}catch(u){b(K,`Failed to expire/persist snoozes: ${S(u)}`)}let n=[],i=[],a=[];for(let u of e)o.isPRShelved(u.url)?It.has(u.status)?(o.unshelvePR(u.url),i.push(et(u)),a.push(u)):n.push(et(u)):u.stalenessTier==="dormant"&&!It.has(u.status)?n.push(et(u)):a.push(u);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 Tl(r,e,t,s,o){let n=x(),i=ss(e,n.getState().config.maxActivePRs,t.length),a=!1,c=s.filter(g=>{let G=n.getIssueDismissedAt(g.url);if(!G)return!0;if(g.status==="new_response"){let I=new Date(g.lastResponseAt).getTime(),O=new Date(G).getTime();if(isNaN(I)||isNaN(O))return b(K,`Invalid timestamp in dismiss check for ${g.url}, including issue`),!0;if(I>O)return b(K,`Auto-undismissing issue ${g.url}: new response at ${g.lastResponseAt} after dismiss at ${G}`),n.undismissIssue(g.url),a=!0,!0}return!1}),u=c.filter(g=>g.status==="new_response"),p=is(r,i,u),d=new Set(Object.keys(n.getState().config.snoozedPRs??{}).filter(g=>n.isSnoozed(g))),m=e.filter(g=>{let G=n.getIssueDismissedAt(g.url);if(!G)return!0;let I=new Date(g.updatedAt).getTime(),O=new Date(G).getTime();return isNaN(I)||isNaN(O)?(b(K,`Invalid timestamp in PR dismiss check for ${g.url}, including PR`),!0):I>O?(b(K,`Auto-undismissing PR ${g.url}: new activity at ${g.updatedAt} after dismiss at ${G}`),n.undismissIssue(g.url),a=!0,!0):!1});if(a)try{n.save()}catch(g){b(K,`Failed to persist auto-undismissed state: ${S(g)}`)}let R=rs(m,d);r.summary.totalNeedingAttention=R.length;let w=ns(r,R.length,u.length),E=os(R,i,c),C=es(e);return{digest:r,capacity:i,summary:p,briefSummary:w,actionableIssues:R,actionMenu:E,commentedIssues:c,repoGroups:C,failures:o}}function vl(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 Bs(r){let e=await Ta(r);return vl(e)}async function Ta(r){let e=new Et(r),{prs:t,failures:s,mergedCounts:o,closedCounts:n,monthlyCounts:i,monthlyClosedCounts:a,openedFromMerged:c,openedFromClosed:u,recentlyClosedPRs:p,recentlyMergedPRs:d,commentedIssues:m}=await wl(e,r);await El(e,t,o,n),Eo(t,i,a,c,u);let{activePRs:R,shelvedPRs:w,digest:E}=Rl(e,t,p,d);return Tl(E,R,w,m,s)}async function Sl(){let r=me();return Bs(r)}async function Cl(){let r=me();return Ta(r)}var K,as=P(()=>{"use strict";ee();ae();ue();Us();To();_o();ee();K="daily"});var va={};re(va,{runStatus:()=>Pl});async function Pl(r){let e=x(),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 Sa=P(()=>{"use strict";ee()});var Ca={};re(Ca,{runSearch:()=>kl});async function kl(r){let e=me(),t=new Rt(e),s=await t.searchIssues({maxResults:r.maxResults}),o=x(),{config:n}=o.getState(),i=n.excludeRepos||[],a=n.aiPolicyBlocklist??lt.aiPolicyBlocklist??[],c={candidates:s.map(u=>{let p=o.getRepoScore(u.issue.repo);return{issue:{repo:u.issue.repo,number:u.issue.number,title:u.issue.title,url:u.issue.url,labels:u.issue.labels},recommendation:u.recommendation,reasonsToApprove:u.reasonsToApprove,reasonsToSkip:u.reasonsToSkip,searchPriority:u.searchPriority,viabilityScore:u.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 Pa=P(()=>{"use strict";ee()});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 X(`Invalid ${t} URL: ${r}. Expected format: ${s[t]}`)}function te(r){if(r.length>ka)throw new X(`URL exceeds maximum length of ${ka} characters`);return r}function us(r){if(r.length>Aa)throw new X(`Message exceeds maximum length of ${Aa} characters`);return r}function Ft(r){if(!r||r.trim().length===0)throw new X("GitHub username cannot be empty.");let e=r.trim();if(e.length>Oa)throw new X(`GitHub username must be at most ${Oa} characters (got ${e.length}).`);if(!Al.test(e))throw new X("GitHub username can only contain alphanumeric characters and hyphens.");if(e.startsWith("-"))throw new X("GitHub username cannot start with a hyphen.");if(e.endsWith("-"))throw new X("GitHub username cannot end with a hyphen.");if(Ol.test(e))throw new X("GitHub username cannot contain consecutive hyphens.");return e}var ge,Vs,cs,ka,Aa,Oa,Al,Ol,ke=P(()=>{"use strict";ae();ge=/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+$/,Vs=/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/,cs=/^https:\/\/github\.com\/[^/]+\/[^/]+\/(issues|pull)\/\d+$/,ka=2048,Aa=1e3;Oa=39,Al=/^[a-zA-Z0-9-]+$/,Ol=/--/});var Ga={};re(Ga,{runVet:()=>Gl});async function Gl(r){te(r.issueUrl),oe(r.issueUrl,Vs,"issue");let e=me(),s=await new Rt(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=P(()=>{"use strict";ee();ke()});var So={};re(So,{runTrack:()=>$l,runUntrack:()=>Dl});async function $l(r){te(r.prUrl),oe(r.prUrl,ge,"PR");let e=me(),t=fe(e),s=Ee(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 Dl(r){return te(r.prUrl),oe(r.prUrl,ge,"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 Co=P(()=>{"use strict";ee();ke();Re()});var Da={};re(Da,{runRead:()=>Il});async function Il(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 Ia=P(()=>{"use strict";ke()});var Ws={};re(Ws,{runClaim:()=>Ul,runComments:()=>Fl,runPost:()=>xl});async function Fl(r){te(r.prUrl),oe(r.prUrl,ge,"PR");let e=me(),t=x(),s=fe(e),o=Ee(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}),[u,p,d]=await Promise.all([xe(g=>s.pulls.listReviewComments({owner:n,repo:i,pull_number:a,per_page:100,page:g})),xe(g=>s.issues.listComments({owner:n,repo:i,issue_number:a,per_page:100,page:g})),xe(g=>s.pulls.listReviews({owner:n,repo:i,pull_number:a,per_page:100,page:g}))]),m=t.getState().config.githubUsername,R=g=>!(!g.user||g.user.login===m||g.user.type==="Bot"&&!r.showBots),w=u.filter(R).sort((g,G)=>new Date(G.created_at).getTime()-new Date(g.created_at).getTime()),E=p.filter(R).sort((g,G)=>new Date(G.created_at).getTime()-new Date(g.created_at).getTime()),C=d.filter(g=>R(g)&&g.body&&g.body.trim()).sort((g,G)=>new Date(G.submitted_at||0).getTime()-new Date(g.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(g=>({user:g.user?.login,state:g.state,body:g.body??null,submittedAt:g.submitted_at??null})),reviewComments:w.map(g=>({user:g.user?.login,body:g.body,path:g.path,createdAt:g.created_at})),issueComments:E.map(g=>({user:g.user?.login,body:g.body,createdAt:g.created_at})),summary:{reviewCount:C.length,inlineCommentCount:w.length,discussionCommentCount:E.length}}}async function xl(r){if(te(r.url),oe(r.url,cs,"issue or PR"),!r.message.trim())throw new Error("No message provided");us(r.message);let e=me(),t=Ee(r.url);if(!t)throw new Error("Invalid GitHub URL format");let{owner:s,repo:o,number:n}=t,i=fe(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 Ul(r){te(r.issueUrl),oe(r.issueUrl,Vs,"issue");let e=me(),t=r.message||"Hi! I'd like to work on this issue. Could you assign it to me?";us(t);let s=Ee(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=fe(e),{data:c}=await a.issues.createComment({owner:o,repo:n,issue_number:i,body:t});try{let u=x();u.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}),u.save()}catch(u){console.error(`Warning: Comment posted on ${r.issueUrl} but failed to save to local state: ${u instanceof Error?u.message:u}`)}return{commentUrl:c.html_url,issueUrl:r.issueUrl}}var zs=P(()=>{"use strict";ee();Qt();ke()});var Fa={};re(Fa,{runConfig:()=>Ll});async function Ll(r){let e=x(),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:Ft(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 xa=P(()=>{"use strict";ee();ke()});var Ua={};re(Ua,{runInit:()=>Ml});async function Ml(r){Ft(r.username);let e=x();return e.updateConfig({githubUsername:r.username}),e.save(),{username:r.username,message:"Username saved. Run `daily` to fetch your open PRs from GitHub."}}var La=P(()=>{"use strict";ee();ke()});var ko={};re(ko,{runCheckSetup:()=>Nl,runSetup:()=>jl});function Po(r,e){let t=Number(r);if(!Number.isFinite(t)||t<1||!Number.isInteger(t))throw new X(`Invalid value for ${e}: "${r}". Must be a positive integer.`);return t}async function jl(r){let e=x(),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":Ft(c),e.updateConfig({githubUsername:c}),s[i]=c;break;case"maxActivePRs":{let u=Po(c,"maxActivePRs");e.updateConfig({maxActivePRs:u}),s[i]=String(u);break}case"dormantDays":{let u=Po(c,"dormantDays");e.updateConfig({dormantThresholdDays:u}),s[i]=String(u);break}case"approachingDays":{let u=Po(c,"approachingDays");e.updateConfig({approachingDormantDays:u}),s[i]=String(u);break}case"languages":e.updateConfig({languages:c.split(",").map(u=>u.trim())}),s[i]=c;break;case"labels":e.updateConfig({labels:c.split(",").map(u=>u.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 u=Number(c);if(!Number.isFinite(u)||!Number.isInteger(u)||u<0)throw new X(`Invalid value for minStars: "${c}". Must be a non-negative integer.`);e.updateConfig({minStars:u}),s[i]=String(u);break}case"includeDocIssues":e.updateConfig({includeDocIssues:c==="true"}),s[i]=c==="true"?"true":"false";break;case"aiPolicyBlocklist":{let u=c.split(",").map(m=>m.trim()).filter(Boolean),p=[],d=[];for(let m of u){let R=m.replace(/\s+/g,"");/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(R)?p.push(R):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&&u.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??lt.aiPolicyBlocklist??null,default:["matplotlib/matplotlib"],type:"list"}]}}async function Nl(){let r=x();return{setupComplete:r.isSetupComplete(),username:r.getState().config.githubUsername}}var Ao=P(()=>{"use strict";ee();ae();ke()});function ls(){return ja.join(Ie(),"dashboard-server.pid")}function Ks(r){xt.writeFileSync(ls(),JSON.stringify(r),{mode:384})}function Ut(){try{let r=xt.readFileSync(ls(),"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"?(b(Js,"PID file has invalid structure, ignoring"),null):e}catch(r){return r.code!=="ENOENT"&&b(Js,`Failed to read PID file: ${r.message}`),null}}function ct(){try{xt.unlinkSync(ls())}catch(r){r.code!=="ENOENT"&&b(Js,`Failed to remove PID file: ${r.message}`)}}function ps(r){return new Promise(e=>{let t=Ma.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 Qs(){let r=Ut();if(!r)return null;try{process.kill(r.pid,0)}catch(e){let t=e.code;return t!=="ESRCH"&&t!=="EPERM"&&b(Js,`Unexpected error checking PID ${r.pid}: ${e.message}`),ct(),null}return await ps(r.port)?{port:r.port,url:`http://localhost:${r.port}`}:(ct(),null)}var Ma,xt,ja,Js,Ys=P(()=>{"use strict";Ma=W(require("http"),1),xt=W(require("fs"),1),ja=W(require("path"),1);ee();ue();Js="dashboard-server"});function Vl(r){return new Promise(e=>setTimeout(e,r))}async function Ha(r){if(!Xs())return null;let t=await Qs();if(t){let c=Ut(),u=He();if(c)if(c.version&&u!=="0.0.0"&&c.version!==u){console.error(`[STARTUP] Dashboard server version mismatch (running: ${c.version}, current: ${u}). Restarting...`);let p=!1;try{process.kill(c.pid,"SIGTERM"),p=!0}catch(d){d.code==="ESRCH"?p=!0:console.error(`[STARTUP] Could not kill outdated dashboard (PID ${c.pid}): ${d.message}`)}if(p)ct();else return{url:t.url,port:t.port,alreadyRunning:!0}}else return{url:t.url,port:t.port,alreadyRunning:!0}}let s=r?.port??Hl,o=process.argv[1],n=(0,Na.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<Bl;c++){if(await Vl(ql),i||a)return null;let u=Ut();if(u&&await ps(u.port))return{url:`http://localhost:${u.port}`,port:u.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 Na,Hl,ql,Bl,qa=P(()=>{"use strict";Na=require("child_process");Ys();Oo();ee();Hl=3e3,ql=200,Bl=25});var Ja={};re(Ja,{countIssueListItems:()=>Wa,detectIssueList:()=>za,openInBrowser:()=>Zs,parseIssueListPathFromConfig:()=>Va,runStartup:()=>Wl});function Va(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 Wa(r){let e=0,t=0,s=r.split(`
|
|
96
|
+
`);for(let o of s)/^\s*- (?:~~)?\[/.test(o)&&(/~~|\*\*Done\*\*/.test(o)?t++:e++);return{availableCount:e,completedCount:t}}function za(){let r="",e="auto-detected",t=".claude/oss-autopilot/config.md";if(St.existsSync(t))try{let s=St.readFileSync(t,"utf-8"),o=Va(s);o&&St.existsSync(o)&&(r=o,e="configured")}catch(s){console.error("[STARTUP] Failed to read config:",S(s))}if(!r){let s=["open-source/potential-issue-list.md","oss/issue-list.md","issues.md"];for(let o of s)if(St.existsSync(o)){r=o,e="auto-detected";break}}if(r)try{let s=St.readFileSync(r,"utf-8"),{availableCount:o,completedCount:n}=Wa(s);return{path:r,source:e,availableCount:o,completedCount:n}}catch(s){return console.error(`[STARTUP] Failed to read issue list at ${r}:`,S(s)),{path:r,source:e,availableCount:0,completedCount:0}}}function Zs(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,Ba.execFile)(e,t,s=>{s&&console.error(`[STARTUP] Failed to open dashboard in browser: ${s.message}`)})}async function Wl(){let r=He(),e=x(),t=!1;if(!e.isSetupComplete()){let c=await _s();if(c)try{e.initializeWithDefaults(c),t=!0}catch(u){return console.error(`[STARTUP] Auto-detected username "${c}" but failed to save config:`,S(u)),{version:r,setupComplete:!1}}else return{version:r,setupComplete:!1}}let s=Qe();if(!s)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 o=await Bs(s),n,i=!1;if(o.digest.summary.totalActivePRs>0)try{let c=await Ha();c?(n=c.url,Zs(c.url),i=!0):console.error("[STARTUP] Dashboard SPA assets not found. Build with: cd packages/dashboard && pnpm run build")}catch(c){console.error("[STARTUP] SPA dashboard launch failed:",S(c))}i&&(o.briefSummary+=" | Dashboard opened in browser");let a=za();return{version:r,setupComplete:!0,autoDetected:t,daily:o,dashboardUrl:n,issueList:a}}var St,Ba,Go=P(()=>{"use strict";St=W(require("fs"),1),Ba=require("child_process");ee();ae();as();qa()});var Lt,Ka=P(()=>{"use strict";Lt=class{maxRequests;windowMs;timestamps=[];constructor(e){this.maxRequests=e.maxRequests,this.windowMs=e.windowMs}check(){let e=Date.now(),t=e-this.windowMs;if(this.timestamps=this.timestamps.filter(s=>s>t),this.timestamps.length>=this.maxRequests){let o=this.timestamps[0]+this.windowMs-e;return{allowed:!1,retryAfterSeconds:Math.ceil(o/1e3)}}return this.timestamps.push(e),{allowed:!0}}}});var ec={};re(ec,{findRunningDashboardServer:()=>Qs,getDashboardPidPath:()=>ls,isDashboardServerRunning:()=>ps,readDashboardServerInfo:()=>Ut,removeDashboardServerInfo:()=>ct,startDashboardServer:()=>Xl,writeDashboardServerInfo:()=>Ks});function Ql(r,e){let t=e.config.statusOverrides;if(!t||Object.keys(t).length===0)return r;let s=x(),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){b(Te,`Failed to persist auto-cleared overrides \u2014 they may reappear on restart: ${S(a)}`)}return i}function er(r,e,t){let s=wa(r,e),o=Ea(s),{monthlyMerged:n,monthlyOpened:i,monthlyClosed:a}=Ra(e),c=_a(r,e),u=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:Ql(r.openPRs||[],e),shelvedPRUrls:e.config.shelvedPRUrls||[],recentlyMergedPRs:r.recentlyMergedPRs||[],recentlyClosedPRs:r.recentlyClosedPRs||[],autoUnshelvedPRs:r.autoUnshelvedPRs||[],commentedIssues:t,issueResponses:u}}function Yl(r,e=zl){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 Za(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 Ya(r,e){let t=r.headers.origin;return t?[`http://localhost:${e}`,`http://127.0.0.1:${e}`].includes(t):!0}function tr(r,e,t){Za(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 ie(r,e,t){tr(r,e,{error:t})}async function Xl(r){let{port:e,assetsDir:t,token:s,open:o}=r,n=x(),i=qe.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 u;try{u=er(a,n.getState(),c)}catch(U){throw new Error(`Failed to build dashboard data: ${S(U)}. State data may be corrupted \u2014 try running: daily --json`,{cause:U})}let p=new Lt({maxRequests:30,windowMs:6e4}),d=new Lt({maxRequests:10,windowMs:6e4}),m=new Lt({maxRequests:2,windowMs:6e4}),R=Xa.createServer(async(U,k)=>{let A=U.method||"GET",M=U.url||"/";try{if(M==="/api/data"&&A==="GET"){let H=p.check();if(!H.allowed){k.setHeader("Retry-After",String(H.retryAfterSeconds)),ie(k,429,"Too many requests");return}tr(k,200,u);return}if(M==="/api/action"&&A==="POST"){if(!Ya(U,G)){ie(k,403,"Invalid origin");return}let H=d.check();if(!H.allowed){k.setHeader("Retry-After",String(H.retryAfterSeconds)),ie(k,429,"Too many requests");return}await w(U,k);return}if(M==="/api/refresh"&&A==="POST"){if(!Ya(U,G)){ie(k,403,"Invalid origin");return}let H=m.check();if(!H.allowed){k.setHeader("Retry-After",String(H.retryAfterSeconds)),ie(k,429,"Too many requests");return}await E(U,k);return}if(A==="GET"){C(M,k);return}ie(k,405,"Method not allowed")}catch(H){b(Te,`Unhandled request error: ${A} ${M} ${S(H)}`),k.headersSent||ie(k,500,"Internal server error")}});R.requestTimeout=Jl;async function w(U,k){let A;try{let M=await Yl(U);A=JSON.parse(M)}catch(M){let H=M instanceof Error&&M.message==="Body too large";ie(k,H?413:400,H?"Request body too large":"Invalid JSON body");return}if(!A.action||!Qa.has(A.action)){ie(k,400,`Invalid action. Must be one of: ${[...Qa].join(", ")}`);return}if(!A.url||typeof A.url!="string"){ie(k,400,'Missing or invalid "url" field');return}try{te(A.url),oe(A.url,ge,"PR")}catch(M){M instanceof X?ie(k,400,M.message):(b(Te,`Unexpected error during URL validation: ${S(M)}`),ie(k,400,"Invalid URL"));return}if(A.action==="override_status"&&(!A.status||A.status!=="needs_addressing"&&A.status!=="waiting_on_maintainer")){ie(k,400,'override_status requires a valid "status" field (needs_addressing or waiting_on_maintainer)');return}try{switch(A.action){case"shelve":n.shelvePR(A.url);break;case"unshelve":n.unshelvePR(A.url);break;case"override_status":{let M=A.status,ce=(a?.openPRs||[]).find(ye=>ye.url===A.url)?.updatedAt||new Date().toISOString();n.setStatusOverride(A.url,M,ce);break}}n.save()}catch(M){b(Te,`Action failed: ${A.action} ${A.url} ${S(M)}`),ie(k,500,"Action failed");return}u=er(a,n.getState(),c),tr(k,200,u)}async function E(U,k){let A=s||Qe();if(!A){ie(k,401,"No GitHub token available. Cannot refresh data.");return}try{b(Te,"Refreshing dashboard data from GitHub...");let M=await Ro(A);a=M.digest,c=M.commentedIssues,u=er(a,n.getState(),c),tr(k,200,u)}catch(M){b(Te,`Dashboard refresh failed: ${S(M)}`),ie(k,500,"Refresh failed")}}function C(U,k){let A;try{A=decodeURIComponent(U.split("?")[0])}catch{b(Te,`Malformed URL received: ${U}`),ie(k,400,"Malformed URL");return}if(A.includes("..")){ie(k,403,"Forbidden");return}let M=A==="/"?"index.html":A.replace(/^\/+/,""),H=qe.join(i,M);if(!H.startsWith(i+qe.sep)&&H!==i){ie(k,403,"Forbidden");return}try{sr.statSync(H).isDirectory()&&(H=qe.join(i,"index.html"))}catch(ne){if(ne.code==="ENOENT")H=qe.join(i,"index.html");else{b(Te,`Failed to stat file: ${H}`),ie(k,500,"Internal server error");return}}let ce=qe.extname(H).toLowerCase(),ye=Kl[ce]||"application/octet-stream";try{let ne=sr.readFileSync(H);Za(k),k.writeHead(200,{"Content-Type":ye,"Content-Length":ne.length,"Cache-Control":"public, max-age=3600"}),k.end(ne)}catch(ne){ne.code==="ENOENT"?ie(k,404,"Not found"):(b(Te,`Failed to serve static file: ${H}`),ie(k,500,"Failed to read file"))}}let g=10,G=e;for(let U=0;U<g;U++)try{await new Promise((k,A)=>{R.once("error",A),R.listen(G,"127.0.0.1",()=>k())});break}catch(k){let A=k;if(A.code==="EADDRINUSE"&&U<g-1){b(Te,`Port ${G} is in use, trying ${G+1}...`),G++;continue}throw new Error(`Failed to start server: ${A.message}`,{cause:k})}Ks({pid:process.pid,port:G,startedAt:new Date().toISOString(),version:He()});let I=`http://localhost:${G}`;b(Te,`Dashboard server running at ${I}`),s&&Ro(s).then(U=>{a=U.digest,c=U.commentedIssues,u=er(a,n.getState(),c),b(Te,"Background data refresh complete")}).catch(U=>{b(Te,`Background data refresh failed (serving cached data): ${S(U)}`)}),o&&Zs(I);let O=()=>{b(Te,"Shutting down dashboard server..."),ct(),R.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),3e3).unref()};process.on("SIGINT",O),process.on("SIGTERM",O)}var Xa,sr,qe,Qa,Te,zl,Jl,Kl,tc=P(()=>{"use strict";Xa=W(require("http"),1),sr=W(require("fs"),1),qe=W(require("path"),1);ee();ae();ue();ke();To();Go();Ys();Ka();Ys();Qa=new Set(["shelve","unshelve","override_status"]),Te="dashboard-server",zl=10240,Jl=3e4,Kl={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".json":"application/json",".png":"image/png",".ico":"image/x-icon"}});var sc={};re(sc,{resolveAssetsDir:()=>Xs,serveDashboard:()=>Zl});function Xs(){let r=Le.resolve(__dirname,"../../dashboard/dist");if(rr.existsSync(Le.join(r,"index.html")))return r;let e=Le.resolve(Le.dirname(process.argv[1]),"../../dashboard/dist");if(rr.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(rr.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 Zl(r){let e=Xs();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=Qe(),{startDashboardServer:s}=await Promise.resolve().then(()=>(tc(),ec));await s({port:r.port,assetsDir:e,token:t,open:r.open})}var rr,Le,Oo=P(()=>{"use strict";rr=W(require("fs"),1),Le=W(require("path"),1);ee()});var nc={};re(nc,{parseIssueList:()=>oc,runParseList:()=>rp});function ep(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 tp(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 sp(r){return!!(/~~.+~~/.test(r)||/\[[xX]\]/.test(r)||/\bdone\b/i.test(r))}function oc(r){let e=r.split(`
|
|
97
|
+
`),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=ep(n);if(!a)continue;let c=tp(n),u={repo:a.repo,number:a.number,title:c||`#${a.number}`,tier:o,url:a.url};sp(n)?s.push(u):t.push(u)}return{available:t,completed:s,availableCount:t.length,completedCount:s.length}}async function rp(r){let e=rc.resolve(r.filePath);if(!or.existsSync(e))throw new Error(`File not found: ${e}`);let t;try{t=or.readFileSync(e,"utf-8")}catch(s){let o=S(s);throw new Error(`Failed to read file: ${o}`,{cause:s})}return oc(t)}var or,rc,ic=P(()=>{"use strict";or=W(require("fs"),1),rc=W(require("path"),1);ae()});var ac={};re(ac,{runCheckIntegration:()=>cp});function ip(r){let e=Ae.extname(r),t=Ae.basename(r,e);return t==="index"?Ae.basename(Ae.dirname(r)):t}function ap(r,e){let t=Ae.dirname(r),s=[];for(let n of[".ts",".tsx",".js",".jsx"]){let i=Ae.join(t,`index${n}`);e.includes(i)&&s.push(i)}let o=Ae.dirname(t);for(let n of[".ts",".tsx",".js",".jsx"]){let i=Ae.join(o,`index${n}`);e.includes(i)&&s.push(i)}return[...new Set(s)]}async function cp(r){let e=r.base,t;try{let a=(0,nr.execFileSync)("git",["diff","--name-only","--diff-filter=A",`${e}...HEAD`],{encoding:"utf-8",timeout:1e4}).trim();t=a?a.split(`
|
|
98
|
+
`).filter(Boolean):[]}catch(a){let c=S(a);throw new Error(`Failed to run git diff: ${c}`,{cause:a})}let s=t.filter(a=>{let c=Ae.extname(a);return op.has(c)?!np.some(u=>u.test(a)):!1});if(s.length===0)return{newFiles:[],unreferencedCount:0};let o;try{o=(0,nr.execFileSync)("git",["ls-files"],{encoding:"utf-8",timeout:1e4}).trim().split(`
|
|
99
|
+
`).filter(Boolean)}catch(a){T("check-integration","git ls-files failed, reference checking will be skipped",a),o=[]}let n=[];for(let a of s){let c=ip(a),u=a.replace(/\.[^.]+$/,""),p=[],d=[c];u.includes("/")&&d.push(u);for(let w of d)try{let E=(0,nr.execFileSync)("git",["grep","-l","--",w],{encoding:"utf-8",timeout:1e4}).trim();if(E){let C=E.split(`
|
|
100
|
+
`).filter(g=>g!==a);p.push(...C)}}catch(E){let C=E&&typeof E=="object"&&"status"in E?E.status:void 0;if(C!==void 0&&C!==1){let g=S(E);T("check-integration",`git grep failed for "${w}": ${g}`)}}p=[...new Set(p)];let m=p.length>0,R={path:a,referencedBy:p,isIntegrated:m};m||(R.suggestedEntryPoints=ap(a,o)),n.push(R)}let i=n.filter(a=>!a.isIntegrated).length;return{newFiles:n,unreferencedCount:i}}var Ae,nr,op,np,cc=P(()=>{"use strict";Ae=W(require("path"),1),nr=require("child_process");ee();ae();op=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".rb",".go",".rs",".java",".kt",".vue",".svelte"]),np=[/^\./,/\.(test|spec|e2e)\.[^.]+$/,/\.(config|rc)\.[^.]+$/,/__tests__\//,/\.d\.ts$/,/\.md$/,/\.json$/,/\.ya?ml$/]});var lc={};re(lc,{runLocalRepos:()=>dp,scanForRepos:()=>uc});function lp(r){try{let e=(0,ir.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 T("local-repos",`Failed to get GitHub remote for ${r}`,e),null}}function pp(r){try{return(0,ir.execFileSync)("git",["-C",r,"branch","--show-current"],{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim()||null}catch(e){return T("local-repos",`Failed to get current branch for ${r}`,e),null}}function uc(r){let e={};for(let t of r){if(!$o.existsSync(t))continue;let s;try{let o=(0,ir.execFileSync)("find",[t,"-maxdepth","4","-name",".git","-type","d"],{encoding:"utf-8",timeout:3e4,stdio:["pipe","pipe","pipe"]}).trim();s=o?o.split(`
|
|
101
|
+
`).filter(Boolean):[]}catch(o){T("local-repos",`find failed for scan path ${t}`,o);continue}for(let o of s){let n=Me.dirname(o),i=lp(n);if(!i)continue;let a=pp(n);e[i]={path:n,exists:!0,currentBranch:a}}}return e}async function dp(r){let e=x(),t=e.getState(),s=r.paths?.map(i=>Me.resolve(i))??t.config.localRepoScanPaths??up.filter(i=>$o.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=uc(s),n=new Date().toISOString();try{e.setLocalRepoCache({repos:o,scanPaths:s,cachedAt:n}),e.save()}catch(i){let a=S(i);console.error(`Warning: Failed to cache scan results: ${a}`)}return{repos:o,scanPaths:s,cachedAt:n,fromCache:!1}}var $o,Me,Ct,ir,up,pc=P(()=>{"use strict";$o=W(require("fs"),1),Me=W(require("path"),1),Ct=W(require("os"),1),ir=require("child_process");ee();ae();up=[Me.join(Ct.homedir(),"Documents","oss"),Me.join(Ct.homedir(),"dev"),Me.join(Ct.homedir(),"projects"),Me.join(Ct.homedir(),"src"),Me.join(Ct.homedir(),"code"),Me.join(Ct.homedir(),"repos")]});var Do={};re(Do,{PR_URL_PATTERN:()=>ge,runShelve:()=>mp,runUnshelve:()=>gp});async function mp(r){te(r.prUrl),oe(r.prUrl,ge,"PR");let e=x(),t=e.shelvePR(r.prUrl);return t&&e.save(),{shelved:t,url:r.prUrl}}async function gp(r){te(r.prUrl),oe(r.prUrl,ge,"PR");let e=x(),t=e.unshelvePR(r.prUrl);return t&&e.save(),{unshelved:t,url:r.prUrl}}var Io=P(()=>{"use strict";ee();ke()});var Fo={};re(Fo,{runDismiss:()=>hp,runUndismiss:()=>fp});async function hp(r){te(r.url),oe(r.url,cs,"issue or PR");let e=x(),t=e.dismissIssue(r.url,new Date().toISOString());return t&&e.save(),{dismissed:t,url:r.url}}async function fp(r){te(r.url),oe(r.url,cs,"issue or PR");let e=x(),t=e.undismissIssue(r.url);return t&&e.save(),{undismissed:t,url:r.url}}var xo=P(()=>{"use strict";ee();ke()});var Uo={};re(Uo,{runSnooze:()=>yp,runUnsnooze:()=>_p});async function yp(r){te(r.prUrl),oe(r.prUrl,ge,"PR"),us(r.reason);let e=r.days??bp;if(!Number.isFinite(e)||e<=0)throw new Error("Snooze duration must be a positive number of days.");let t=x(),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 _p(r){te(r.prUrl),oe(r.prUrl,ge,"PR");let e=x(),t=e.unsnoozePR(r.prUrl);return t&&e.save(),{unsnoozed:t,url:r.prUrl}}var bp,Lo=P(()=>{"use strict";ee();ke();bp=7});var Mo={};re(Mo,{runClearOverride:()=>Ep,runOverride:()=>wp});async function wp(r){if(te(r.prUrl),oe(r.prUrl,ge,"PR"),!dc.includes(r.status))throw new Error(`Invalid status "${r.status}". Must be one of: ${dc.join(", ")}`);let e=r.status,t=x(),s=new Date().toISOString();return t.setStatusOverride(r.prUrl,e,s),t.save(),{url:r.prUrl,status:e}}async function Ep(r){te(r.prUrl),oe(r.prUrl,ge,"PR");let e=x(),t=e.clearStatusOverride(r.prUrl);return t&&e.save(),{url:r.prUrl,cleared:t}}var dc,jo=P(()=>{"use strict";ee();ke();dc=["needs_addressing","waiting_on_maintainer"]});var mc={};re(mc,{runPRTemplate:()=>Rp});async function Rp(r){let{owner:e,repo:t}=kt(r.repo),s=me(),o=fe(s);return bo(o,e,t)}var gc=P(()=>{"use strict";Gt();Re();yo()});var hc={};re(hc,{formatStatsBadge:()=>Cp,formatStatsMarkdown:()=>vp,runStats:()=>Tp});async function Tp(){let e=x().getState(),t=e.lastDigest?.summary?.totalActivePRs??0,s=ho({repoScores:e.repoScores??{},activePRCount:t});return{...s,mergeRateFormatted:`${(s.mergeRate*100).toFixed(1)}%`,username:e.config.githubUsername}}function vp(r){let e=[`# OSS Contribution Stats for @${r.username}`,"","| Metric | Value |","|--------|-------|",`| Merged PRs | ${r.totalMerged} |`,`| Merge Rate | ${r.mergeRateFormatted} |`,`| Active PRs | ${r.activePRs} |`,`| Repos Contributed | ${r.reposContributed} |`,""];if(r.topRepos.length>0){e.push("## Top Repos","","| Repo | Merged PRs |","|------|-----------|");for(let t of r.topRepos)e.push(`| ${t.repo} | ${t.mergedCount} |`);e.push("")}return e.push("---","*Generated by [OSS Autopilot](https://github.com/costajohnt/oss-autopilot)*"),e.join(`
|
|
102
|
+
`)}function Sp(r){return r.totalMerged===0?"blue":r.mergeRate>=.8?"brightgreen":r.mergeRate>=.6?"green":r.mergeRate>=.4?"yellow":"orange"}function Cp(r){return{schemaVersion:1,label:"OSS Contributions",message:r.totalMerged>0?`${r.mergeRateFormatted} merge rate | ${r.totalMerged} merged`:"Getting Started",color:Sp(r)}}var fc=P(()=>{"use strict";ee();fo()});var mn=W(dn(),1),{program:Up,createCommand:Lp,createArgument:Mp,createOption:jp,CommanderError:Np,InvalidArgumentError:Hp,InvalidOptionArgumentError:qp,Command:gn,Argument:Bp,Option:Vp,Help:Wp}=mn.default;ee();ae();_o();function Q(r,e){let t=S(r);e?ya(t):console.error(`Error: ${t}`),process.exit(1)}function bc(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(()=>(as(),vo)),s=await t();J(s)}else{let{runDailyForDisplay:t,printDigest:s}=await Promise.resolve().then(()=>(as(),vo)),o=await t();s(o.digest,o.capacity,o.commentedIssues)}}catch(t){Q(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(()=>(Sa(),va)),s=await t({offline:e.offline});e.json?J(s):(console.log(`
|
|
1450
103
|
\u{1F4CA} OSS Status
|
|
1451
104
|
`),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(`
|
|
1452
105
|
Last Updated: ${s.lastUpdated||"Never"}`),console.log("(Offline mode: showing cached data)")):console.log(`
|
|
1453
106
|
Last Run: ${s.lastRunAt||"Never"}`),console.log(`
|
|
1454
|
-
Run with --json for structured output`))}catch(t){
|
|
107
|
+
Run with --json for structured output`))}catch(t){Q(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(()=>(Pa(),Ca)),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(`
|
|
1455
108
|
Searching for issues (max ${o})...
|
|
1456
|
-
`);let i=await s({maxResults:o});if(t.json)
|
|
109
|
+
`);let i=await s({maxResults:o});if(t.json)J(i);else{if(i.candidates.length===0){i.rateLimitWarning?console.warn(`
|
|
1457
110
|
${i.rateLimitWarning}
|
|
1458
111
|
`):console.log("No matching issues found.");return}i.rateLimitWarning&&console.warn(`
|
|
1459
112
|
${i.rateLimitWarning}
|
|
1460
113
|
`),console.log(`Found ${i.candidates.length} candidates:
|
|
1461
|
-
`);for(let a of i.candidates){let{issue:c,recommendation:
|
|
114
|
+
`);for(let a of i.candidates){let{issue:c,recommendation:u,reasonsToApprove:p,reasonsToSkip:d,viabilityScore:m}=a;console.log(`[${u.toUpperCase()}] ${c.repo}#${c.number}: ${c.title}`),console.log(` URL: ${c.url}`),console.log(` Viability: ${m}/100`),p.length>0&&console.log(` Approve: ${p.join(", ")}`),d.length>0&&console.log(` Skip: ${d.join(", ")}`),console.log("---")}}}catch(s){Q(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(()=>($a(),Ga)),o=await s({issueUrl:e});if(t.json)J(o);else{let{issue:n,recommendation:i,reasonsToApprove:a,reasonsToSkip:c}=o;console.log(`
|
|
1462
115
|
Vetting issue: ${e}
|
|
1463
|
-
`),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){
|
|
1464
|
-
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){
|
|
116
|
+
`),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){Q(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(()=>(Co(),So)),o=await s({prUrl:e});t.json?J(o):(console.log(`
|
|
117
|
+
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){Q(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(()=>(Co(),So)),o=await s({prUrl:e});t.json?J(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){Q(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(()=>(Ia(),Da)),o=await s({prUrl:e,all:t.all});t.json?J(o):console.log("Note: In v2, PR read state is not tracked locally. PRs are fetched fresh on each daily run.")}catch(s){Q(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(()=>(zs(),Ws)),o=await s({prUrl:e,showBots:t.bots});if(t.json)J(o);else{let{formatRelativeTime:n}=await Promise.resolve().then(()=>(Re(),yn));console.log(`
|
|
1465
118
|
Fetching comments for: ${e}
|
|
1466
119
|
`),console.log(`## ${o.pr.title}
|
|
1467
120
|
`),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}
|
|
1468
121
|
`);let i={APPROVED:"[Approved]",CHANGES_REQUESTED:"[Changes]"};if(o.reviews.length>0){console.log(`### Reviews (newest first)
|
|
1469
|
-
`);for(let a of o.reviews){let c=i[a.state]??"[Comment]",
|
|
122
|
+
`);for(let a of o.reviews){let c=i[a.state]??"[Comment]",u=a.submittedAt?n(a.submittedAt):"";console.log(`${c} **@${a.user}** (${a.state}) - ${u}`),a.body&&console.log(`> ${a.body.split(`
|
|
1470
123
|
`).join(`
|
|
1471
124
|
> `)}
|
|
1472
125
|
`)}}if(o.reviewComments.length>0){console.log(`### Inline Comments (newest first)
|
|
@@ -1477,36 +130,36 @@ Fetching comments for: ${e}
|
|
|
1477
130
|
`).join(`
|
|
1478
131
|
> `)}
|
|
1479
132
|
`)}}o.reviewComments.length===0&&o.issueComments.length===0&&o.reviews.length===0&&console.log(`No comments from other users.
|
|
1480
|
-
`),console.log("---"),console.log(`**Summary:** ${o.summary.reviewCount} reviews, ${o.summary.inlineCommentCount} inline comments, ${o.summary.discussionCommentCount} discussion comments`)}}catch(s){
|
|
133
|
+
`),console.log("---"),console.log(`**Summary:** ${o.summary.reviewCount} reviews, ${o.summary.inlineCommentCount} inline comments, ${o.summary.discussionCommentCount} discussion comments`)}}catch(s){Q(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(()=>(zs(),Ws)),i=await n({url:e,message:o});s.json?J(i):console.log(`Comment posted: ${i.commentUrl}`)}catch(o){Q(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(()=>(zs(),Ws)),n=t.length>0?t.join(" "):void 0,i=await o({issueUrl:e,message:n});s.json?J(i):console.log(`Issue claimed: ${i.commentUrl}`)}catch(o){Q(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(()=>(xa(),Fa)),n=await o({key:e,value:t});s.json?J(n):"config"in n?(console.log(`
|
|
1481
134
|
\u2699\uFE0F Current Configuration:
|
|
1482
|
-
`),console.log(JSON.stringify(n.config,null,2))):console.log(`Set ${n.key} to: ${n.value}`)}catch(o){
|
|
1483
|
-
Username set to @${o.username}.`),console.log("Run `oss-autopilot daily` to fetch your open PRs from GitHub."))}catch(s){
|
|
135
|
+
`),console.log(JSON.stringify(n.config,null,2))):console.log(`Set ${n.key} to: ${n.value}`)}catch(o){Q(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(()=>(La(),Ua)),o=await s({username:e});t.json?J(o):(console.log(`
|
|
136
|
+
Username set to @${o.username}.`),console.log("Run `oss-autopilot daily` to fetch your open PRs from GitHub."))}catch(s){Q(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(()=>(Ao(),ko)),s=await t({reset:e.reset,set:e.set});if(e.json)J(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(`
|
|
1484
137
|
\u2699\uFE0F OSS Autopilot Setup
|
|
1485
138
|
`),console.log(`\u2713 Setup already complete!
|
|
1486
139
|
`),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(`
|
|
1487
140
|
Run 'setup --reset' to reconfigure.`);else if("setupRequired"in s){console.log(`
|
|
1488
141
|
\u2699\uFE0F OSS Autopilot Setup
|
|
1489
142
|
`),console.log("SETUP_REQUIRED"),console.log("---"),console.log(`Please configure the following settings:
|
|
1490
|
-
`);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){
|
|
143
|
+
`);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){Q(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(()=>(Ao(),ko)),s=await t();e.json?J(s):s.setupComplete?(console.log("SETUP_COMPLETE"),console.log(`username=${s.username}`)):console.log("SETUP_INCOMPLETE")}catch(t){Q(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(()=>(Oo(),sc));await o({port:s,open:t.open})}catch(s){Q(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(()=>(ic(),nc)),o=await s({filePath:e});if(t.json)J(o);else{let i=(await import("path")).resolve(e);if(console.log(`
|
|
1491
144
|
\u{1F4CB} Issue List: ${i}
|
|
1492
145
|
`),console.log(`Available: ${o.availableCount} | Completed: ${o.completedCount}
|
|
1493
146
|
`),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(`
|
|
1494
|
-
--- Completed ---`);for(let a of o.completed)console.log(` [${a.tier}] ${a.repo}#${a.number}: ${a.title}`)}}}catch(s){
|
|
147
|
+
--- Completed ---`);for(let a of o.completed)console.log(` [${a.tier}] ${a.repo}#${a.number}: ${a.title}`)}}}catch(s){Q(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(()=>(cc(),ac)),s=await t({base:e.base});if(e.json)J(s);else if(s.newFiles.length===0)console.log(`
|
|
1495
148
|
No new code files to check.`);else{console.log(`
|
|
1496
149
|
\u{1F50D} Integration Check (base: ${e.base})
|
|
1497
150
|
`),console.log(`New files: ${s.newFiles.length} | Unreferenced: ${s.unreferencedCount}
|
|
1498
|
-
`);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){
|
|
151
|
+
`);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){Q(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(()=>(pc(),lc)),s=await t({scan:e.scan,paths:e.paths});e.json?J(s):s.fromCache?(console.log(`
|
|
1499
152
|
\u{1F4C1} Local Repos (cached ${s.cachedAt})
|
|
1500
|
-
`),
|
|
1501
|
-
`),
|
|
153
|
+
`),bc(s.repos)):(console.log(`Found ${Object.keys(s.repos).length} repos:
|
|
154
|
+
`),bc(s.repos))}catch(t){Q(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(()=>(Go(),Ja)),s=await t();e.json?J(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){Q(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(()=>(Io(),Do)),o=await s({prUrl:e});t.json?J(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){Q(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(()=>(Io(),Do)),o=await s({prUrl:e});t.json?J(o):o.unshelved?(console.log(`Unshelved: ${e}`),console.log("This PR is now active again.")):console.log("PR was not shelved.")}catch(s){Q(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(()=>(xo(),Fo)),o=await s({url:e});t.json?J(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){Q(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(()=>(xo(),Fo)),o=await s({url:e});t.json?J(o):o.undismissed?(console.log(`Undismissed: ${e}`),console.log("Notifications are active again.")):console.log("Was not dismissed.")}catch(s){Q(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(()=>(Lo(),Uo)),n=await o({prUrl:e,reason:t.reason,days:s});t.json?J(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){Q(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(()=>(Lo(),Uo)),o=await s({prUrl:e});t.json?J(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){Q(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(),Mo)),n=await o({prUrl:e,status:t});s.json?J(n):(console.log(`Override set: ${e} \u2192 ${n.status}`),console.log("This override will auto-clear when the PR has new activity."))}catch(o){Q(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(),Mo)),o=await s({prUrl:e});t.json?J(o):o.cleared?console.log(`Override cleared: ${e}`):console.log("No override was set for this PR.")}catch(s){Q(s,t.json)}})}},{name:"pr-template",register(r){r.command("pr-template <repo>").description("Fetch a repository's PR description template").option("--json","Output as JSON").action(async(e,t)=>{try{let{runPRTemplate:s}=await Promise.resolve().then(()=>(gc(),mc)),o=await s({repo:e});t.json?J(o):o.template?(console.log(`
|
|
1502
155
|
PR template found at: ${o.source}
|
|
1503
156
|
`),console.log(o.template)):o.error?console.error(`
|
|
1504
157
|
Warning: Could not check for PR template: ${o.error}`):console.log(`
|
|
1505
|
-
No PR template found for this repository.`)}catch(s){
|
|
158
|
+
No PR template found for this repository.`)}catch(s){Q(s,t.json)}})}},{name:"stats",localOnly:!0,register(r){r.command("stats").description("Show contribution statistics").option("--json","Output as JSON").option("--markdown","Output as shareable markdown report").option("--badge","Output as shields.io endpoint JSON").action(async e=>{try{let{runStats:t,formatStatsMarkdown:s,formatStatsBadge:o}=await Promise.resolve().then(()=>(fc(),hc)),n=await t();if(e.badge)console.log(JSON.stringify(o(n),null,2));else if(e.markdown)console.log(s(n));else if(e.json)J(n);else{if(console.log(`
|
|
1506
159
|
OSS Contribution Stats (@${n.username})
|
|
1507
160
|
`),console.log(` Merged PRs: ${n.totalMerged}`),console.log(` Closed PRs: ${n.totalClosed}`),console.log(` Merge Rate: ${n.mergeRateFormatted}`),console.log(` Active PRs: ${n.activePRs}`),console.log(` Repos Contributed: ${n.reposContributed}`),n.topRepos.length>0){console.log(`
|
|
1508
161
|
Top Repos:`);for(let i of n.topRepos.slice(0,5))console.log(` ${i.repo}: ${i.mergedCount} merged`)}console.log(`
|
|
1509
|
-
Use --markdown for a shareable report or --badge for shields.io`)}}catch(t){
|
|
162
|
+
Use --markdown for a shareable report or --badge for shields.io`)}}catch(t){Q(t,e.json)}})}}];var Pp=He(),ar=new gn;ar.name("oss-autopilot").description("AI-powered autopilot for managing open source contributions").version(Pp).option("--debug","Enable debug logging");var kp=new Set(No.filter(r=>r.localOnly).map(r=>r.name));for(let r of No)r.register(ar);ar.hook("preAction",async(r,e)=>{r.opts().debug&&($r(),T("cli",`Running command: ${e.name()}`));let s=e.name();kp.has(s)||await ys()||(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))});ar.parse();
|
|
1510
163
|
/*! Bundled license information:
|
|
1511
164
|
|
|
1512
165
|
@octokit/request-error/dist-src/index.js:
|