@oss-autopilot/core 1.6.1 → 1.6.3
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
CHANGED
|
@@ -69,9 +69,9 @@ Options:
|
|
|
69
69
|
1. Use gh CLI: gh auth login
|
|
70
70
|
2. Set GITHUB_TOKEN environment variable
|
|
71
71
|
|
|
72
|
-
The gh CLI is recommended - install from https://cli.github.com`);return e}function gy(){it=null,Ro=!1}async function Js(){if(it)return it;if(Ro)return null;if(Ro=!0,process.env.GITHUB_TOKEN)return it=process.env.GITHUB_TOKEN,it;try{let e=await new Promise((t,n)=>{(0,Po.execFile)("gh",["auth","token"],{encoding:"utf-8",timeout:2e3},(o,r)=>{o?n(o):t(r.trim())})});if(e&&e.length>0)return it=e,E(xr,"Using GitHub token from gh CLI (async)"),it}catch(e){E(xr,"gh auth token failed (CLI unavailable or not authenticated)",e)}return null}function Ks(){let e=Ht.join(Im.homedir(),".oss-autopilot","state.json");return ht.existsSync(e)}async function Xs(){try{let e=await new Promise((t,n)=>{(0,Po.execFile)("gh",["api","user","--jq",".login"],{encoding:"utf-8",timeout:5e3},(o,r)=>{o?n(o):t(r.trim())})});return e&&OE.test(e)?(E(xr,`Detected GitHub username: ${e}`),e):(E(xr,`gh api user returned invalid username: "${e}"`),null)}catch(e){return E(xr,"detectGitHubUsername failed",e),null}}var ht,Ht,Im,Po,En,xr,it,Ro,PE,CE,OE,Ue=b(()=>{"use strict";ht=re(require("fs"),1),Ht=re(require("path"),1),Im=re(require("os"),1),Po=require("child_process");he();$e();En=5;xr="utils",it=null,Ro=!1;PE=/^[a-zA-Z0-9_-]+$/,CE=/^[a-zA-Z0-9_.-]+$/;OE=/^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$/});function AE(e){try{let t=JSON.parse(J.readFileSync(e,"utf-8"));return Date.now()-t.timestamp>IE}catch(t){return E(W,"Lock file unreadable or invalid JSON, treating as stale",t),!0}}function vy(e){let t=JSON.stringify({pid:process.pid,timestamp:Date.now()});try{J.writeFileSync(e,t,{flag:"wx"});return}catch(n){E(W,"Lock file already exists, checking staleness",n)}if(!AE(e))throw new Error("State file is locked by another process");try{J.unlinkSync(e)}catch(n){E(W,"Stale lock already removed by another process",n)}try{J.writeFileSync(e,t,{flag:"wx"})}catch(n){throw E(W,"Lock re-acquire failed (race condition)",n),new Error("State file is locked by another process",{cause:n})}}function by(e){try{JSON.parse(J.readFileSync(e,"utf-8")).pid===process.pid&&J.unlinkSync(e)}catch(t){E(W,"Lock file already removed or unreadable during release",t)}}function Oo(e,t,n){let o=e+".tmp";J.writeFileSync(o,t,{mode:n??384}),J.renameSync(o,e),n!==void 0&&J.chmodSync(e,n)}function yy(e){E(W,"Migrating state from v1 to v2 (fresh GitHub fetching)...");let t=e.mergedPRs||[],n=e.closedPRs||[],o={...e.repoScores||{}};for(let i of[...t,...n])o[i.repo]||(o[i.repo]={repo:i.repo,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}});let r={version:2,activeIssues:e.activeIssues||[],repoScores:o,config:e.config,events:e.events||[],lastRunAt:new Date().toISOString()};return E(W,`Migration complete. Preserved ${Object.keys(o).length} repo scores.`),r}function Qs(){return Tn.parse({version:2})}function DE(){let e=pr();if(J.existsSync(e)||!J.existsSync(Co))return!1;E(W,"Migrating state from ./data/ to ~/.oss-autopilot/...");try{if(vt(),J.copyFileSync(Co,e),E(W,`Migrated state file to ${e}`),J.existsSync(Cr)){let n=Rr(),o=J.readdirSync(Cr).filter(r=>r.startsWith("state-")&&r.endsWith(".json"));for(let r of o){let i=yt.join(Cr,r),s=yt.join(n,r);J.copyFileSync(i,s)}E(W,`Migrated ${o.length} backup files`)}if(J.unlinkSync(Co),E(W,"Removed legacy state file"),J.existsSync(Cr)){let n=J.readdirSync(Cr);for(let o of n)J.unlinkSync(yt.join(Cr,o));J.rmdirSync(Cr)}let t=yt.dirname(Co);return J.existsSync(t)&&J.readdirSync(t).length===0&&(J.rmdirSync(t),E(W,"Removed empty legacy data directory")),E(W,"Migration complete!"),!0}catch(t){if(v(W,`Failed to migrate state: ${P(t)}`),J.existsSync(e)&&J.existsSync(Co))try{J.unlinkSync(e),E(W,"Cleaned up partial migration - removed incomplete new state file")}catch(n){v(W,"Could not clean up partial migration file"),E(W,"Partial migration cleanup failed",n)}return v(W,"To resolve this issue:"),v(W," 1. Ensure you have write permissions to ~/.oss-autopilot/"),v(W," 2. Check available disk space"),v(W," 3. Manually copy ./data/state.json to ~/.oss-autopilot/state.json"),v(W," 4. Or delete ./data/state.json to start fresh"),!1}}function hy(){let e=Rr();if(!J.existsSync(e))return null;let t=J.readdirSync(e).filter(n=>n.startsWith("state-")&&n.endsWith(".json")).sort().reverse();for(let n of t){let o=yt.join(e,n);try{let r=J.readFileSync(o,"utf-8"),i=JSON.parse(r);typeof i=="object"&&i!==null&&i.version===1&&(i=yy(i));let s=Tn.safeParse(i);if(s.success){let c=s.data;E(W,`Successfully restored state from backup: ${n}`);let u=Object.keys(c.repoScores).length;E(W,`Restored state v${c.version}: ${u} repo scores`);let l=pr();return Oo(l,JSON.stringify(c,null,2),384),E(W,"Restored backup written to main state file"),c}let a=s.error.issues.map(c=>`${c.path.join(".")}: ${c.message}`).join("; ");v(W,`Backup ${n} failed schema validation: ${a}`),E(W,`Backup ${n} full validation errors:`,s.error.issues)}catch(r){v(W,`Backup ${n} is corrupted, trying next...`),E(W,`Backup ${n} parse failed`,r)}}return null}function Am(){DE();let e=pr();try{if(J.existsSync(e)){let t=J.readFileSync(e,"utf-8"),n=JSON.parse(t),o=!1;typeof n=="object"&&n!==null&&n.version===1&&(n=yy(n),o=!0);let r=Tn.safeParse(n);if(!r.success){let c=r.error.issues.map(l=>`${l.path.join(".")}: ${l.message}`).join("; ");v(W,`Invalid state file structure: ${c}`),v(W,"Attempting to restore from backup..."),E(W,"Full validation errors:",r.error.issues);try{let l=e+".rejected-"+Date.now();J.copyFileSync(e,l),v(W,`Previous state preserved at: ${l}`)}catch(l){v(W,`Could not preserve rejected state file: ${P(l)}`)}let u=hy();if(u){let l=Ys(e);return{state:u,mtimeMs:l}}return v(W,"No valid backup found, starting fresh"),{state:Qs(),mtimeMs:0}}o&&(Oo(e,JSON.stringify(r.data,null,2),384),E(W,"Migrated and validated state saved"));let i=r.data;try{let c=!1;if(i.config.dismissedIssues){let u=/\/pull\/\d+$/;for(let l of Object.keys(i.config.dismissedIssues))u.test(l)&&(delete i.config.dismissedIssues[l],c=!0)}c&&(Oo(e,JSON.stringify(i,null,2),384),v(W,"Cleaned up dismissed PR URLs from persisted state"))}catch(c){v(W,`Failed to clean up removed features from state: ${P(c)}`)}let s=Ys(e),a=Object.keys(i.repoScores).length;return E(W,`Loaded state v${i.version}: ${a} repo scores tracked`),{state:i,mtimeMs:s}}}catch(t){v(W,"Error loading state:",t),v(W,"Attempting to restore from backup...");let n=hy();if(n){let o=Ys(e);return{state:n,mtimeMs:o}}v(W,"No valid backup found, starting fresh")}return E(W,"No existing state found, initializing..."),{state:Qs(),mtimeMs:0}}function Ys(e){try{return J.statSync(e).mtimeMs}catch(t){return E(W,`Could not read state file mtime (reload detection will always trigger): ${P(t)}`),0}}function UE(){let e=Rr();try{let t=J.readdirSync(e).filter(n=>n.startsWith("state-")).sort().reverse();for(let n of t.slice(10))try{J.unlinkSync(yt.join(e,n))}catch(o){v(W,`Could not delete old backup ${n}:`,P(o))}}catch(t){v(W,"Could not clean up backups:",P(t))}}function _y(e){let t=pr(),n=t+".lock",o=Rr();vy(n);try{try{if(J.existsSync(t)){let i=new Date().toISOString().replace(/[:.]/g,"-"),s=Math.random().toString(36).slice(2,8).padEnd(6,"0"),a=yt.join(o,`state-${i}-${s}.json`);J.copyFileSync(t,a),J.chmodSync(a,384),UE()}}catch(i){v(W,`Could not create backup before save: ${P(i)}`)}Oo(t,JSON.stringify(e,null,2),384);let r=Ys(t);return E(W,"State saved successfully"),r}finally{by(n)}}function $y(e){try{let t=pr();if(J.statSync(t).mtimeMs===e)return null;let o=Am();try{o.mtimeMs=J.statSync(t).mtimeMs}catch(r){E(W,"Could not re-read mtime after reload (will retry next cycle)",r)}return o}catch(t){return v(W,`Failed to reload state from disk: ${P(t)}`),null}}var J,yt,W,IE,Co,Cr,Dm=b(()=>{"use strict";J=re(require("fs"),1),yt=re(require("path"),1);xm();Ue();he();$e();W="state",IE=3e4,Co=yt.join(process.cwd(),"data","state.json"),Cr=yt.join(process.cwd(),"data","backups")});function Wt(e,t){return e===void 0||e<t}var Rn,pA,Um,Pn,Io,Dt=b(()=>{"use strict";xm();Rn=qs.parse({}),pA=Tn.parse({version:2}),Um=Tm.options,Pn=Em.options,Io={beginner:["good first issue","help wanted","easy","up-for-grabs","first-timers-only","beginner"],intermediate:["enhancement","feature","feature-request","contributions welcome"],advanced:["proposal","RFC","accepted","design"]}});function zE(e){return{repo:e,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}}}function GE(e){let t=5;if(e.mergedPRCount>0){let o=Math.min(Math.round(Math.log2(e.mergedPRCount+1)*2),5);t+=o}let n=Math.min(e.closedWithoutMergeCount,3);if(t-=n,e.lastMergedAt){let o=new Date(e.lastMergedAt);isNaN(o.getTime())?v(Ao,`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))}function ky(e,t){return e.repoScores[t]}function Cn(e,t,n){e.repoScores[t]||(e.repoScores[t]=zE(t));let o=e.repoScores[t];n.mergedPRCount!==void 0&&(o.mergedPRCount=n.mergedPRCount),n.closedWithoutMergeCount!==void 0&&(o.closedWithoutMergeCount=n.closedWithoutMergeCount),n.avgResponseDays!==void 0&&(o.avgResponseDays=n.avgResponseDays),n.lastMergedAt!==void 0&&(o.lastMergedAt=n.lastMergedAt),n.stargazersCount!==void 0&&(o.stargazersCount=n.stargazersCount),n.language!==void 0&&(o.language=n.language),n.signals&&(o.signals={...o.signals,...n.signals}),o.score=GE(o),o.lastEvaluatedAt=new Date().toISOString(),E(Ao,`Updated repo score for ${t}: ${o.score}/10`)}function Ty(e,t){let n=(e.repoScores[t]?.mergedPRCount??0)+1;Cn(e,t,{mergedPRCount:n,lastMergedAt:new Date().toISOString()})}function Ey(e,t){let n=(e.repoScores[t]?.closedWithoutMergeCount??0)+1;Cn(e,t,{closedWithoutMergeCount:n})}function xy(e,t){Cn(e,t,{signals:{hasHostileComments:!0}})}function Ry(e){return Object.values(e.repoScores).filter(t=>t.mergedPRCount>0).sort((t,n)=>n.mergedPRCount-t.mergedPRCount).map(t=>t.repo)}function Py(e){return Object.values(e.repoScores).filter(t=>t.mergedPRCount===0&&t.closedWithoutMergeCount===0).sort((t,n)=>n.score-t.score).map(t=>t.repo)}function Cy(e,t){let n=t??e.config.minRepoScoreThreshold;return Object.values(e.repoScores).filter(o=>o.score>=n).sort((o,r)=>r.score-o.score).map(o=>o.repo)}function Oy(e,t){let n=t??e.config.minRepoScoreThreshold,o=Date.now();return Object.values(e.repoScores).filter(r=>{if(r.score>n)return!1;let i=o-new Date(r.lastEvaluatedAt).getTime();return Number.isFinite(i)?i<=jE:(v(Ao,`Invalid lastEvaluatedAt for repo ${r.repo}: "${r.lastEvaluatedAt}", treating as stale`),!1)}).sort((r,i)=>r.score-i.score).map(r=>r.repo)}function wy(e){let t=new Map;for(let n of e){let o=Pe(n.url);if(!o){v(Ao,`Skipping PR with unparseable URL during reconciliation: "${n.url}"`);continue}let r=`${o.owner}/${o.repo}`;t.set(r,(t.get(r)??0)+1)}return t}function Iy(e,t,n){let o=Sy(e,wy(t),"mergedPRCount"),r=Sy(e,wy(n),"closedWithoutMergeCount");return o||r}function Sy(e,t,n){let o=!1;for(let[r,i]of t){let s=e.repoScores[r]?.[n]??0;i>s&&(E(Ao,`Reconciling ${r} ${n}: ${s} \u2192 ${i}`),Cn(e,r,{[n]:i}),o=!0)}return o}function Ay(e){let t=0,n=0,o=0;for(let s of Object.values(e.repoScores))Wt(s.stargazersCount,e.config.minStars??50)||(o++,t+=s.mergedPRCount,n+=s.closedWithoutMergeCount);let r=t+n,i=r>0?t/r*100:0;return{mergedPRs:t,closedPRs:n,activeIssues:0,trustedProjects:e.config.trustedProjects.length,mergeRate:i.toFixed(1)+"%",totalTracked:o,needsResponse:0}}var Ao,jE,Dy=b(()=>{"use strict";Dt();$e();Ue();Ao="scoring",jE=720*60*60*1e3});function K(){return jm||(jm=new ea),jm}var _t,Uy,ea,jm,On=b(()=>{"use strict";Dm();Dy();$e();he();Dm();_t="state",Uy=1e3,ea=class e{state;inMemoryOnly;lastLoadedMtimeMs=0;_batching=!1;_batchDirty=!1;constructor(t=!1){if(this.inMemoryOnly=t,t)this.state=Qs();else{let n=Am();this.state=n.state,this.lastLoadedMtimeMs=n.mtimeMs,this.tryReconcilePRCounts()}}tryReconcilePRCounts(){try{this.reconcilePRCounts()}catch(t){v(_t,`PR count reconciliation failed (will retry on next load): ${P(t)}`),E(_t,`Reconciliation error details: ${t instanceof Error?t.stack:String(t)}`)}}batch(t){if(this._batching){t();return}this._batching=!0,this._batchDirty=!1;try{t(),this._batchDirty&&this.save()}finally{this._batching=!1,this._batchDirty=!1}}autoSave(){if(this._batching){this._batchDirty=!0;return}this.save()}isSetupComplete(){return this.state.config.setupComplete===!0}markSetupComplete(){this.state.config.setupComplete=!0,this.state.config.setupCompletedAt=new Date().toISOString(),this.autoSave()}initializeWithDefaults(t){if(this.state.config.setupComplete){E(_t,`Setup already complete, skipping initializeWithDefaults for "${t}"`);return}this.batch(()=>{this.updateConfig({githubUsername:t}),this.markSetupComplete(),E(_t,`Initialized with defaults for user "${t}"`)})}save(){this.state.lastRunAt=new Date().toISOString(),!this.inMemoryOnly&&(this.lastLoadedMtimeMs=_y(this.state))}getState(){return this.state}reloadIfChanged(){if(this.inMemoryOnly)return!1;let t=$y(this.lastLoadedMtimeMs);return t?(this.state=t.state,this.lastLoadedMtimeMs=t.mtimeMs,this.tryReconcilePRCounts(),!0):!1}setLastDigest(t){this.state.lastDigest=t,this.state.lastDigestAt=t.generatedAt,this.autoSave()}setMonthlyMergedCounts(t){this.state.monthlyMergedCounts=t,this.autoSave()}setMonthlyClosedCounts(t){this.state.monthlyClosedCounts=t,this.autoSave()}setMonthlyOpenedCounts(t){this.state.monthlyOpenedCounts=t,this.autoSave()}setDailyActivityCounts(t){this.state.dailyActivityCounts=t,this.autoSave()}setLocalRepoCache(t){this.state.localRepoCache=t,this.autoSave()}getMergedPRs(){return this.state.mergedPRs??[]}addMergedPRs(t){if(t.length===0)return;this.state.mergedPRs||(this.state.mergedPRs=[]);let n=new Set(this.state.mergedPRs.map(r=>r.url)),o=t.filter(r=>!n.has(r.url));o.length!==0&&(this.state.mergedPRs.push(...o),this.state.mergedPRs.sort((r,i)=>i.mergedAt.localeCompare(r.mergedAt)),E(_t,`Added ${o.length} merged PRs (total: ${this.state.mergedPRs.length})`),this.autoSave())}getMergedPRWatermark(){return this.state.mergedPRs?.[0]?.mergedAt||void 0}getClosedPRs(){return this.state.closedPRs??[]}addClosedPRs(t){if(t.length===0)return;this.state.closedPRs||(this.state.closedPRs=[]);let n=new Set(this.state.closedPRs.map(r=>r.url)),o=t.filter(r=>!n.has(r.url));o.length!==0&&(this.state.closedPRs.push(...o),this.state.closedPRs.sort((r,i)=>i.closedAt.localeCompare(r.closedAt)),E(_t,`Added ${o.length} closed PRs (total: ${this.state.closedPRs.length})`),this.autoSave())}getClosedPRWatermark(){return this.state.closedPRs?.[0]?.closedAt||void 0}updateConfig(t){this.state.config={...this.state.config,...t},this.autoSave()}appendEvent(t,n){let o={id:`evt_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,type:t,at:new Date().toISOString(),data:n};this.state.events.push(o),this.state.events.length>Uy&&(this.state.events=this.state.events.slice(-Uy)),this.autoSave()}getEventsByType(t){return this.state.events.filter(n=>n.type===t)}getEventsInRange(t,n=new Date){return this.state.events.filter(o=>{let r=new Date(o.at);return r>=t&&r<=n})}addIssue(t){if(this.state.activeIssues.find(o=>o.url===t.url)){E(_t,`Issue ${t.url} already tracked`);return}this.state.activeIssues.push(t),E(_t,`Added issue: ${t.repo}#${t.number}`),this.autoSave()}addTrustedProject(t){this.state.config.trustedProjects.includes(t)||(this.state.config.trustedProjects.push(t),E(_t,`Added trusted project: ${t}`),this.autoSave())}static matchesExclusion(t,n,o){let r=t.toLowerCase();return!!(n.some(i=>i.toLowerCase()===r)||o?.some(i=>i.toLowerCase()===r.split("/")[0]))}cleanupExcludedData(t,n){let o=s=>e.matchesExclusion(s,t,n),r=this.state.config.trustedProjects.length;this.state.config.trustedProjects=this.state.config.trustedProjects.filter(s=>!o(s));let i=r-this.state.config.trustedProjects.length;i>0&&(E(_t,`Removed ${i} trusted project(s) for excluded repos/orgs`),this.autoSave())}getStarredRepos(){return this.state.config.starredRepos||[]}setStarredRepos(t){this.state.config.starredRepos=t,this.state.config.starredReposLastFetched=new Date().toISOString(),E(_t,`Updated starred repos: ${t.length} repositories`),this.autoSave()}isStarredReposStale(){let t=this.state.config.starredReposLastFetched;if(!t)return!0;let n=1440*60*1e3,o=new Date(t);return new Date().getTime()-o.getTime()>n}shelvePR(t){return this.state.config.shelvedPRUrls||(this.state.config.shelvedPRUrls=[]),this.state.config.shelvedPRUrls.includes(t)?!1:(this.state.config.shelvedPRUrls.push(t),this.autoSave(),!0)}unshelvePR(t){if(!this.state.config.shelvedPRUrls)return!1;let n=this.state.config.shelvedPRUrls.indexOf(t);return n===-1?!1:(this.state.config.shelvedPRUrls.splice(n,1),this.autoSave(),!0)}isPRShelved(t){return this.state.config.shelvedPRUrls?.includes(t)??!1}dismissIssue(t,n){return this.state.config.dismissedIssues||(this.state.config.dismissedIssues={}),t in this.state.config.dismissedIssues?!1:(this.state.config.dismissedIssues[t]=n,this.autoSave(),!0)}undismissIssue(t){return!this.state.config.dismissedIssues||!(t in this.state.config.dismissedIssues)?!1:(delete this.state.config.dismissedIssues[t],this.autoSave(),!0)}getIssueDismissedAt(t){return this.state.config.dismissedIssues?.[t]}setStatusOverride(t,n,o){this.state.config.statusOverrides||(this.state.config.statusOverrides={}),this.state.config.statusOverrides[t]={status:n,setAt:new Date().toISOString(),lastActivityAt:o},this.autoSave()}clearStatusOverride(t){return!this.state.config.statusOverrides||!(t in this.state.config.statusOverrides)?!1:(delete this.state.config.statusOverrides[t],this.autoSave(),!0)}getStatusOverride(t,n){let o=this.state.config.statusOverrides?.[t];if(o){if(n&&n>o.lastActivityAt){this.clearStatusOverride(t);return}return o}}getRepoScore(t){return ky(this.state,t)}updateRepoScore(t,n){Cn(this.state,t,n),this.autoSave()}incrementMergedCount(t){Ty(this.state,t),this.autoSave()}incrementClosedCount(t){Ey(this.state,t),this.autoSave()}markRepoHostile(t){xy(this.state,t),this.autoSave()}getReposWithMergedPRs(){return Ry(this.state)}getReposWithOpenPRs(){return Py(this.state)}getHighScoringRepos(t){return Cy(this.state,t)}getLowScoringRepos(t){return Oy(this.state,t)}getStats(){return Ay(this.state)}reconcilePRCounts(){let t=this.state.mergedPRs??[],n=this.state.closedPRs??[];if(t.length===0&&n.length===0)return;Iy(this.state,t,n)&&this.autoSave()}},jm=null});function mr(){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 Do=b(()=>{});function ta(e,t,n,o){if(typeof n!="function")throw new Error("method for before hook must be a function");return o||(o={}),Array.isArray(t)?t.reverse().reduce((r,i)=>ta.bind(null,e,i,r,o),n)():Promise.resolve().then(()=>e.registry[t]?e.registry[t].reduce((r,i)=>i.hook.bind(null,r,o),n)():n(o))}var jy=b(()=>{});function zy(e,t,n,o){let r=o;e.registry[n]||(e.registry[n]=[]),t==="before"&&(o=(i,s)=>Promise.resolve().then(r.bind(null,s)).then(i.bind(null,s))),t==="after"&&(o=(i,s)=>{let a;return Promise.resolve().then(i.bind(null,s)).then(c=>(a=c,r(a,s))).then(()=>a)}),t==="error"&&(o=(i,s)=>Promise.resolve().then(i.bind(null,s)).catch(a=>r(a,s))),e.registry[n].push({hook:o,orig:r})}var Gy=b(()=>{});function Fy(e,t,n){if(!e.registry[t])return;let o=e.registry[t].map(r=>r.orig).indexOf(n);o!==-1&&e.registry[t].splice(o,1)}var Ly=b(()=>{});function Zy(e,t,n){let o=My(Fy,null).apply(null,n?[t,n]:[t]);e.api={remove:o},e.remove=o,["before","error","after","wrap"].forEach(r=>{let i=n?[t,r,n]:[t,r];e[r]=e.api[r]=My(zy,null).apply(null,i)})}function LE(){let e=Symbol("Singular"),t={registry:{}},n=ta.bind(null,t,e);return Zy(n,t,e),n}function NE(){let e={registry:{}},t=ta.bind(null,e);return Zy(t,e),t}var Ny,My,Vy,Hy=b(()=>{jy();Gy();Ly();Ny=Function.bind,My=Ny.bind(Ny);Vy={Singular:LE,Collection:NE}});function HE(e){return e?Object.keys(e).reduce((t,n)=>(t[n.toLowerCase()]=e[n],t),{}):{}}function qE(e){if(typeof e!="object"||e===null||Object.prototype.toString.call(e)!=="[object Object]")return!1;let t=Object.getPrototypeOf(e);if(t===null)return!0;let n=Object.prototype.hasOwnProperty.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Function.prototype.call(n)===Function.prototype.call(e)}function Wy(e,t){let n=Object.assign({},e);return Object.keys(t).forEach(o=>{qE(t[o])?o in e?n[o]=Wy(e[o],t[o]):Object.assign(n,{[o]:t[o]}):Object.assign(n,{[o]:t[o]})}),n}function qy(e){for(let t in e)e[t]===void 0&&delete e[t];return e}function Gm(e,t,n){if(typeof t=="string"){let[r,i]=t.split(" ");n=Object.assign(i?{method:r,url:i}:{url:r},n)}else n=Object.assign({},t);n.headers=HE(n.headers),qy(n),qy(n.headers);let o=Wy(e||{},n);return n.url==="/graphql"&&(e&&e.mediaType.previews?.length&&(o.mediaType.previews=e.mediaType.previews.filter(r=>!o.mediaType.previews.includes(r)).concat(o.mediaType.previews)),o.mediaType.previews=(o.mediaType.previews||[]).map(r=>r.replace(/-preview/,""))),o}function BE(e,t){let n=/\?/.test(e)?"&":"?",o=Object.keys(t);return o.length===0?e:e+n+o.map(r=>r==="q"?"q="+t.q.split("+").map(encodeURIComponent).join("+"):`${r}=${encodeURIComponent(t[r])}`).join("&")}function JE(e){return e.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g,"").split(/,/)}function KE(e){let t=e.match(WE);return t?t.map(JE).reduce((n,o)=>n.concat(o),[]):[]}function By(e,t){let n={__proto__:null};for(let o of Object.keys(e))t.indexOf(o)===-1&&(n[o]=e[o]);return n}function Jy(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map(function(t){return/%[0-9A-Fa-f]/.test(t)||(t=encodeURI(t).replace(/%5B/g,"[").replace(/%5D/g,"]")),t}).join("")}function An(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}function Uo(e,t,n){return t=e==="+"||e==="#"?Jy(t):An(t),n?An(n)+"="+t:t}function In(e){return e!=null}function zm(e){return e===";"||e==="&"||e==="?"}function XE(e,t,n,o){var r=e[n],i=[];if(In(r)&&r!=="")if(typeof r=="string"||typeof r=="number"||typeof r=="bigint"||typeof r=="boolean")r=r.toString(),o&&o!=="*"&&(r=r.substring(0,parseInt(o,10))),i.push(Uo(t,r,zm(t)?n:""));else if(o==="*")Array.isArray(r)?r.filter(In).forEach(function(s){i.push(Uo(t,s,zm(t)?n:""))}):Object.keys(r).forEach(function(s){In(r[s])&&i.push(Uo(t,r[s],s))});else{let s=[];Array.isArray(r)?r.filter(In).forEach(function(a){s.push(Uo(t,a))}):Object.keys(r).forEach(function(a){In(r[a])&&(s.push(An(a)),s.push(Uo(t,r[a].toString())))}),zm(t)?i.push(An(n)+"="+s.join(",")):s.length!==0&&i.push(s.join(","))}else t===";"?In(r)&&i.push(An(n)):r===""&&(t==="&"||t==="?")?i.push(An(n)+"="):r===""&&i.push("");return i}function YE(e){return{expand:QE.bind(null,e)}}function QE(e,t){var n=["+","#",".","/",";","?","&"];return e=e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(o,r,i){if(r){let a="",c=[];if(n.indexOf(r.charAt(0))!==-1&&(a=r.charAt(0),r=r.substr(1)),r.split(/,/g).forEach(function(u){var l=/([^:\*]*)(?::(\d+)|(\*))?/.exec(u);c.push(XE(t,a,l[1],l[2]||l[3]))}),a&&a!=="+"){var s=",";return a==="?"?s="&":a!=="#"&&(s=a),(c.length!==0?a:"")+c.join(s)}else return c.join(",")}else return Jy(i)}),e==="/"?e:e.replace(/\/$/,"")}function Ky(e){let t=e.method.toUpperCase(),n=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),o=Object.assign({},e.headers),r,i=By(e,["method","baseUrl","url","headers","request","mediaType"]),s=KE(n);n=YE(n).expand(i),/^http/.test(n)||(n=e.baseUrl+n);let a=Object.keys(e).filter(l=>s.includes(l)).concat("baseUrl"),c=By(i,a);if(!/application\/octet-stream/i.test(o.accept)&&(e.mediaType.format&&(o.accept=o.accept.split(/,/).map(l=>l.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`)).join(",")),n.endsWith("/graphql")&&e.mediaType.previews?.length)){let l=o.accept.match(/(?<![\w-])[\w-]+(?=-preview)/g)||[];o.accept=l.concat(e.mediaType.previews).map(d=>{let p=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${d}-preview${p}`}).join(",")}return["GET","HEAD"].includes(t)?n=BE(n,c):"data"in c?r=c.data:Object.keys(c).length&&(r=c),!o["content-type"]&&typeof r<"u"&&(o["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(t)&&typeof r>"u"&&(r=""),Object.assign({method:t,url:n,headers:o},typeof r<"u"?{body:r}:null,e.request?{request:e.request}:null)}function ex(e,t,n){return Ky(Gm(e,t,n))}function Xy(e,t){let n=Gm(e,t),o=ex.bind(null,n);return Object.assign(o,{DEFAULTS:n,defaults:Xy.bind(null,n),merge:Gm.bind(null,n),parse:Ky})}var ME,ZE,VE,WE,Yy,Qy=b(()=>{Do();ME="0.0.0-development",ZE=`octokit-endpoint.js/${ME} ${mr()}`,VE={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":ZE},mediaType:{format:""}};WE=/\{[^{}}]+\}/g;Yy=Xy(null,VE)});var n_=Gt((zA,jo)=>{"use strict";var oa=function(){};oa.prototype=Object.create(null);var ra=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,na=/\\([\v\u0020-\u00ff])/gu,e_=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,Or={type:"",parameters:new oa};Object.freeze(Or.parameters);Object.freeze(Or);function t_(e){if(typeof e!="string")throw new TypeError("argument header is required and must be a string");let t=e.indexOf(";"),n=t!==-1?e.slice(0,t).trim():e.trim();if(e_.test(n)===!1)throw new TypeError("invalid media type");let o={type:n.toLowerCase(),parameters:new oa};if(t===-1)return o;let r,i,s;for(ra.lastIndex=t;i=ra.exec(e);){if(i.index!==t)throw new TypeError("invalid parameter format");t+=i[0].length,r=i[1].toLowerCase(),s=i[2],s[0]==='"'&&(s=s.slice(1,s.length-1),na.test(s)&&(s=s.replace(na,"$1"))),o.parameters[r]=s}if(t!==e.length)throw new TypeError("invalid parameter format");return o}function r_(e){if(typeof e!="string")return Or;let t=e.indexOf(";"),n=t!==-1?e.slice(0,t).trim():e.trim();if(e_.test(n)===!1)return Or;let o={type:n.toLowerCase(),parameters:new oa};if(t===-1)return o;let r,i,s;for(ra.lastIndex=t;i=ra.exec(e);){if(i.index!==t)return Or;t+=i[0].length,r=i[1].toLowerCase(),s=i[2],s[0]==='"'&&(s=s.slice(1,s.length-1),na.test(s)&&(s=s.replace(na,"$1"))),o.parameters[r]=s}return t!==e.length?Or:o}jo.exports.default={parse:t_,safeParse:r_};jo.exports.parse=t_;jo.exports.safeParse=r_;jo.exports.defaultContentType=Or});var tx,s_,Fm,o_,rx,nx,ox,a_,ix,sx,ax,c_,i_,cx,ux,u_,l_=b(()=>{tx=/^-?\d+$/,s_=/^-?\d+n+$/,Fm=JSON.stringify,o_=JSON.parse,rx=/^-?\d+n$/,nx=/([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,ox=/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,a_=(e,t,n)=>"rawJSON"in JSON?Fm(e,(s,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof t=="function"?t(s,a):(Array.isArray(t)&&t.includes(s),a),n):e?Fm(e,(s,a)=>typeof a=="string"&&!!a.match(s_)||typeof a=="bigint"?a.toString()+"n":typeof t=="function"?t(s,a):(Array.isArray(t)&&t.includes(s),a),n).replace(nx,"$1$2$3").replace(ox,"$1$2$3"):Fm(e,t,n),ix=()=>JSON.parse("1",(e,t,n)=>!!n&&n.source==="1"),sx=(e,t,n,o)=>typeof t=="string"&&t.match(rx)?BigInt(t.slice(0,-1)):typeof t=="string"&&t.match(s_)?t.slice(0,-1):typeof o!="function"?t:o(e,t,n),ax=(e,t)=>JSON.parse(e,(n,o,r)=>{let i=typeof o=="number"&&(o>Number.MAX_SAFE_INTEGER||o<Number.MIN_SAFE_INTEGER),s=r&&tx.test(r.source);return i&&s?BigInt(r.source):typeof t!="function"?o:t(n,o,r)}),c_=Number.MAX_SAFE_INTEGER.toString(),i_=c_.length,cx=/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g,ux=/^"-?\d+n+"$/,u_=(e,t)=>{if(!e)return o_(e,t);if(ix())return ax(e,t);let n=e.replace(cx,(o,r,i,s)=>{let a=o[0]==='"';if(a&&!!o.match(ux))return o.substring(0,o.length-1)+'n"';let u=i||s,l=r&&(r.length<i_||r.length===i_&&r<=c_);return a||u||l?o:'"'+o+'n"'});return o_(n,(o,r,i)=>sx(o,r,i,t))}});var Ir,d_=b(()=>{Ir=class extends Error{name;status;request;response;constructor(t,n,o){super(t,{cause:o.cause}),this.name="HttpError",this.status=Number.parseInt(n),Number.isNaN(this.status)&&(this.status=0);"response"in o&&(this.response=o.response);let r=Object.assign({},o.request);o.request.headers.authorization&&(r.headers=Object.assign({},o.request.headers,{authorization:o.request.headers.authorization.replace(/(?<! ) .*$/," [REDACTED]")})),r.url=r.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=r}}});function px(e){if(typeof e!="object"||e===null||Object.prototype.toString.call(e)!=="[object Object]")return!1;let t=Object.getPrototypeOf(e);if(t===null)return!0;let n=Object.prototype.hasOwnProperty.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Function.prototype.call(n)===Function.prototype.call(e)}async function m_(e){let t=e.request?.fetch||globalThis.fetch;if(!t)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 n=e.request?.log||console,o=e.request?.parseSuccessResponseBody!==!1,r=px(e.body)||Array.isArray(e.body)?a_(e.body):e.body,i=Object.fromEntries(Object.entries(e.headers).map(([d,p])=>[d,String(p)])),s;try{s=await t(e.url,{method:e.method,body:r,redirect:e.request?.redirect,headers:i,signal:e.request?.signal,...e.body&&{duplex:"half"}})}catch(d){let p="Unknown Error";if(d instanceof Error){if(d.name==="AbortError")throw d.status=500,d;p=d.message,d.name==="TypeError"&&"cause"in d&&(d.cause instanceof Error?p=d.cause.message:typeof d.cause=="string"&&(p=d.cause))}let g=new Ir(p,500,{request:e});throw g.cause=d,g}let a=s.status,c=s.url,u={};for(let[d,p]of s.headers)u[d]=p;let l={url:c,status:a,headers:u,data:""};if("deprecation"in u){let d=u.link&&u.link.match(/<([^<>]+)>; rel="deprecation"/),p=d&&d.pop();n.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${u.sunset}${p?`. See ${p}`:""}`)}if(a===204||a===205)return l;if(e.method==="HEAD"){if(a<400)return l;throw new Ir(s.statusText,a,{response:l,request:e})}if(a===304)throw l.data=await Lm(s),new Ir("Not modified",a,{response:l,request:e});if(a>=400)throw l.data=await Lm(s),new Ir(gx(l.data),a,{response:l,request:e});return l.data=o?await Lm(s):s.body,l}async function Lm(e){let t=e.headers.get("content-type");if(!t)return e.text().catch(p_);let n=(0,g_.safeParse)(t);if(mx(n)){let o="";try{return o=await e.text(),u_(o)}catch{return o}}else return n.type.startsWith("text/")||n.parameters.charset?.toLowerCase()==="utf-8"?e.text().catch(p_):e.arrayBuffer().catch(()=>new ArrayBuffer(0))}function mx(e){return e.type==="application/json"||e.type==="application/scim+json"}function gx(e){if(typeof e=="string")return e;if(e instanceof ArrayBuffer)return"Unknown error";if("message"in e){let t="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(n=>JSON.stringify(n)).join(", ")}${t}`:`${e.message}${t}`}return`Unknown error: ${JSON.stringify(e)}`}function Nm(e,t){let n=e.defaults(t);return Object.assign(function(r,i){let s=n.merge(r,i);if(!s.request||!s.request.hook)return m_(n.parse(s));let a=(c,u)=>m_(n.parse(n.merge(c,u)));return Object.assign(a,{endpoint:n,defaults:Nm.bind(null,n)}),s.request.hook(a,s)},{endpoint:n,defaults:Nm.bind(null,n)})}var g_,lx,dx,p_,zo,Mm=b(()=>{Qy();Do();g_=re(n_(),1);l_();d_();lx="10.0.8",dx={headers:{"user-agent":`octokit-request.js/${lx} ${mr()}`}};p_=()=>"";zo=Nm(Yy,dx);});function hx(e){return`Request failed due to following response errors:
|
|
72
|
+
The gh CLI is recommended - install from https://cli.github.com`);return e}function gy(){it=null,Ro=!1}async function Js(){if(it)return it;if(Ro)return null;if(Ro=!0,process.env.GITHUB_TOKEN)return it=process.env.GITHUB_TOKEN,it;try{let e=await new Promise((t,n)=>{(0,Po.execFile)("gh",["auth","token"],{encoding:"utf-8",timeout:2e3},(o,r)=>{o?n(o):t(r.trim())})});if(e&&e.length>0)return it=e,E(xr,"Using GitHub token from gh CLI (async)"),it}catch(e){E(xr,"gh auth token failed (CLI unavailable or not authenticated)",e)}return null}function Ks(){let e=Ht.join(Im.homedir(),".oss-autopilot","state.json");return ht.existsSync(e)}async function Xs(){try{let e=await new Promise((t,n)=>{(0,Po.execFile)("gh",["api","user","--jq",".login"],{encoding:"utf-8",timeout:5e3},(o,r)=>{o?n(o):t(r.trim())})});return e&&OE.test(e)?(E(xr,`Detected GitHub username: ${e}`),e):(E(xr,`gh api user returned invalid username: "${e}"`),null)}catch(e){return E(xr,"detectGitHubUsername failed",e),null}}var ht,Ht,Im,Po,En,xr,it,Ro,PE,CE,OE,Ue=b(()=>{"use strict";ht=re(require("fs"),1),Ht=re(require("path"),1),Im=re(require("os"),1),Po=require("child_process");he();$e();En=5;xr="utils",it=null,Ro=!1;PE=/^[a-zA-Z0-9_-]+$/,CE=/^[a-zA-Z0-9_.-]+$/;OE=/^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$/});function AE(e){try{let t=JSON.parse(J.readFileSync(e,"utf-8"));return Date.now()-t.timestamp>IE}catch(t){return E(W,"Lock file unreadable or invalid JSON, treating as stale",t),!0}}function vy(e){let t=JSON.stringify({pid:process.pid,timestamp:Date.now()});try{J.writeFileSync(e,t,{flag:"wx"});return}catch(n){E(W,"Lock file already exists, checking staleness",n)}if(!AE(e))throw new Error("State file is locked by another process");try{J.unlinkSync(e)}catch(n){E(W,"Stale lock already removed by another process",n)}try{J.writeFileSync(e,t,{flag:"wx"})}catch(n){throw E(W,"Lock re-acquire failed (race condition)",n),new Error("State file is locked by another process",{cause:n})}}function by(e){try{JSON.parse(J.readFileSync(e,"utf-8")).pid===process.pid&&J.unlinkSync(e)}catch(t){E(W,"Lock file already removed or unreadable during release",t)}}function Oo(e,t,n){let o=e+".tmp";J.writeFileSync(o,t,{mode:n??384}),J.renameSync(o,e),n!==void 0&&J.chmodSync(e,n)}function yy(e){E(W,"Migrating state from v1 to v2 (fresh GitHub fetching)...");let t=e.mergedPRs||[],n=e.closedPRs||[],o={...e.repoScores||{}};for(let i of[...t,...n])o[i.repo]||(o[i.repo]={repo:i.repo,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}});let r={version:2,activeIssues:e.activeIssues||[],repoScores:o,config:e.config,events:e.events||[],lastRunAt:new Date().toISOString()};return E(W,`Migration complete. Preserved ${Object.keys(o).length} repo scores.`),r}function Qs(){return Tn.parse({version:2})}function DE(){let e=pr();if(J.existsSync(e)||!J.existsSync(Co))return!1;E(W,"Migrating state from ./data/ to ~/.oss-autopilot/...");try{if(vt(),J.copyFileSync(Co,e),E(W,`Migrated state file to ${e}`),J.existsSync(Cr)){let n=Rr(),o=J.readdirSync(Cr).filter(r=>r.startsWith("state-")&&r.endsWith(".json"));for(let r of o){let i=yt.join(Cr,r),s=yt.join(n,r);J.copyFileSync(i,s)}E(W,`Migrated ${o.length} backup files`)}if(J.unlinkSync(Co),E(W,"Removed legacy state file"),J.existsSync(Cr)){let n=J.readdirSync(Cr);for(let o of n)J.unlinkSync(yt.join(Cr,o));J.rmdirSync(Cr)}let t=yt.dirname(Co);return J.existsSync(t)&&J.readdirSync(t).length===0&&(J.rmdirSync(t),E(W,"Removed empty legacy data directory")),E(W,"Migration complete!"),!0}catch(t){if(v(W,`Failed to migrate state: ${P(t)}`),J.existsSync(e)&&J.existsSync(Co))try{J.unlinkSync(e),E(W,"Cleaned up partial migration - removed incomplete new state file")}catch(n){v(W,"Could not clean up partial migration file"),E(W,"Partial migration cleanup failed",n)}return v(W,"To resolve this issue:"),v(W," 1. Ensure you have write permissions to ~/.oss-autopilot/"),v(W," 2. Check available disk space"),v(W," 3. Manually copy ./data/state.json to ~/.oss-autopilot/state.json"),v(W," 4. Or delete ./data/state.json to start fresh"),!1}}function hy(){let e=Rr();if(!J.existsSync(e))return null;let t=J.readdirSync(e).filter(n=>n.startsWith("state-")&&n.endsWith(".json")).sort().reverse();for(let n of t){let o=yt.join(e,n);try{let r=J.readFileSync(o,"utf-8"),i=JSON.parse(r);typeof i=="object"&&i!==null&&i.version===1&&(i=yy(i));let s=Tn.safeParse(i);if(s.success){let c=s.data;E(W,`Successfully restored state from backup: ${n}`);let u=Object.keys(c.repoScores).length;E(W,`Restored state v${c.version}: ${u} repo scores`);let l=pr();return Oo(l,JSON.stringify(c,null,2),384),E(W,"Restored backup written to main state file"),c}let a=s.error.issues.map(c=>`${c.path.join(".")}: ${c.message}`).join("; ");v(W,`Backup ${n} failed schema validation: ${a}`),E(W,`Backup ${n} full validation errors:`,s.error.issues)}catch(r){v(W,`Backup ${n} is corrupted, trying next...`),E(W,`Backup ${n} parse failed`,r)}}return null}function Am(){DE();let e=pr();try{if(J.existsSync(e)){let t=J.readFileSync(e,"utf-8"),n=JSON.parse(t),o=!1;typeof n=="object"&&n!==null&&n.version===1&&(n=yy(n),o=!0);let r=Tn.safeParse(n);if(!r.success){let c=r.error.issues.map(l=>`${l.path.join(".")}: ${l.message}`).join("; ");v(W,`Invalid state file structure: ${c}`),v(W,"Attempting to restore from backup..."),E(W,"Full validation errors:",r.error.issues);try{let l=e+".rejected-"+Date.now();J.copyFileSync(e,l),v(W,`Previous state preserved at: ${l}`)}catch(l){v(W,`Could not preserve rejected state file: ${P(l)}`)}let u=hy();if(u){let l=Ys(e);return{state:u,mtimeMs:l}}return v(W,"No valid backup found, starting fresh"),{state:Qs(),mtimeMs:0}}o&&(Oo(e,JSON.stringify(r.data,null,2),384),E(W,"Migrated and validated state saved"));let i=r.data;try{let c=!1;if(i.config.dismissedIssues){let u=/\/pull\/\d+$/;for(let l of Object.keys(i.config.dismissedIssues))u.test(l)&&(delete i.config.dismissedIssues[l],c=!0)}c&&(Oo(e,JSON.stringify(i,null,2),384),v(W,"Cleaned up dismissed PR URLs from persisted state"))}catch(c){v(W,`Failed to clean up removed features from state: ${P(c)}`)}let s=Ys(e),a=Object.keys(i.repoScores).length;return E(W,`Loaded state v${i.version}: ${a} repo scores tracked`),{state:i,mtimeMs:s}}}catch(t){v(W,"Error loading state:",t),v(W,"Attempting to restore from backup...");let n=hy();if(n){let o=Ys(e);return{state:n,mtimeMs:o}}v(W,"No valid backup found, starting fresh")}return E(W,"No existing state found, initializing..."),{state:Qs(),mtimeMs:0}}function Ys(e){try{return J.statSync(e).mtimeMs}catch(t){return E(W,`Could not read state file mtime (reload detection will always trigger): ${P(t)}`),0}}function UE(){let e=Rr();try{let t=J.readdirSync(e).filter(n=>n.startsWith("state-")).sort().reverse();for(let n of t.slice(10))try{J.unlinkSync(yt.join(e,n))}catch(o){v(W,`Could not delete old backup ${n}:`,P(o))}}catch(t){v(W,"Could not clean up backups:",P(t))}}function _y(e){let t=pr(),n=t+".lock",o=Rr();vy(n);try{try{if(J.existsSync(t)){let i=new Date().toISOString().replace(/[:.]/g,"-"),s=Math.random().toString(36).slice(2,8).padEnd(6,"0"),a=yt.join(o,`state-${i}-${s}.json`);J.copyFileSync(t,a),J.chmodSync(a,384),UE()}}catch(i){v(W,`Could not create backup before save: ${P(i)}`)}Oo(t,JSON.stringify(e,null,2),384);let r=Ys(t);return E(W,"State saved successfully"),r}finally{by(n)}}function $y(e){try{let t=pr();if(J.statSync(t).mtimeMs===e)return null;let o=Am();try{o.mtimeMs=J.statSync(t).mtimeMs}catch(r){E(W,"Could not re-read mtime after reload (will retry next cycle)",r)}return o}catch(t){return v(W,`Failed to reload state from disk: ${P(t)}`),null}}var J,yt,W,IE,Co,Cr,Dm=b(()=>{"use strict";J=re(require("fs"),1),yt=re(require("path"),1);xm();Ue();he();$e();W="state",IE=3e4,Co=yt.join(process.cwd(),"data","state.json"),Cr=yt.join(process.cwd(),"data","backups")});function Wt(e,t){return e===void 0||e<t}var Rn,gA,Um,Pn,Io,Dt=b(()=>{"use strict";xm();Rn=qs.parse({}),gA=Tn.parse({version:2}),Um=Tm.options,Pn=Em.options,Io={beginner:["good first issue","help wanted","easy","up-for-grabs","first-timers-only","beginner"],intermediate:["enhancement","feature","feature-request","contributions welcome"],advanced:["proposal","RFC","accepted","design"]}});function zE(e){return{repo:e,score:5,mergedPRCount:0,closedWithoutMergeCount:0,avgResponseDays:null,lastEvaluatedAt:new Date().toISOString(),signals:{hasActiveMaintainers:!0,isResponsive:!1,hasHostileComments:!1}}}function GE(e){let t=5;if(e.mergedPRCount>0){let o=Math.min(Math.round(Math.log2(e.mergedPRCount+1)*2),5);t+=o}let n=Math.min(e.closedWithoutMergeCount,3);if(t-=n,e.lastMergedAt){let o=new Date(e.lastMergedAt);isNaN(o.getTime())?v(Ao,`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))}function ky(e,t){return e.repoScores[t]}function Cn(e,t,n){e.repoScores[t]||(e.repoScores[t]=zE(t));let o=e.repoScores[t];n.mergedPRCount!==void 0&&(o.mergedPRCount=n.mergedPRCount),n.closedWithoutMergeCount!==void 0&&(o.closedWithoutMergeCount=n.closedWithoutMergeCount),n.avgResponseDays!==void 0&&(o.avgResponseDays=n.avgResponseDays),n.lastMergedAt!==void 0&&(o.lastMergedAt=n.lastMergedAt),n.stargazersCount!==void 0&&(o.stargazersCount=n.stargazersCount),n.language!==void 0&&(o.language=n.language),n.signals&&(o.signals={...o.signals,...n.signals}),o.score=GE(o),o.lastEvaluatedAt=new Date().toISOString(),E(Ao,`Updated repo score for ${t}: ${o.score}/10`)}function Ty(e,t){let n=(e.repoScores[t]?.mergedPRCount??0)+1;Cn(e,t,{mergedPRCount:n,lastMergedAt:new Date().toISOString()})}function Ey(e,t){let n=(e.repoScores[t]?.closedWithoutMergeCount??0)+1;Cn(e,t,{closedWithoutMergeCount:n})}function xy(e,t){Cn(e,t,{signals:{hasHostileComments:!0}})}function Ry(e){return Object.values(e.repoScores).filter(t=>t.mergedPRCount>0).sort((t,n)=>n.mergedPRCount-t.mergedPRCount).map(t=>t.repo)}function Py(e){return Object.values(e.repoScores).filter(t=>t.mergedPRCount===0&&t.closedWithoutMergeCount===0).sort((t,n)=>n.score-t.score).map(t=>t.repo)}function Cy(e,t){let n=t??e.config.minRepoScoreThreshold;return Object.values(e.repoScores).filter(o=>o.score>=n).sort((o,r)=>r.score-o.score).map(o=>o.repo)}function Oy(e,t){let n=t??e.config.minRepoScoreThreshold,o=Date.now();return Object.values(e.repoScores).filter(r=>{if(r.score>n)return!1;let i=o-new Date(r.lastEvaluatedAt).getTime();return Number.isFinite(i)?i<=jE:(v(Ao,`Invalid lastEvaluatedAt for repo ${r.repo}: "${r.lastEvaluatedAt}", treating as stale`),!1)}).sort((r,i)=>r.score-i.score).map(r=>r.repo)}function wy(e){let t=new Map;for(let n of e){let o=Pe(n.url);if(!o){v(Ao,`Skipping PR with unparseable URL during reconciliation: "${n.url}"`);continue}let r=`${o.owner}/${o.repo}`;t.set(r,(t.get(r)??0)+1)}return t}function Iy(e,t,n){let o=Sy(e,wy(t),"mergedPRCount"),r=Sy(e,wy(n),"closedWithoutMergeCount");return o||r}function Sy(e,t,n){let o=!1;for(let[r,i]of t){let s=e.repoScores[r]?.[n]??0;i>s&&(E(Ao,`Reconciling ${r} ${n}: ${s} \u2192 ${i}`),Cn(e,r,{[n]:i}),o=!0)}return o}function Ay(e){let t=0,n=0,o=0;for(let s of Object.values(e.repoScores))Wt(s.stargazersCount,e.config.minStars??50)||(o++,t+=s.mergedPRCount,n+=s.closedWithoutMergeCount);let r=t+n,i=r>0?t/r*100:0;return{mergedPRs:t,closedPRs:n,activeIssues:0,trustedProjects:e.config.trustedProjects.length,mergeRate:i.toFixed(1)+"%",totalTracked:o,needsResponse:0}}var Ao,jE,Dy=b(()=>{"use strict";Dt();$e();Ue();Ao="scoring",jE=720*60*60*1e3});function K(){return jm||(jm=new ea),jm}var _t,Uy,ea,jm,On=b(()=>{"use strict";Dm();Dy();$e();he();Dm();_t="state",Uy=1e3,ea=class e{state;inMemoryOnly;lastLoadedMtimeMs=0;_batching=!1;_batchDirty=!1;constructor(t=!1){if(this.inMemoryOnly=t,t)this.state=Qs();else{let n=Am();this.state=n.state,this.lastLoadedMtimeMs=n.mtimeMs,this.tryReconcilePRCounts()}}tryReconcilePRCounts(){try{this.reconcilePRCounts()}catch(t){v(_t,`PR count reconciliation failed (will retry on next load): ${P(t)}`),E(_t,`Reconciliation error details: ${t instanceof Error?t.stack:String(t)}`)}}batch(t){if(this._batching){t();return}this._batching=!0,this._batchDirty=!1;try{t(),this._batchDirty&&this.save()}finally{this._batching=!1,this._batchDirty=!1}}autoSave(){if(this._batching){this._batchDirty=!0;return}this.save()}isSetupComplete(){return this.state.config.setupComplete===!0}markSetupComplete(){this.state.config.setupComplete=!0,this.state.config.setupCompletedAt=new Date().toISOString(),this.autoSave()}initializeWithDefaults(t){if(this.state.config.setupComplete){E(_t,`Setup already complete, skipping initializeWithDefaults for "${t}"`);return}this.batch(()=>{this.updateConfig({githubUsername:t}),this.markSetupComplete(),E(_t,`Initialized with defaults for user "${t}"`)})}save(){this.state.lastRunAt=new Date().toISOString(),!this.inMemoryOnly&&(this.lastLoadedMtimeMs=_y(this.state))}getState(){return this.state}reloadIfChanged(){if(this.inMemoryOnly)return!1;let t=$y(this.lastLoadedMtimeMs);return t?(this.state=t.state,this.lastLoadedMtimeMs=t.mtimeMs,this.tryReconcilePRCounts(),!0):!1}setLastDigest(t){this.state.lastDigest=t,this.state.lastDigestAt=t.generatedAt,this.autoSave()}setMonthlyMergedCounts(t){this.state.monthlyMergedCounts=t,this.autoSave()}setMonthlyClosedCounts(t){this.state.monthlyClosedCounts=t,this.autoSave()}setMonthlyOpenedCounts(t){this.state.monthlyOpenedCounts=t,this.autoSave()}setDailyActivityCounts(t){this.state.dailyActivityCounts=t,this.autoSave()}setLocalRepoCache(t){this.state.localRepoCache=t,this.autoSave()}getMergedPRs(){return this.state.mergedPRs??[]}addMergedPRs(t){if(t.length===0)return;this.state.mergedPRs||(this.state.mergedPRs=[]);let n=new Set(this.state.mergedPRs.map(r=>r.url)),o=t.filter(r=>!n.has(r.url));o.length!==0&&(this.state.mergedPRs.push(...o),this.state.mergedPRs.sort((r,i)=>i.mergedAt.localeCompare(r.mergedAt)),E(_t,`Added ${o.length} merged PRs (total: ${this.state.mergedPRs.length})`),this.autoSave())}getMergedPRWatermark(){return this.state.mergedPRs?.[0]?.mergedAt||void 0}getClosedPRs(){return this.state.closedPRs??[]}addClosedPRs(t){if(t.length===0)return;this.state.closedPRs||(this.state.closedPRs=[]);let n=new Set(this.state.closedPRs.map(r=>r.url)),o=t.filter(r=>!n.has(r.url));o.length!==0&&(this.state.closedPRs.push(...o),this.state.closedPRs.sort((r,i)=>i.closedAt.localeCompare(r.closedAt)),E(_t,`Added ${o.length} closed PRs (total: ${this.state.closedPRs.length})`),this.autoSave())}getClosedPRWatermark(){return this.state.closedPRs?.[0]?.closedAt||void 0}updateConfig(t){this.state.config={...this.state.config,...t},this.autoSave()}appendEvent(t,n){let o={id:`evt_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,type:t,at:new Date().toISOString(),data:n};this.state.events.push(o),this.state.events.length>Uy&&(this.state.events=this.state.events.slice(-Uy)),this.autoSave()}getEventsByType(t){return this.state.events.filter(n=>n.type===t)}getEventsInRange(t,n=new Date){return this.state.events.filter(o=>{let r=new Date(o.at);return r>=t&&r<=n})}addIssue(t){if(this.state.activeIssues.find(o=>o.url===t.url)){E(_t,`Issue ${t.url} already tracked`);return}this.state.activeIssues.push(t),E(_t,`Added issue: ${t.repo}#${t.number}`),this.autoSave()}addTrustedProject(t){this.state.config.trustedProjects.includes(t)||(this.state.config.trustedProjects.push(t),E(_t,`Added trusted project: ${t}`),this.autoSave())}static matchesExclusion(t,n,o){let r=t.toLowerCase();return!!(n.some(i=>i.toLowerCase()===r)||o?.some(i=>i.toLowerCase()===r.split("/")[0]))}cleanupExcludedData(t,n){let o=s=>e.matchesExclusion(s,t,n),r=this.state.config.trustedProjects.length;this.state.config.trustedProjects=this.state.config.trustedProjects.filter(s=>!o(s));let i=r-this.state.config.trustedProjects.length;i>0&&(E(_t,`Removed ${i} trusted project(s) for excluded repos/orgs`),this.autoSave())}getStarredRepos(){return this.state.config.starredRepos||[]}setStarredRepos(t){this.state.config.starredRepos=t,this.state.config.starredReposLastFetched=new Date().toISOString(),E(_t,`Updated starred repos: ${t.length} repositories`),this.autoSave()}isStarredReposStale(){let t=this.state.config.starredReposLastFetched;if(!t)return!0;let n=1440*60*1e3,o=new Date(t);return new Date().getTime()-o.getTime()>n}shelvePR(t){return this.state.config.shelvedPRUrls||(this.state.config.shelvedPRUrls=[]),this.state.config.shelvedPRUrls.includes(t)?!1:(this.state.config.shelvedPRUrls.push(t),this.autoSave(),!0)}unshelvePR(t){if(!this.state.config.shelvedPRUrls)return!1;let n=this.state.config.shelvedPRUrls.indexOf(t);return n===-1?!1:(this.state.config.shelvedPRUrls.splice(n,1),this.autoSave(),!0)}isPRShelved(t){return this.state.config.shelvedPRUrls?.includes(t)??!1}dismissIssue(t,n){return this.state.config.dismissedIssues||(this.state.config.dismissedIssues={}),t in this.state.config.dismissedIssues?!1:(this.state.config.dismissedIssues[t]=n,this.autoSave(),!0)}undismissIssue(t){return!this.state.config.dismissedIssues||!(t in this.state.config.dismissedIssues)?!1:(delete this.state.config.dismissedIssues[t],this.autoSave(),!0)}getIssueDismissedAt(t){return this.state.config.dismissedIssues?.[t]}setStatusOverride(t,n,o){this.state.config.statusOverrides||(this.state.config.statusOverrides={}),this.state.config.statusOverrides[t]={status:n,setAt:new Date().toISOString(),lastActivityAt:o},this.autoSave()}clearStatusOverride(t){return!this.state.config.statusOverrides||!(t in this.state.config.statusOverrides)?!1:(delete this.state.config.statusOverrides[t],this.autoSave(),!0)}getStatusOverride(t,n){let o=this.state.config.statusOverrides?.[t];if(o){if(n&&n>o.lastActivityAt){this.clearStatusOverride(t);return}return o}}getRepoScore(t){return ky(this.state,t)}updateRepoScore(t,n){Cn(this.state,t,n),this.autoSave()}incrementMergedCount(t){Ty(this.state,t),this.autoSave()}incrementClosedCount(t){Ey(this.state,t),this.autoSave()}markRepoHostile(t){xy(this.state,t),this.autoSave()}getReposWithMergedPRs(){return Ry(this.state)}getReposWithOpenPRs(){return Py(this.state)}getHighScoringRepos(t){return Cy(this.state,t)}getLowScoringRepos(t){return Oy(this.state,t)}getStats(){return Ay(this.state)}reconcilePRCounts(){let t=this.state.mergedPRs??[],n=this.state.closedPRs??[];if(t.length===0&&n.length===0)return;Iy(this.state,t,n)&&this.autoSave()}},jm=null});function mr(){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 Do=b(()=>{});function ta(e,t,n,o){if(typeof n!="function")throw new Error("method for before hook must be a function");return o||(o={}),Array.isArray(t)?t.reverse().reduce((r,i)=>ta.bind(null,e,i,r,o),n)():Promise.resolve().then(()=>e.registry[t]?e.registry[t].reduce((r,i)=>i.hook.bind(null,r,o),n)():n(o))}var jy=b(()=>{});function zy(e,t,n,o){let r=o;e.registry[n]||(e.registry[n]=[]),t==="before"&&(o=(i,s)=>Promise.resolve().then(r.bind(null,s)).then(i.bind(null,s))),t==="after"&&(o=(i,s)=>{let a;return Promise.resolve().then(i.bind(null,s)).then(c=>(a=c,r(a,s))).then(()=>a)}),t==="error"&&(o=(i,s)=>Promise.resolve().then(i.bind(null,s)).catch(a=>r(a,s))),e.registry[n].push({hook:o,orig:r})}var Gy=b(()=>{});function Fy(e,t,n){if(!e.registry[t])return;let o=e.registry[t].map(r=>r.orig).indexOf(n);o!==-1&&e.registry[t].splice(o,1)}var Ly=b(()=>{});function Zy(e,t,n){let o=My(Fy,null).apply(null,n?[t,n]:[t]);e.api={remove:o},e.remove=o,["before","error","after","wrap"].forEach(r=>{let i=n?[t,r,n]:[t,r];e[r]=e.api[r]=My(zy,null).apply(null,i)})}function LE(){let e=Symbol("Singular"),t={registry:{}},n=ta.bind(null,t,e);return Zy(n,t,e),n}function NE(){let e={registry:{}},t=ta.bind(null,e);return Zy(t,e),t}var Ny,My,Vy,Hy=b(()=>{jy();Gy();Ly();Ny=Function.bind,My=Ny.bind(Ny);Vy={Singular:LE,Collection:NE}});function HE(e){return e?Object.keys(e).reduce((t,n)=>(t[n.toLowerCase()]=e[n],t),{}):{}}function qE(e){if(typeof e!="object"||e===null||Object.prototype.toString.call(e)!=="[object Object]")return!1;let t=Object.getPrototypeOf(e);if(t===null)return!0;let n=Object.prototype.hasOwnProperty.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Function.prototype.call(n)===Function.prototype.call(e)}function Wy(e,t){let n=Object.assign({},e);return Object.keys(t).forEach(o=>{qE(t[o])?o in e?n[o]=Wy(e[o],t[o]):Object.assign(n,{[o]:t[o]}):Object.assign(n,{[o]:t[o]})}),n}function qy(e){for(let t in e)e[t]===void 0&&delete e[t];return e}function Gm(e,t,n){if(typeof t=="string"){let[r,i]=t.split(" ");n=Object.assign(i?{method:r,url:i}:{url:r},n)}else n=Object.assign({},t);n.headers=HE(n.headers),qy(n),qy(n.headers);let o=Wy(e||{},n);return n.url==="/graphql"&&(e&&e.mediaType.previews?.length&&(o.mediaType.previews=e.mediaType.previews.filter(r=>!o.mediaType.previews.includes(r)).concat(o.mediaType.previews)),o.mediaType.previews=(o.mediaType.previews||[]).map(r=>r.replace(/-preview/,""))),o}function BE(e,t){let n=/\?/.test(e)?"&":"?",o=Object.keys(t);return o.length===0?e:e+n+o.map(r=>r==="q"?"q="+t.q.split("+").map(encodeURIComponent).join("+"):`${r}=${encodeURIComponent(t[r])}`).join("&")}function JE(e){return e.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g,"").split(/,/)}function KE(e){let t=e.match(WE);return t?t.map(JE).reduce((n,o)=>n.concat(o),[]):[]}function By(e,t){let n={__proto__:null};for(let o of Object.keys(e))t.indexOf(o)===-1&&(n[o]=e[o]);return n}function Jy(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map(function(t){return/%[0-9A-Fa-f]/.test(t)||(t=encodeURI(t).replace(/%5B/g,"[").replace(/%5D/g,"]")),t}).join("")}function An(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}function Uo(e,t,n){return t=e==="+"||e==="#"?Jy(t):An(t),n?An(n)+"="+t:t}function In(e){return e!=null}function zm(e){return e===";"||e==="&"||e==="?"}function XE(e,t,n,o){var r=e[n],i=[];if(In(r)&&r!=="")if(typeof r=="string"||typeof r=="number"||typeof r=="bigint"||typeof r=="boolean")r=r.toString(),o&&o!=="*"&&(r=r.substring(0,parseInt(o,10))),i.push(Uo(t,r,zm(t)?n:""));else if(o==="*")Array.isArray(r)?r.filter(In).forEach(function(s){i.push(Uo(t,s,zm(t)?n:""))}):Object.keys(r).forEach(function(s){In(r[s])&&i.push(Uo(t,r[s],s))});else{let s=[];Array.isArray(r)?r.filter(In).forEach(function(a){s.push(Uo(t,a))}):Object.keys(r).forEach(function(a){In(r[a])&&(s.push(An(a)),s.push(Uo(t,r[a].toString())))}),zm(t)?i.push(An(n)+"="+s.join(",")):s.length!==0&&i.push(s.join(","))}else t===";"?In(r)&&i.push(An(n)):r===""&&(t==="&"||t==="?")?i.push(An(n)+"="):r===""&&i.push("");return i}function YE(e){return{expand:QE.bind(null,e)}}function QE(e,t){var n=["+","#",".","/",";","?","&"];return e=e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(o,r,i){if(r){let a="",c=[];if(n.indexOf(r.charAt(0))!==-1&&(a=r.charAt(0),r=r.substr(1)),r.split(/,/g).forEach(function(u){var l=/([^:\*]*)(?::(\d+)|(\*))?/.exec(u);c.push(XE(t,a,l[1],l[2]||l[3]))}),a&&a!=="+"){var s=",";return a==="?"?s="&":a!=="#"&&(s=a),(c.length!==0?a:"")+c.join(s)}else return c.join(",")}else return Jy(i)}),e==="/"?e:e.replace(/\/$/,"")}function Ky(e){let t=e.method.toUpperCase(),n=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),o=Object.assign({},e.headers),r,i=By(e,["method","baseUrl","url","headers","request","mediaType"]),s=KE(n);n=YE(n).expand(i),/^http/.test(n)||(n=e.baseUrl+n);let a=Object.keys(e).filter(l=>s.includes(l)).concat("baseUrl"),c=By(i,a);if(!/application\/octet-stream/i.test(o.accept)&&(e.mediaType.format&&(o.accept=o.accept.split(/,/).map(l=>l.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`)).join(",")),n.endsWith("/graphql")&&e.mediaType.previews?.length)){let l=o.accept.match(/(?<![\w-])[\w-]+(?=-preview)/g)||[];o.accept=l.concat(e.mediaType.previews).map(d=>{let p=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${d}-preview${p}`}).join(",")}return["GET","HEAD"].includes(t)?n=BE(n,c):"data"in c?r=c.data:Object.keys(c).length&&(r=c),!o["content-type"]&&typeof r<"u"&&(o["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(t)&&typeof r>"u"&&(r=""),Object.assign({method:t,url:n,headers:o},typeof r<"u"?{body:r}:null,e.request?{request:e.request}:null)}function ex(e,t,n){return Ky(Gm(e,t,n))}function Xy(e,t){let n=Gm(e,t),o=ex.bind(null,n);return Object.assign(o,{DEFAULTS:n,defaults:Xy.bind(null,n),merge:Gm.bind(null,n),parse:Ky})}var ME,ZE,VE,WE,Yy,Qy=b(()=>{Do();ME="0.0.0-development",ZE=`octokit-endpoint.js/${ME} ${mr()}`,VE={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":ZE},mediaType:{format:""}};WE=/\{[^{}}]+\}/g;Yy=Xy(null,VE)});var n_=Gt((FA,jo)=>{"use strict";var oa=function(){};oa.prototype=Object.create(null);var ra=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,na=/\\([\v\u0020-\u00ff])/gu,e_=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,Or={type:"",parameters:new oa};Object.freeze(Or.parameters);Object.freeze(Or);function t_(e){if(typeof e!="string")throw new TypeError("argument header is required and must be a string");let t=e.indexOf(";"),n=t!==-1?e.slice(0,t).trim():e.trim();if(e_.test(n)===!1)throw new TypeError("invalid media type");let o={type:n.toLowerCase(),parameters:new oa};if(t===-1)return o;let r,i,s;for(ra.lastIndex=t;i=ra.exec(e);){if(i.index!==t)throw new TypeError("invalid parameter format");t+=i[0].length,r=i[1].toLowerCase(),s=i[2],s[0]==='"'&&(s=s.slice(1,s.length-1),na.test(s)&&(s=s.replace(na,"$1"))),o.parameters[r]=s}if(t!==e.length)throw new TypeError("invalid parameter format");return o}function r_(e){if(typeof e!="string")return Or;let t=e.indexOf(";"),n=t!==-1?e.slice(0,t).trim():e.trim();if(e_.test(n)===!1)return Or;let o={type:n.toLowerCase(),parameters:new oa};if(t===-1)return o;let r,i,s;for(ra.lastIndex=t;i=ra.exec(e);){if(i.index!==t)return Or;t+=i[0].length,r=i[1].toLowerCase(),s=i[2],s[0]==='"'&&(s=s.slice(1,s.length-1),na.test(s)&&(s=s.replace(na,"$1"))),o.parameters[r]=s}return t!==e.length?Or:o}jo.exports.default={parse:t_,safeParse:r_};jo.exports.parse=t_;jo.exports.safeParse=r_;jo.exports.defaultContentType=Or});var tx,s_,Fm,o_,rx,nx,ox,a_,ix,sx,ax,c_,i_,cx,ux,u_,l_=b(()=>{tx=/^-?\d+$/,s_=/^-?\d+n+$/,Fm=JSON.stringify,o_=JSON.parse,rx=/^-?\d+n$/,nx=/([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,ox=/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g,a_=(e,t,n)=>"rawJSON"in JSON?Fm(e,(s,a)=>typeof a=="bigint"?JSON.rawJSON(a.toString()):typeof t=="function"?t(s,a):(Array.isArray(t)&&t.includes(s),a),n):e?Fm(e,(s,a)=>typeof a=="string"&&!!a.match(s_)||typeof a=="bigint"?a.toString()+"n":typeof t=="function"?t(s,a):(Array.isArray(t)&&t.includes(s),a),n).replace(nx,"$1$2$3").replace(ox,"$1$2$3"):Fm(e,t,n),ix=()=>JSON.parse("1",(e,t,n)=>!!n&&n.source==="1"),sx=(e,t,n,o)=>typeof t=="string"&&t.match(rx)?BigInt(t.slice(0,-1)):typeof t=="string"&&t.match(s_)?t.slice(0,-1):typeof o!="function"?t:o(e,t,n),ax=(e,t)=>JSON.parse(e,(n,o,r)=>{let i=typeof o=="number"&&(o>Number.MAX_SAFE_INTEGER||o<Number.MIN_SAFE_INTEGER),s=r&&tx.test(r.source);return i&&s?BigInt(r.source):typeof t!="function"?o:t(n,o,r)}),c_=Number.MAX_SAFE_INTEGER.toString(),i_=c_.length,cx=/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g,ux=/^"-?\d+n+"$/,u_=(e,t)=>{if(!e)return o_(e,t);if(ix())return ax(e,t);let n=e.replace(cx,(o,r,i,s)=>{let a=o[0]==='"';if(a&&!!o.match(ux))return o.substring(0,o.length-1)+'n"';let u=i||s,l=r&&(r.length<i_||r.length===i_&&r<=c_);return a||u||l?o:'"'+o+'n"'});return o_(n,(o,r,i)=>sx(o,r,i,t))}});var Ir,d_=b(()=>{Ir=class extends Error{name;status;request;response;constructor(t,n,o){super(t,{cause:o.cause}),this.name="HttpError",this.status=Number.parseInt(n),Number.isNaN(this.status)&&(this.status=0);"response"in o&&(this.response=o.response);let r=Object.assign({},o.request);o.request.headers.authorization&&(r.headers=Object.assign({},o.request.headers,{authorization:o.request.headers.authorization.replace(/(?<! ) .*$/," [REDACTED]")})),r.url=r.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=r}}});function px(e){if(typeof e!="object"||e===null||Object.prototype.toString.call(e)!=="[object Object]")return!1;let t=Object.getPrototypeOf(e);if(t===null)return!0;let n=Object.prototype.hasOwnProperty.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Function.prototype.call(n)===Function.prototype.call(e)}async function m_(e){let t=e.request?.fetch||globalThis.fetch;if(!t)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 n=e.request?.log||console,o=e.request?.parseSuccessResponseBody!==!1,r=px(e.body)||Array.isArray(e.body)?a_(e.body):e.body,i=Object.fromEntries(Object.entries(e.headers).map(([d,p])=>[d,String(p)])),s;try{s=await t(e.url,{method:e.method,body:r,redirect:e.request?.redirect,headers:i,signal:e.request?.signal,...e.body&&{duplex:"half"}})}catch(d){let p="Unknown Error";if(d instanceof Error){if(d.name==="AbortError")throw d.status=500,d;p=d.message,d.name==="TypeError"&&"cause"in d&&(d.cause instanceof Error?p=d.cause.message:typeof d.cause=="string"&&(p=d.cause))}let g=new Ir(p,500,{request:e});throw g.cause=d,g}let a=s.status,c=s.url,u={};for(let[d,p]of s.headers)u[d]=p;let l={url:c,status:a,headers:u,data:""};if("deprecation"in u){let d=u.link&&u.link.match(/<([^<>]+)>; rel="deprecation"/),p=d&&d.pop();n.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${u.sunset}${p?`. See ${p}`:""}`)}if(a===204||a===205)return l;if(e.method==="HEAD"){if(a<400)return l;throw new Ir(s.statusText,a,{response:l,request:e})}if(a===304)throw l.data=await Lm(s),new Ir("Not modified",a,{response:l,request:e});if(a>=400)throw l.data=await Lm(s),new Ir(gx(l.data),a,{response:l,request:e});return l.data=o?await Lm(s):s.body,l}async function Lm(e){let t=e.headers.get("content-type");if(!t)return e.text().catch(p_);let n=(0,g_.safeParse)(t);if(mx(n)){let o="";try{return o=await e.text(),u_(o)}catch{return o}}else return n.type.startsWith("text/")||n.parameters.charset?.toLowerCase()==="utf-8"?e.text().catch(p_):e.arrayBuffer().catch(()=>new ArrayBuffer(0))}function mx(e){return e.type==="application/json"||e.type==="application/scim+json"}function gx(e){if(typeof e=="string")return e;if(e instanceof ArrayBuffer)return"Unknown error";if("message"in e){let t="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(n=>JSON.stringify(n)).join(", ")}${t}`:`${e.message}${t}`}return`Unknown error: ${JSON.stringify(e)}`}function Nm(e,t){let n=e.defaults(t);return Object.assign(function(r,i){let s=n.merge(r,i);if(!s.request||!s.request.hook)return m_(n.parse(s));let a=(c,u)=>m_(n.parse(n.merge(c,u)));return Object.assign(a,{endpoint:n,defaults:Nm.bind(null,n)}),s.request.hook(a,s)},{endpoint:n,defaults:Nm.bind(null,n)})}var g_,lx,dx,p_,zo,Mm=b(()=>{Qy();Do();g_=re(n_(),1);l_();d_();lx="10.0.8",dx={headers:{"user-agent":`octokit-request.js/${lx} ${mr()}`}};p_=()=>"";zo=Nm(Yy,dx);});function hx(e){return`Request failed due to following response errors:
|
|
73
73
|
`+e.errors.map(t=>` - ${t.message}`).join(`
|
|
74
|
-
`)}function _x(e,t,n){if(n){if(typeof t=="string"&&"query"in n)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let s in n)if(yx.includes(s))return Promise.reject(new Error(`[@octokit/graphql] "${s}" cannot be used as variable name`))}let o=typeof t=="string"?Object.assign({query:t},n):t,r=Object.keys(o).reduce((s,a)=>bx.includes(a)?(s[a]=o[a],s):(s.variables||(s.variables={}),s.variables[a]=o[a],s),{}),i=o.baseUrl||e.endpoint.DEFAULTS.baseUrl;return f_.test(i)&&(r.url=i.replace(f_,"/api/graphql")),e(r).then(s=>{if(s.data.errors){let a={};for(let c of Object.keys(s.headers))a[c]=s.headers[c];throw new vx(r,a,s.data)}return s.data.data})}function Zm(e,t){let n=e.defaults(t);return Object.assign((r,i)=>_x(n,r,i),{defaults:Zm.bind(null,n),endpoint:n.endpoint})}function h_(e){return Zm(e,{method:"POST",url:"/graphql"})}var fx,vx,bx,yx,f_,BA,v_=b(()=>{Mm();Do();fx="0.0.0-development";vx=class extends Error{constructor(e,t,n){super(hx(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},bx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],yx=["query","method","url"],f_=/\/api\/v3\/?$/;BA=Zm(zo,{headers:{"user-agent":`octokit-graphql.js/${fx} ${mr()}`},method:"POST",url:"/graphql"})});async function wx(e){let t=$x(e),n=e.startsWith("v1.")||e.startsWith("ghs_"),o=e.startsWith("ghu_");return{type:"token",token:e,tokenType:t?"app":n?"installation":o?"user-to-server":"oauth"}}function Sx(e){return e.split(/\./).length===3?`bearer ${e}`:`token ${e}`}async function kx(e,t,n,o){let r=t.endpoint.merge(n,o);return r.headers.authorization=Sx(e),t(r)}var Vm,b_,y_,$x,__,$_=b(()=>{Vm="(?:[a-zA-Z0-9_-]+)",b_="\\.",y_=new RegExp(`^${Vm}${b_}${Vm}${b_}${Vm}$`),$x=y_.test.bind(y_);__=function(t){if(!t)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof t!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return t=t.replace(/^(token|bearer) +/i,""),Object.assign(wx.bind(null,t),{hook:kx.bind(null,t)})}});var Hm,w_=b(()=>{Hm="7.0.6"});function xx(e={}){return typeof e.debug!="function"&&(e.debug=S_),typeof e.info!="function"&&(e.info=S_),typeof e.warn!="function"&&(e.warn=Tx),typeof e.error!="function"&&(e.error=Ex),e}var S_,Tx,Ex,k_,ia,T_=b(()=>{Do();Hy();Mm();v_();$_();w_();S_=()=>{},Tx=console.warn.bind(console),Ex=console.error.bind(console);k_=`octokit-core.js/${Hm} ${mr()}`,ia=class{static VERSION=Hm;static defaults(t){return class extends this{constructor(...o){let r=o[0]||{};if(typeof t=="function"){super(t(r));return}super(Object.assign({},t,r,r.userAgent&&t.userAgent?{userAgent:`${r.userAgent} ${t.userAgent}`}:null))}}}static plugins=[];static plugin(...t){let n=this.plugins;return class extends this{static plugins=n.concat(t.filter(r=>!n.includes(r)))}}constructor(t={}){let n=new Vy.Collection,o={baseUrl:zo.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},t.request,{hook:n.bind(null,"request")}),mediaType:{previews:[],format:""}};if(o.headers["user-agent"]=t.userAgent?`${t.userAgent} ${k_}`:k_,t.baseUrl&&(o.baseUrl=t.baseUrl),t.previews&&(o.mediaType.previews=t.previews),t.timeZone&&(o.headers["time-zone"]=t.timeZone),this.request=zo.defaults(o),this.graphql=h_(this.request).defaults(o),this.log=xx(t.log),this.hook=n,t.authStrategy){let{authStrategy:i,...s}=t,a=i(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:s},t.auth));n.wrap("request",a.hook),this.auth=a}else if(!t.auth)this.auth=async()=>({type:"unauthenticated"});else{let i=__(t.auth);n.wrap("request",i.hook),this.auth=i}let r=this.constructor;for(let i=0;i<r.plugins.length;++i)Object.assign(this,r.plugins[i](this,t))}request;graphql;log;hook;auth}});var E_,x_=b(()=>{E_="6.0.0"});function qm(e){e.hook.wrap("request",(t,n)=>{e.log.debug("request",n);let o=Date.now(),r=e.request.endpoint.parse(n),i=r.url.replace(n.baseUrl,"");return t(n).then(s=>{let a=s.headers["x-github-request-id"];return e.log.info(`${r.method} ${i} - ${s.status} with id ${a} in ${Date.now()-o}ms`),s}).catch(s=>{let a=s.response?.headers["x-github-request-id"]||"UNKNOWN";throw e.log.error(`${r.method} ${i} - ${s.status} with id ${a} in ${Date.now()-o}ms`),s})})}var R_=b(()=>{x_();qm.VERSION=E_});function Px(e){if(!e.data)return{...e,data:[]};if(!(("total_count"in e.data||"total_commits"in e.data)&&!("url"in e.data)))return e;let n=e.data.incomplete_results,o=e.data.repository_selection,r=e.data.total_count,i=e.data.total_commits;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count,delete e.data.total_commits;let s=Object.keys(e.data)[0],a=e.data[s];return e.data=a,typeof n<"u"&&(e.data.incomplete_results=n),typeof o<"u"&&(e.data.repository_selection=o),e.data.total_count=r,e.data.total_commits=i,e}function Bm(e,t,n){let o=typeof t=="function"?t.endpoint(n):e.request.endpoint(t,n),r=typeof t=="function"?t:e.request,i=o.method,s=o.headers,a=o.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!a)return{done:!0};try{let c=await r({method:i,url:a,headers:s}),u=Px(c);if(a=((u.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!a&&"total_commits"in u.data){let l=new URL(u.url),d=l.searchParams,p=parseInt(d.get("page")||"1",10),g=parseInt(d.get("per_page")||"250",10);p*g<u.data.total_commits&&(d.set("page",String(p+1)),a=l.toString())}return{value:u}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function P_(e,t,n,o){return typeof n=="function"&&(o=n,n=void 0),C_(e,[],Bm(e,t,n)[Symbol.asyncIterator](),o)}function C_(e,t,n,o){return n.next().then(r=>{if(r.done)return t;let i=!1;function s(){i=!0}return t=t.concat(o?o(r.value,s):r.value.data),i?t:C_(e,t,n,o)})}function Wm(e){return{paginate:Object.assign(P_.bind(null,e),{iterator:Bm.bind(null,e)})}}var Rx,lD,O_=b(()=>{Rx="0.0.0-development";lD=Object.assign(P_,{iterator:Bm});Wm.VERSION=Rx});var Jm,I_=b(()=>{Jm="17.0.0"});var Cx,A_,D_=b(()=>{Cx={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"]}},A_=Cx});function Km(e){let t={};for(let n of Ar.keys())t[n]=new Proxy({octokit:e,scope:n,cache:{}},Ox);return t}function Ix(e,t,n,o,r){let i=e.request.defaults(o);function s(...a){let c=i.endpoint.merge(...a);if(r.mapToData)return c=Object.assign({},c,{data:c[r.mapToData],[r.mapToData]:void 0}),i(c);if(r.renamed){let[u,l]=r.renamed;e.log.warn(`octokit.${t}.${n}() has been renamed to octokit.${u}.${l}()`)}if(r.deprecated&&e.log.warn(r.deprecated),r.renamedParameters){let u=i.endpoint.merge(...a);for(let[l,d]of Object.entries(r.renamedParameters))l in u&&(e.log.warn(`"${l}" parameter is deprecated for "octokit.${t}.${n}()". Use "${d}" instead`),d in u||(u[d]=u[l]),delete u[l]);return i(u)}return i(...a)}return Object.assign(s,i)}var Ar,Ox,U_=b(()=>{D_();Ar=new Map;for(let[e,t]of Object.entries(A_))for(let[n,o]of Object.entries(t)){let[r,i,s]=o,[a,c]=r.split(/ /),u=Object.assign({method:a,url:c},i);Ar.has(e)||Ar.set(e,new Map),Ar.get(e).set(n,{scope:e,methodName:n,endpointDefaults:u,decorations:s})}Ox={has({scope:e},t){return Ar.get(e).has(t)},getOwnPropertyDescriptor(e,t){return{value:this.get(e,t),configurable:!0,writable:!0,enumerable:!0}},defineProperty(e,t,n){return Object.defineProperty(e.cache,t,n),!0},deleteProperty(e,t){return delete e.cache[t],!0},ownKeys({scope:e}){return[...Ar.get(e).keys()]},set(e,t,n){return e.cache[t]=n},get({octokit:e,scope:t,cache:n},o){if(n[o])return n[o];let r=Ar.get(t).get(o);if(!r)return;let{endpointDefaults:i,decorations:s}=r;return s?n[o]=Ix(e,t,o,i,s):n[o]=e.request.defaults(i),n[o]}}});function Ax(e){return{rest:Km(e)}}function Xm(e){let t=Km(e);return{...t,rest:t}}var j_=b(()=>{I_();U_();Ax.VERSION=Jm;Xm.VERSION=Jm});var z_,G_=b(()=>{z_="22.0.1"});var F_,L_=b(()=>{T_();R_();O_();j_();G_();F_=ia.plugin(qm,Xm,Wm).defaults({userAgent:`octokit-rest.js/${z_}`})});var N_=Gt((Ym,Qm)=>{(function(e,t){typeof Ym=="object"&&typeof Qm<"u"?Qm.exports=t():typeof define=="function"&&define.amd?define(t):e.Bottleneck=t()})(Ym,(function(){"use strict";var e=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function t(V){return V&&V.default||V}var n=function(V,_,m={}){var w,k,x;for(w in _)x=_[w],m[w]=(k=V[w])!=null?k:x;return m},o=function(V,_,m={}){var w,k;for(w in V)k=V[w],_[w]!==void 0&&(m[w]=k);return m},r={load:n,overwrite:o},i;i=class{constructor(_,m){this.incr=_,this.decr=m,this._first=null,this._last=null,this.length=0}push(_){var m;this.length++,typeof this.incr=="function"&&this.incr(),m={value:_,prev:this._last,next:null},this._last!=null?(this._last.next=m,this._last=m):this._first=this._last=m}shift(){var _;if(this._first!=null)return this.length--,typeof this.decr=="function"&&this.decr(),_=this._first.value,(this._first=this._first.next)!=null?this._first.prev=null:this._last=null,_}first(){if(this._first!=null)return this._first.value}getArray(){var _,m,w;for(_=this._first,w=[];_!=null;)w.push((m=_,_=_.next,m.value));return w}forEachShift(_){var m;for(m=this.shift();m!=null;)_(m),m=this.shift()}debug(){var _,m,w,k,x;for(_=this._first,x=[];_!=null;)x.push((m=_,_=_.next,{value:m.value,prev:(w=m.prev)!=null?w.value:void 0,next:(k=m.next)!=null?k.value:void 0}));return x}};var s=i,a;a=class{constructor(_){if(this.instance=_,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=(m,w)=>this._addListener(m,"many",w),this.instance.once=(m,w)=>this._addListener(m,"once",w),this.instance.removeAllListeners=(m=null)=>m!=null?delete this._events[m]:this._events={}}_addListener(_,m,w){var k;return(k=this._events)[_]==null&&(k[_]=[]),this._events[_].push({cb:w,status:m}),this.instance}listenerCount(_){return this._events[_]!=null?this._events[_].length:0}async trigger(_,...m){var w,k;try{return _!=="debug"&&this.trigger("debug",`Event triggered: ${_}`,m),this._events[_]==null?void 0:(this._events[_]=this._events[_].filter(function(x){return x.status!=="none"}),k=this._events[_].map(async x=>{var D,M;if(x.status!=="none"){x.status==="once"&&(x.status="none");try{return M=typeof x.cb=="function"?x.cb(...m):void 0,typeof M?.then=="function"?await M:M}catch(pe){return D=pe,this.trigger("error",D),null}}}),(await Promise.all(k)).find(function(x){return x!=null}))}catch(x){return w=x,this.trigger("error",w),null}}};var c=a,u,l,d;u=s,l=c,d=class{constructor(_){var m;this.Events=new l(this),this._length=0,this._lists=(function(){var w,k,x;for(x=[],m=w=1,k=_;1<=k?w<=k:w>=k;m=1<=k?++w:--w)x.push(new u((()=>this.incr()),(()=>this.decr())));return x}).call(this)}incr(){if(this._length++===0)return this.Events.trigger("leftzero")}decr(){if(--this._length===0)return this.Events.trigger("zero")}push(_){return this._lists[_.options.priority].push(_)}queued(_){return _!=null?this._lists[_].length:this._length}shiftAll(_){return this._lists.forEach(function(m){return m.forEachShift(_)})}getFirst(_=this._lists){var m,w,k;for(m=0,w=_.length;m<w;m++)if(k=_[m],k.length>0)return k;return[]}shiftLastFrom(_){return this.getFirst(this._lists.slice(_).reverse()).shift()}};var p=d,g;g=class extends Error{};var y=g,S,U,T,L,Z;L=10,U=5,Z=r,S=y,T=class{constructor(_,m,w,k,x,D,M,pe){this.task=_,this.args=m,this.rejectOnDrop=x,this.Events=D,this._states=M,this.Promise=pe,this.options=Z.load(w,k),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===k.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((Ne,Ze)=>{this._resolve=Ne,this._reject=Ze}),this.retryCount=0}_sanitizePriority(_){var m;return m=~~_!==_?U:_,m<0?0:m>L-1?L-1:m}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:_,message:m="This job has been dropped by Bottleneck"}={}){return this._states.remove(this.options.id)?(this.rejectOnDrop&&this._reject(_??new S(m)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0):!1}_assertStatus(_){var m;if(m=this._states.jobStatus(this.options.id),!(m===_||_==="DONE"&&m===null))throw new S(`Invalid job status ${m}, expected ${_}. 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(_,m){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:_,blocked:m})}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(_,m,w,k){var x,D,M;this.retryCount===0?(this._assertStatus("RUNNING"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),D={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",D);try{if(M=await(_!=null?_.schedule(this.options,this.task,...this.args):this.task(...this.args)),m())return this.doDone(D),await k(this.options,D),this._assertStatus("DONE"),this._resolve(M)}catch(pe){return x=pe,this._onFailure(x,D,m,w,k)}}doExpire(_,m,w){var k,x;return this._states.jobStatus(this.options.id==="RUNNING")&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),x={args:this.args,options:this.options,retryCount:this.retryCount},k=new S(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(k,x,_,m,w)}async _onFailure(_,m,w,k,x){var D,M;if(w())return D=await this.Events.trigger("failed",_,m),D!=null?(M=~~D,this.Events.trigger("retry",`Retrying ${this.options.id} after ${M} ms`,m),this.retryCount++,k(M)):(this.doDone(m),await x(this.options,m),this._assertStatus("DONE"),this._reject(_))}doDone(_){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",_)}};var N=T,z,R,G;G=r,z=y,R=class{constructor(_,m,w){this.instance=_,this.storeOptions=m,this.clientId=this.instance._randomIndex(),G.load(w,w,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 _;return this.heartbeat==null&&(this.storeOptions.reservoirRefreshInterval!=null&&this.storeOptions.reservoirRefreshAmount!=null||this.storeOptions.reservoirIncreaseInterval!=null&&this.storeOptions.reservoirIncreaseAmount!=null)?typeof(_=this.heartbeat=setInterval(()=>{var m,w,k,x,D;if(x=Date.now(),this.storeOptions.reservoirRefreshInterval!=null&&x>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=x,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),this.storeOptions.reservoirIncreaseInterval!=null&&x>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval&&({reservoirIncreaseAmount:m,reservoirIncreaseMaximum:k,reservoir:D}=this.storeOptions,this._lastReservoirIncrease=x,w=k!=null?Math.min(m,k-D):m,w>0))return this.storeOptions.reservoir+=w,this.instance._drainAll(this.computeCapacity())},this.heartbeatInterval)).unref=="function"?_.unref():void 0:clearInterval(this.heartbeat)}async __publish__(_){return await this.yieldLoop(),this.instance.Events.trigger("message",_.toString())}async __disconnect__(_){return await this.yieldLoop(),clearInterval(this.heartbeat),this.Promise.resolve()}yieldLoop(_=0){return new this.Promise(function(m,w){return setTimeout(m,_)})}computePenalty(){var _;return(_=this.storeOptions.penalty)!=null?_:15*this.storeOptions.minTime||5e3}async __updateSettings__(_){return await this.yieldLoop(),G.overwrite(_,_,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__(_){return await this.yieldLoop(),this._nextRequest+this.timeout<_}computeCapacity(){var _,m;return{maxConcurrent:_,reservoir:m}=this.storeOptions,_!=null&&m!=null?Math.min(_-this._running,m):_!=null?_-this._running:m??null}conditionsCheck(_){var m;return m=this.computeCapacity(),m==null||_<=m}async __incrementReservoir__(_){var m;return await this.yieldLoop(),m=this.storeOptions.reservoir+=_,this.instance._drainAll(this.computeCapacity()),m}async __currentReservoir__(){return await this.yieldLoop(),this.storeOptions.reservoir}isBlocked(_){return this._unblockTime>=_}check(_,m){return this.conditionsCheck(_)&&this._nextRequest-m<=0}async __check__(_){var m;return await this.yieldLoop(),m=Date.now(),this.check(_,m)}async __register__(_,m,w){var k,x;return await this.yieldLoop(),k=Date.now(),this.conditionsCheck(m)?(this._running+=m,this.storeOptions.reservoir!=null&&(this.storeOptions.reservoir-=m),x=Math.max(this._nextRequest-k,0),this._nextRequest=k+x+this.storeOptions.minTime,{success:!0,wait:x,reservoir:this.storeOptions.reservoir}):{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(_,m){var w,k,x;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&m>this.storeOptions.maxConcurrent)throw new z(`Impossible to add a job having a weight of ${m} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);return k=Date.now(),x=this.storeOptions.highWater!=null&&_===this.storeOptions.highWater&&!this.check(m,k),w=this.strategyIsBlock()&&(x||this.isBlocked(k)),w&&(this._unblockTime=k+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued()),{reachedHWM:x,blocked:w,strategy:this.storeOptions.strategy}}async __free__(_,m){return await this.yieldLoop(),this._running-=m,this._done+=m,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var ee=R,q,ae;q=y,ae=class{constructor(_){this.status=_,this._jobs={},this.counts=this.status.map(function(){return 0})}next(_){var m,w;if(m=this._jobs[_],w=m+1,m!=null&&w<this.status.length)return this.counts[m]--,this.counts[w]++,this._jobs[_]++;if(m!=null)return this.counts[m]--,delete this._jobs[_]}start(_){var m;return m=0,this._jobs[_]=m,this.counts[m]++}remove(_){var m;return m=this._jobs[_],m!=null&&(this.counts[m]--,delete this._jobs[_]),m!=null}jobStatus(_){var m;return(m=this.status[this._jobs[_]])!=null?m:null}statusJobs(_){var m,w,k,x,D;if(_!=null){if(w=this.status.indexOf(_),w<0)throw new q(`status must be one of ${this.status.join(", ")}`);k=this._jobs,x=[];for(m in k)D=k[m],D===w&&x.push(m);return x}else return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce(((_,m,w)=>(_[this.status[w]]=m,_)),{})}};var Ge=ae,ve,be;ve=s,be=class{constructor(_,m){this.schedule=this.schedule.bind(this),this.name=_,this.Promise=m,this._running=0,this._queue=new ve}isEmpty(){return this._queue.length===0}async _tryToRun(){var _,m,w,k,x,D,M;if(this._running<1&&this._queue.length>0)return this._running++,{task:M,args:_,resolve:x,reject:k}=this._queue.shift(),m=await(async function(){try{return D=await M(..._),function(){return x(D)}}catch(pe){return w=pe,function(){return k(w)}}})(),this._running--,this._tryToRun(),m()}schedule(_,...m){var w,k,x;return x=k=null,w=new this.Promise(function(D,M){return x=D,k=M}),this._queue.push({task:_,args:m,resolve:x,reject:k}),this._tryToRun(),w}};var pt=be,Fe="2.19.5",tr={version:Fe},Le=Object.freeze({version:Fe,default:tr}),mt=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),Et=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),xt=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),vr,F,X,B,Ce,we;we=r,vr=c,B=mt,X=Et,Ce=xt,F=(function(){class V{constructor(m={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=m,we.load(this.limiterOptions,this.defaults,this),this.Events=new vr(this),this.instances={},this.Bottleneck=af,this._startAutoCleanup(),this.sharedConnection=this.connection!=null,this.connection==null&&(this.limiterOptions.datastore==="redis"?this.connection=new B(Object.assign({},this.limiterOptions,{Events:this.Events})):this.limiterOptions.datastore==="ioredis"&&(this.connection=new X(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(m=""){var w;return(w=this.instances[m])!=null?w:(()=>{var k;return k=this.instances[m]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${m}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",k,m),k})()}async deleteKey(m=""){var w,k;return k=this.instances[m],this.connection&&(w=await this.connection.__runCommand__(["del",...Ce.allKeys(`${this.id}-${m}`)])),k!=null&&(delete this.instances[m],await k.disconnect()),k!=null||w>0}limiters(){var m,w,k,x;w=this.instances,k=[];for(m in w)x=w[m],k.push({key:m,limiter:x});return k}keys(){return Object.keys(this.instances)}async clusterKeys(){var m,w,k,x,D,M,pe,Ne,Ze;if(this.connection==null)return this.Promise.resolve(this.keys());for(M=[],m=null,Ze=`b_${this.id}-`.length,w=9;m!==0;)for([Ne,k]=await this.connection.__runCommand__(["scan",m??0,"match",`b_${this.id}-*_settings`,"count",1e4]),m=~~Ne,x=0,pe=k.length;x<pe;x++)D=k[x],M.push(D.slice(Ze,-w));return M}_startAutoCleanup(){var m;return clearInterval(this.interval),typeof(m=this.interval=setInterval(async()=>{var w,k,x,D,M,pe;M=Date.now(),x=this.instances,D=[];for(k in x){pe=x[k];try{await pe._store.__groupCheck__(M)?D.push(this.deleteKey(k)):D.push(void 0)}catch(Ne){w=Ne,D.push(pe.Events.trigger("error",w))}}return D},this.timeout/2)).unref=="function"?m.unref():void 0}updateSettings(m={}){if(we.overwrite(m,this.defaults,this),we.overwrite(m,m,this.limiterOptions),m.timeout!=null)return this._startAutoCleanup()}disconnect(m=!0){var w;if(!this.sharedConnection)return(w=this.connection)!=null?w.disconnect(m):void 0}}return V.prototype.defaults={timeout:1e3*60*5,connection:null,Promise,id:"group-key"},V}).call(e);var ke=F,ie,Oe,_e;_e=r,Oe=c,ie=(function(){class V{constructor(m={}){this.options=m,_e.load(this.options,this.defaults,this),this.Events=new Oe(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((m,w)=>this._resolve=m)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(m){var w;return this._arr.push(m),w=this._promise,this._arr.length===this.maxSize?this._flush():this.maxTime!=null&&this._arr.length===1&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),w}}return V.prototype.defaults={maxTime:null,maxSize:null,Promise},V}).call(e);var Be=ie,zt=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),br=t(Le),qr,ef,Ba,Wa,tf,Ja,rf,nf,of,Ka,Rt,sf=[].splice;Ja=10,ef=5,Rt=r,rf=p,Wa=N,tf=ee,nf=zt,Ba=c,of=Ge,Ka=pt,qr=(function(){class V{constructor(m={},...w){var k,x;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(m,w),Rt.load(m,this.instanceDefaults,this),this._queues=new rf(Ja),this._scheduled={},this._states=new of(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new Ba(this),this._submitLock=new Ka("submit",this.Promise),this._registerLock=new Ka("register",this.Promise),x=Rt.load(m,this.storeDefaults,{}),this._store=(function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return k=Rt.load(m,this.redisStoreDefaults,{}),new nf(this,x,k);if(this.datastore==="local")return k=Rt.load(m,this.localStoreDefaults,{}),new tf(this,x,k);throw new V.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}).call(this),this._queues.on("leftzero",()=>{var D;return(D=this._store.heartbeat)!=null&&typeof D.ref=="function"?D.ref():void 0}),this._queues.on("zero",()=>{var D;return(D=this._store.heartbeat)!=null&&typeof D.unref=="function"?D.unref():void 0})}_validateOptions(m,w){if(!(m!=null&&typeof m=="object"&&w.length===0))throw new V.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(m){return this._store.__publish__(m)}disconnect(m=!0){return this._store.__disconnect__(m)}chain(m){return this._limiter=m,this}queued(m){return this._queues.queued(m)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(m){return this._states.jobStatus(m)}jobs(m){return this._states.statusJobs(m)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(m=1){return this._store.__check__(m)}_clearGlobalState(m){return this._scheduled[m]!=null?(clearTimeout(this._scheduled[m].expiration),delete this._scheduled[m],!0):!1}async _free(m,w,k,x){var D,M;try{if({running:M}=await this._store.__free__(m,k.weight),this.Events.trigger("debug",`Freed ${k.id}`,x),M===0&&this.empty())return this.Events.trigger("idle")}catch(pe){return D=pe,this.Events.trigger("error",D)}}_run(m,w,k){var x,D,M;return w.doRun(),x=this._clearGlobalState.bind(this,m),M=this._run.bind(this,m,w),D=this._free.bind(this,m,w),this._scheduled[m]={timeout:setTimeout(()=>w.doExecute(this._limiter,x,M,D),k),expiration:w.options.expiration!=null?setTimeout(function(){return w.doExpire(x,M,D)},k+w.options.expiration):void 0,job:w}}_drainOne(m){return this._registerLock.schedule(()=>{var w,k,x,D,M;return this.queued()===0?this.Promise.resolve(null):(M=this._queues.getFirst(),{options:D,args:w}=x=M.first(),m!=null&&D.weight>m?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${D.id}`,{args:w,options:D}),k=this._randomIndex(),this._store.__register__(k,D.weight,D.expiration).then(({success:pe,wait:Ne,reservoir:Ze})=>{var Nn;return this.Events.trigger("debug",`Drained ${D.id}`,{success:pe,args:w,options:D}),pe?(M.shift(),Nn=this.empty(),Nn&&this.Events.trigger("empty"),Ze===0&&this.Events.trigger("depleted",Nn),this._run(k,x,Ne),this.Promise.resolve(D.weight)):this.Promise.resolve(null)})))})}_drainAll(m,w=0){return this._drainOne(m).then(k=>{var x;return k!=null?(x=m!=null?m-k:m,this._drainAll(x,w+k)):this.Promise.resolve(w)}).catch(k=>this.Events.trigger("error",k))}_dropAllQueued(m){return this._queues.shiftAll(function(w){return w.doDrop({message:m})})}stop(m={}){var w,k;return m=Rt.load(m,this.stopDefaults),k=x=>{var D;return D=()=>{var M;return M=this._states.counts,M[0]+M[1]+M[2]+M[3]===x},new this.Promise((M,pe)=>D()?M():this.on("done",()=>{if(D())return this.removeAllListeners("done"),M()}))},w=m.dropWaitingJobs?(this._run=function(x,D){return D.doDrop({message:m.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var x,D,M;D=this._scheduled;for(x in D)M=D[x],this.jobStatus(M.job.options.id)==="RUNNING"&&(clearTimeout(M.timeout),clearTimeout(M.expiration),M.job.doDrop({message:m.dropErrorMessage}));return this._dropAllQueued(m.dropErrorMessage),k(0)}))):this.schedule({priority:Ja-1,weight:0},()=>k(1)),this._receive=function(x){return x._reject(new V.prototype.BottleneckError(m.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new V.prototype.BottleneckError("stop() has already been called")),w}async _addToQueue(m){var w,k,x,D,M,pe,Ne;({args:w,options:D}=m);try{({reachedHWM:M,blocked:k,strategy:Ne}=await this._store.__submit__(this.queued(),D.weight))}catch(Ze){return x=Ze,this.Events.trigger("debug",`Could not queue ${D.id}`,{args:w,options:D,error:x}),m.doDrop({error:x}),!1}return k?(m.doDrop(),!0):M&&(pe=Ne===V.prototype.strategy.LEAK?this._queues.shiftLastFrom(D.priority):Ne===V.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(D.priority+1):Ne===V.prototype.strategy.OVERFLOW?m:void 0,pe?.doDrop(),pe==null||Ne===V.prototype.strategy.OVERFLOW)?(pe==null&&m.doDrop(),M):(m.doQueue(M,k),this._queues.push(m),await this._drainAll(),M)}_receive(m){return this._states.jobStatus(m.options.id)!=null?(m._reject(new V.prototype.BottleneckError(`A job with the same id already exists (id=${m.options.id})`)),!1):(m.doReceive(),this._submitLock.schedule(this._addToQueue,m))}submit(...m){var w,k,x,D,M,pe,Ne;return typeof m[0]=="function"?(M=m,[k,...m]=M,[w]=sf.call(m,-1),D=Rt.load({},this.jobDefaults)):(pe=m,[D,k,...m]=pe,[w]=sf.call(m,-1),D=Rt.load(D,this.jobDefaults)),Ne=(...Ze)=>new this.Promise(function(Nn,iS){return k(...Ze,function(...cf){return(cf[0]!=null?iS:Nn)(cf)})}),x=new Wa(Ne,m,D,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),x.promise.then(function(Ze){return typeof w=="function"?w(...Ze):void 0}).catch(function(Ze){return Array.isArray(Ze)?typeof w=="function"?w(...Ze):void 0:typeof w=="function"?w(Ze):void 0}),this._receive(x)}schedule(...m){var w,k,x;return typeof m[0]=="function"?([x,...m]=m,k={}):[k,x,...m]=m,w=new Wa(x,m,k,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(w),w.promise}wrap(m){var w,k;return w=this.schedule.bind(this),k=function(...x){return w(m.bind(this),...x)},k.withOptions=function(x,...D){return w(x,m,...D)},k}async updateSettings(m={}){return await this._store.__updateSettings__(Rt.overwrite(m,this.storeDefaults)),Rt.overwrite(m,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(m=0){return this._store.__incrementReservoir__(m)}}return V.default=V,V.Events=Ba,V.version=V.prototype.version=br.version,V.strategy=V.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},V.BottleneckError=V.prototype.BottleneckError=y,V.Group=V.prototype.Group=ke,V.RedisConnection=V.prototype.RedisConnection=mt,V.IORedisConnection=V.prototype.IORedisConnection=Et,V.Batcher=V.prototype.Batcher=Be,V.prototype.jobDefaults={priority:ef,weight:1,expiration:null,id:"<no-id>"},V.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:V.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},V.prototype.localStoreDefaults={Promise,timeout:null,heartbeatInterval:250},V.prototype.redisStoreDefaults={Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},V.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise},V.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},V}).call(e);var af=qr,oS=af;return oS}))});function Ux(e,t,n){return e.retryLimiter.schedule(jx,e,t,n)}async function jx(e,t,n){let{pathname:o}=new URL(n.url,"http://github.test"),r=zx(n.method,o),i=!r&&n.method!=="GET"&&n.method!=="HEAD",s=n.method==="GET"&&o.startsWith("/search/"),a=o.startsWith("/graphql"),u=~~t.retryCount>0?{priority:0,weight:0}:{};e.clustering&&(u.expiration=1e3*60),(i||a)&&await e.write.key(e.id).schedule(u,eg),i&&e.triggersNotification(o)&&await e.notifications.key(e.id).schedule(u,eg),s&&await e.search.key(e.id).schedule(u,eg);let l=(r?e.auth:e.global).key(e.id).schedule(u,t,n);if(a){let d=await l;if(d.data.errors!=null&&d.data.errors.some(p=>p.type==="RATE_LIMITED"))throw Object.assign(new Error("GraphQL Rate Limit Exceeded"),{response:d,data:d.data})}return l}function zx(e,t){return e==="PATCH"&&/^\/applications\/[^/]+\/token\/scoped$/.test(t)||e==="POST"&&(/^\/applications\/[^/]+\/token$/.test(t)||/^\/app\/installations\/[^/]+\/access_tokens$/.test(t)||t==="/login/oauth/access_token")}function Fx(e){let n=`^(?:${e.map(o=>o.split("/").map(r=>r.startsWith("{")?"(?:.+?)":r).join("/")).map(o=>`(?:${o})`).join("|")})[^/]*$`;return new RegExp(n,"i")}function sa(e,t){let{enabled:n=!0,Bottleneck:o=Z_.default,id:r="no-id",timeout:i=1e3*60*2,connection:s}=t.throttle||{};if(!n)return{};let a={timeout:i};typeof s<"u"&&(a.connection=s),Dr.global==null&&Lx(o,a);let c=Object.assign({clustering:s!=null,triggersNotification:V_,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new o,id:r,...Dr},t.throttle);if(typeof c.onSecondaryRateLimit!="function"||typeof c.onRateLimit!="function")throw new Error(`octokit/plugin-throttling error:
|
|
74
|
+
`)}function _x(e,t,n){if(n){if(typeof t=="string"&&"query"in n)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let s in n)if(yx.includes(s))return Promise.reject(new Error(`[@octokit/graphql] "${s}" cannot be used as variable name`))}let o=typeof t=="string"?Object.assign({query:t},n):t,r=Object.keys(o).reduce((s,a)=>bx.includes(a)?(s[a]=o[a],s):(s.variables||(s.variables={}),s.variables[a]=o[a],s),{}),i=o.baseUrl||e.endpoint.DEFAULTS.baseUrl;return f_.test(i)&&(r.url=i.replace(f_,"/api/graphql")),e(r).then(s=>{if(s.data.errors){let a={};for(let c of Object.keys(s.headers))a[c]=s.headers[c];throw new vx(r,a,s.data)}return s.data.data})}function Zm(e,t){let n=e.defaults(t);return Object.assign((r,i)=>_x(n,r,i),{defaults:Zm.bind(null,n),endpoint:n.endpoint})}function h_(e){return Zm(e,{method:"POST",url:"/graphql"})}var fx,vx,bx,yx,f_,JA,v_=b(()=>{Mm();Do();fx="0.0.0-development";vx=class extends Error{constructor(e,t,n){super(hx(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},bx=["method","baseUrl","url","headers","request","query","mediaType","operationName"],yx=["query","method","url"],f_=/\/api\/v3\/?$/;JA=Zm(zo,{headers:{"user-agent":`octokit-graphql.js/${fx} ${mr()}`},method:"POST",url:"/graphql"})});async function wx(e){let t=$x(e),n=e.startsWith("v1.")||e.startsWith("ghs_"),o=e.startsWith("ghu_");return{type:"token",token:e,tokenType:t?"app":n?"installation":o?"user-to-server":"oauth"}}function Sx(e){return e.split(/\./).length===3?`bearer ${e}`:`token ${e}`}async function kx(e,t,n,o){let r=t.endpoint.merge(n,o);return r.headers.authorization=Sx(e),t(r)}var Vm,b_,y_,$x,__,$_=b(()=>{Vm="(?:[a-zA-Z0-9_-]+)",b_="\\.",y_=new RegExp(`^${Vm}${b_}${Vm}${b_}${Vm}$`),$x=y_.test.bind(y_);__=function(t){if(!t)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof t!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return t=t.replace(/^(token|bearer) +/i,""),Object.assign(wx.bind(null,t),{hook:kx.bind(null,t)})}});var Hm,w_=b(()=>{Hm="7.0.6"});function xx(e={}){return typeof e.debug!="function"&&(e.debug=S_),typeof e.info!="function"&&(e.info=S_),typeof e.warn!="function"&&(e.warn=Tx),typeof e.error!="function"&&(e.error=Ex),e}var S_,Tx,Ex,k_,ia,T_=b(()=>{Do();Hy();Mm();v_();$_();w_();S_=()=>{},Tx=console.warn.bind(console),Ex=console.error.bind(console);k_=`octokit-core.js/${Hm} ${mr()}`,ia=class{static VERSION=Hm;static defaults(t){return class extends this{constructor(...o){let r=o[0]||{};if(typeof t=="function"){super(t(r));return}super(Object.assign({},t,r,r.userAgent&&t.userAgent?{userAgent:`${r.userAgent} ${t.userAgent}`}:null))}}}static plugins=[];static plugin(...t){let n=this.plugins;return class extends this{static plugins=n.concat(t.filter(r=>!n.includes(r)))}}constructor(t={}){let n=new Vy.Collection,o={baseUrl:zo.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},t.request,{hook:n.bind(null,"request")}),mediaType:{previews:[],format:""}};if(o.headers["user-agent"]=t.userAgent?`${t.userAgent} ${k_}`:k_,t.baseUrl&&(o.baseUrl=t.baseUrl),t.previews&&(o.mediaType.previews=t.previews),t.timeZone&&(o.headers["time-zone"]=t.timeZone),this.request=zo.defaults(o),this.graphql=h_(this.request).defaults(o),this.log=xx(t.log),this.hook=n,t.authStrategy){let{authStrategy:i,...s}=t,a=i(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:s},t.auth));n.wrap("request",a.hook),this.auth=a}else if(!t.auth)this.auth=async()=>({type:"unauthenticated"});else{let i=__(t.auth);n.wrap("request",i.hook),this.auth=i}let r=this.constructor;for(let i=0;i<r.plugins.length;++i)Object.assign(this,r.plugins[i](this,t))}request;graphql;log;hook;auth}});var E_,x_=b(()=>{E_="6.0.0"});function qm(e){e.hook.wrap("request",(t,n)=>{e.log.debug("request",n);let o=Date.now(),r=e.request.endpoint.parse(n),i=r.url.replace(n.baseUrl,"");return t(n).then(s=>{let a=s.headers["x-github-request-id"];return e.log.info(`${r.method} ${i} - ${s.status} with id ${a} in ${Date.now()-o}ms`),s}).catch(s=>{let a=s.response?.headers["x-github-request-id"]||"UNKNOWN";throw e.log.error(`${r.method} ${i} - ${s.status} with id ${a} in ${Date.now()-o}ms`),s})})}var R_=b(()=>{x_();qm.VERSION=E_});function Px(e){if(!e.data)return{...e,data:[]};if(!(("total_count"in e.data||"total_commits"in e.data)&&!("url"in e.data)))return e;let n=e.data.incomplete_results,o=e.data.repository_selection,r=e.data.total_count,i=e.data.total_commits;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count,delete e.data.total_commits;let s=Object.keys(e.data)[0],a=e.data[s];return e.data=a,typeof n<"u"&&(e.data.incomplete_results=n),typeof o<"u"&&(e.data.repository_selection=o),e.data.total_count=r,e.data.total_commits=i,e}function Bm(e,t,n){let o=typeof t=="function"?t.endpoint(n):e.request.endpoint(t,n),r=typeof t=="function"?t:e.request,i=o.method,s=o.headers,a=o.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!a)return{done:!0};try{let c=await r({method:i,url:a,headers:s}),u=Px(c);if(a=((u.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!a&&"total_commits"in u.data){let l=new URL(u.url),d=l.searchParams,p=parseInt(d.get("page")||"1",10),g=parseInt(d.get("per_page")||"250",10);p*g<u.data.total_commits&&(d.set("page",String(p+1)),a=l.toString())}return{value:u}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function P_(e,t,n,o){return typeof n=="function"&&(o=n,n=void 0),C_(e,[],Bm(e,t,n)[Symbol.asyncIterator](),o)}function C_(e,t,n,o){return n.next().then(r=>{if(r.done)return t;let i=!1;function s(){i=!0}return t=t.concat(o?o(r.value,s):r.value.data),i?t:C_(e,t,n,o)})}function Wm(e){return{paginate:Object.assign(P_.bind(null,e),{iterator:Bm.bind(null,e)})}}var Rx,pD,O_=b(()=>{Rx="0.0.0-development";pD=Object.assign(P_,{iterator:Bm});Wm.VERSION=Rx});var Jm,I_=b(()=>{Jm="17.0.0"});var Cx,A_,D_=b(()=>{Cx={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"]}},A_=Cx});function Km(e){let t={};for(let n of Ar.keys())t[n]=new Proxy({octokit:e,scope:n,cache:{}},Ox);return t}function Ix(e,t,n,o,r){let i=e.request.defaults(o);function s(...a){let c=i.endpoint.merge(...a);if(r.mapToData)return c=Object.assign({},c,{data:c[r.mapToData],[r.mapToData]:void 0}),i(c);if(r.renamed){let[u,l]=r.renamed;e.log.warn(`octokit.${t}.${n}() has been renamed to octokit.${u}.${l}()`)}if(r.deprecated&&e.log.warn(r.deprecated),r.renamedParameters){let u=i.endpoint.merge(...a);for(let[l,d]of Object.entries(r.renamedParameters))l in u&&(e.log.warn(`"${l}" parameter is deprecated for "octokit.${t}.${n}()". Use "${d}" instead`),d in u||(u[d]=u[l]),delete u[l]);return i(u)}return i(...a)}return Object.assign(s,i)}var Ar,Ox,U_=b(()=>{D_();Ar=new Map;for(let[e,t]of Object.entries(A_))for(let[n,o]of Object.entries(t)){let[r,i,s]=o,[a,c]=r.split(/ /),u=Object.assign({method:a,url:c},i);Ar.has(e)||Ar.set(e,new Map),Ar.get(e).set(n,{scope:e,methodName:n,endpointDefaults:u,decorations:s})}Ox={has({scope:e},t){return Ar.get(e).has(t)},getOwnPropertyDescriptor(e,t){return{value:this.get(e,t),configurable:!0,writable:!0,enumerable:!0}},defineProperty(e,t,n){return Object.defineProperty(e.cache,t,n),!0},deleteProperty(e,t){return delete e.cache[t],!0},ownKeys({scope:e}){return[...Ar.get(e).keys()]},set(e,t,n){return e.cache[t]=n},get({octokit:e,scope:t,cache:n},o){if(n[o])return n[o];let r=Ar.get(t).get(o);if(!r)return;let{endpointDefaults:i,decorations:s}=r;return s?n[o]=Ix(e,t,o,i,s):n[o]=e.request.defaults(i),n[o]}}});function Ax(e){return{rest:Km(e)}}function Xm(e){let t=Km(e);return{...t,rest:t}}var j_=b(()=>{I_();U_();Ax.VERSION=Jm;Xm.VERSION=Jm});var z_,G_=b(()=>{z_="22.0.1"});var F_,L_=b(()=>{T_();R_();O_();j_();G_();F_=ia.plugin(qm,Xm,Wm).defaults({userAgent:`octokit-rest.js/${z_}`})});var N_=Gt((Ym,Qm)=>{(function(e,t){typeof Ym=="object"&&typeof Qm<"u"?Qm.exports=t():typeof define=="function"&&define.amd?define(t):e.Bottleneck=t()})(Ym,(function(){"use strict";var e=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function t(V){return V&&V.default||V}var n=function(V,_,m={}){var w,k,x;for(w in _)x=_[w],m[w]=(k=V[w])!=null?k:x;return m},o=function(V,_,m={}){var w,k;for(w in V)k=V[w],_[w]!==void 0&&(m[w]=k);return m},r={load:n,overwrite:o},i;i=class{constructor(_,m){this.incr=_,this.decr=m,this._first=null,this._last=null,this.length=0}push(_){var m;this.length++,typeof this.incr=="function"&&this.incr(),m={value:_,prev:this._last,next:null},this._last!=null?(this._last.next=m,this._last=m):this._first=this._last=m}shift(){var _;if(this._first!=null)return this.length--,typeof this.decr=="function"&&this.decr(),_=this._first.value,(this._first=this._first.next)!=null?this._first.prev=null:this._last=null,_}first(){if(this._first!=null)return this._first.value}getArray(){var _,m,w;for(_=this._first,w=[];_!=null;)w.push((m=_,_=_.next,m.value));return w}forEachShift(_){var m;for(m=this.shift();m!=null;)_(m),m=this.shift()}debug(){var _,m,w,k,x;for(_=this._first,x=[];_!=null;)x.push((m=_,_=_.next,{value:m.value,prev:(w=m.prev)!=null?w.value:void 0,next:(k=m.next)!=null?k.value:void 0}));return x}};var s=i,a;a=class{constructor(_){if(this.instance=_,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=(m,w)=>this._addListener(m,"many",w),this.instance.once=(m,w)=>this._addListener(m,"once",w),this.instance.removeAllListeners=(m=null)=>m!=null?delete this._events[m]:this._events={}}_addListener(_,m,w){var k;return(k=this._events)[_]==null&&(k[_]=[]),this._events[_].push({cb:w,status:m}),this.instance}listenerCount(_){return this._events[_]!=null?this._events[_].length:0}async trigger(_,...m){var w,k;try{return _!=="debug"&&this.trigger("debug",`Event triggered: ${_}`,m),this._events[_]==null?void 0:(this._events[_]=this._events[_].filter(function(x){return x.status!=="none"}),k=this._events[_].map(async x=>{var D,M;if(x.status!=="none"){x.status==="once"&&(x.status="none");try{return M=typeof x.cb=="function"?x.cb(...m):void 0,typeof M?.then=="function"?await M:M}catch(pe){return D=pe,this.trigger("error",D),null}}}),(await Promise.all(k)).find(function(x){return x!=null}))}catch(x){return w=x,this.trigger("error",w),null}}};var c=a,u,l,d;u=s,l=c,d=class{constructor(_){var m;this.Events=new l(this),this._length=0,this._lists=(function(){var w,k,x;for(x=[],m=w=1,k=_;1<=k?w<=k:w>=k;m=1<=k?++w:--w)x.push(new u((()=>this.incr()),(()=>this.decr())));return x}).call(this)}incr(){if(this._length++===0)return this.Events.trigger("leftzero")}decr(){if(--this._length===0)return this.Events.trigger("zero")}push(_){return this._lists[_.options.priority].push(_)}queued(_){return _!=null?this._lists[_].length:this._length}shiftAll(_){return this._lists.forEach(function(m){return m.forEachShift(_)})}getFirst(_=this._lists){var m,w,k;for(m=0,w=_.length;m<w;m++)if(k=_[m],k.length>0)return k;return[]}shiftLastFrom(_){return this.getFirst(this._lists.slice(_).reverse()).shift()}};var p=d,g;g=class extends Error{};var y=g,S,U,T,L,Z;L=10,U=5,Z=r,S=y,T=class{constructor(_,m,w,k,x,D,M,pe){this.task=_,this.args=m,this.rejectOnDrop=x,this.Events=D,this._states=M,this.Promise=pe,this.options=Z.load(w,k),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===k.id&&(this.options.id=`${this.options.id}-${this._randomIndex()}`),this.promise=new this.Promise((Ne,Ze)=>{this._resolve=Ne,this._reject=Ze}),this.retryCount=0}_sanitizePriority(_){var m;return m=~~_!==_?U:_,m<0?0:m>L-1?L-1:m}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:_,message:m="This job has been dropped by Bottleneck"}={}){return this._states.remove(this.options.id)?(this.rejectOnDrop&&this._reject(_??new S(m)),this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0):!1}_assertStatus(_){var m;if(m=this._states.jobStatus(this.options.id),!(m===_||_==="DONE"&&m===null))throw new S(`Invalid job status ${m}, expected ${_}. 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(_,m){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:_,blocked:m})}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(_,m,w,k){var x,D,M;this.retryCount===0?(this._assertStatus("RUNNING"),this._states.next(this.options.id)):this._assertStatus("EXECUTING"),D={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",D);try{if(M=await(_!=null?_.schedule(this.options,this.task,...this.args):this.task(...this.args)),m())return this.doDone(D),await k(this.options,D),this._assertStatus("DONE"),this._resolve(M)}catch(pe){return x=pe,this._onFailure(x,D,m,w,k)}}doExpire(_,m,w){var k,x;return this._states.jobStatus(this.options.id==="RUNNING")&&this._states.next(this.options.id),this._assertStatus("EXECUTING"),x={args:this.args,options:this.options,retryCount:this.retryCount},k=new S(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(k,x,_,m,w)}async _onFailure(_,m,w,k,x){var D,M;if(w())return D=await this.Events.trigger("failed",_,m),D!=null?(M=~~D,this.Events.trigger("retry",`Retrying ${this.options.id} after ${M} ms`,m),this.retryCount++,k(M)):(this.doDone(m),await x(this.options,m),this._assertStatus("DONE"),this._reject(_))}doDone(_){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",_)}};var N=T,z,R,G;G=r,z=y,R=class{constructor(_,m,w){this.instance=_,this.storeOptions=m,this.clientId=this.instance._randomIndex(),G.load(w,w,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 _;return this.heartbeat==null&&(this.storeOptions.reservoirRefreshInterval!=null&&this.storeOptions.reservoirRefreshAmount!=null||this.storeOptions.reservoirIncreaseInterval!=null&&this.storeOptions.reservoirIncreaseAmount!=null)?typeof(_=this.heartbeat=setInterval(()=>{var m,w,k,x,D;if(x=Date.now(),this.storeOptions.reservoirRefreshInterval!=null&&x>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval&&(this._lastReservoirRefresh=x,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity())),this.storeOptions.reservoirIncreaseInterval!=null&&x>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval&&({reservoirIncreaseAmount:m,reservoirIncreaseMaximum:k,reservoir:D}=this.storeOptions,this._lastReservoirIncrease=x,w=k!=null?Math.min(m,k-D):m,w>0))return this.storeOptions.reservoir+=w,this.instance._drainAll(this.computeCapacity())},this.heartbeatInterval)).unref=="function"?_.unref():void 0:clearInterval(this.heartbeat)}async __publish__(_){return await this.yieldLoop(),this.instance.Events.trigger("message",_.toString())}async __disconnect__(_){return await this.yieldLoop(),clearInterval(this.heartbeat),this.Promise.resolve()}yieldLoop(_=0){return new this.Promise(function(m,w){return setTimeout(m,_)})}computePenalty(){var _;return(_=this.storeOptions.penalty)!=null?_:15*this.storeOptions.minTime||5e3}async __updateSettings__(_){return await this.yieldLoop(),G.overwrite(_,_,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__(_){return await this.yieldLoop(),this._nextRequest+this.timeout<_}computeCapacity(){var _,m;return{maxConcurrent:_,reservoir:m}=this.storeOptions,_!=null&&m!=null?Math.min(_-this._running,m):_!=null?_-this._running:m??null}conditionsCheck(_){var m;return m=this.computeCapacity(),m==null||_<=m}async __incrementReservoir__(_){var m;return await this.yieldLoop(),m=this.storeOptions.reservoir+=_,this.instance._drainAll(this.computeCapacity()),m}async __currentReservoir__(){return await this.yieldLoop(),this.storeOptions.reservoir}isBlocked(_){return this._unblockTime>=_}check(_,m){return this.conditionsCheck(_)&&this._nextRequest-m<=0}async __check__(_){var m;return await this.yieldLoop(),m=Date.now(),this.check(_,m)}async __register__(_,m,w){var k,x;return await this.yieldLoop(),k=Date.now(),this.conditionsCheck(m)?(this._running+=m,this.storeOptions.reservoir!=null&&(this.storeOptions.reservoir-=m),x=Math.max(this._nextRequest-k,0),this._nextRequest=k+x+this.storeOptions.minTime,{success:!0,wait:x,reservoir:this.storeOptions.reservoir}):{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(_,m){var w,k,x;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&m>this.storeOptions.maxConcurrent)throw new z(`Impossible to add a job having a weight of ${m} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);return k=Date.now(),x=this.storeOptions.highWater!=null&&_===this.storeOptions.highWater&&!this.check(m,k),w=this.strategyIsBlock()&&(x||this.isBlocked(k)),w&&(this._unblockTime=k+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued()),{reachedHWM:x,blocked:w,strategy:this.storeOptions.strategy}}async __free__(_,m){return await this.yieldLoop(),this._running-=m,this._done+=m,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var ee=R,q,ae;q=y,ae=class{constructor(_){this.status=_,this._jobs={},this.counts=this.status.map(function(){return 0})}next(_){var m,w;if(m=this._jobs[_],w=m+1,m!=null&&w<this.status.length)return this.counts[m]--,this.counts[w]++,this._jobs[_]++;if(m!=null)return this.counts[m]--,delete this._jobs[_]}start(_){var m;return m=0,this._jobs[_]=m,this.counts[m]++}remove(_){var m;return m=this._jobs[_],m!=null&&(this.counts[m]--,delete this._jobs[_]),m!=null}jobStatus(_){var m;return(m=this.status[this._jobs[_]])!=null?m:null}statusJobs(_){var m,w,k,x,D;if(_!=null){if(w=this.status.indexOf(_),w<0)throw new q(`status must be one of ${this.status.join(", ")}`);k=this._jobs,x=[];for(m in k)D=k[m],D===w&&x.push(m);return x}else return Object.keys(this._jobs)}statusCounts(){return this.counts.reduce(((_,m,w)=>(_[this.status[w]]=m,_)),{})}};var Ge=ae,ve,be;ve=s,be=class{constructor(_,m){this.schedule=this.schedule.bind(this),this.name=_,this.Promise=m,this._running=0,this._queue=new ve}isEmpty(){return this._queue.length===0}async _tryToRun(){var _,m,w,k,x,D,M;if(this._running<1&&this._queue.length>0)return this._running++,{task:M,args:_,resolve:x,reject:k}=this._queue.shift(),m=await(async function(){try{return D=await M(..._),function(){return x(D)}}catch(pe){return w=pe,function(){return k(w)}}})(),this._running--,this._tryToRun(),m()}schedule(_,...m){var w,k,x;return x=k=null,w=new this.Promise(function(D,M){return x=D,k=M}),this._queue.push({task:_,args:m,resolve:x,reject:k}),this._tryToRun(),w}};var pt=be,Fe="2.19.5",tr={version:Fe},Le=Object.freeze({version:Fe,default:tr}),mt=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),Et=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),xt=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),vr,F,X,B,Ce,we;we=r,vr=c,B=mt,X=Et,Ce=xt,F=(function(){class V{constructor(m={}){this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=m,we.load(this.limiterOptions,this.defaults,this),this.Events=new vr(this),this.instances={},this.Bottleneck=af,this._startAutoCleanup(),this.sharedConnection=this.connection!=null,this.connection==null&&(this.limiterOptions.datastore==="redis"?this.connection=new B(Object.assign({},this.limiterOptions,{Events:this.Events})):this.limiterOptions.datastore==="ioredis"&&(this.connection=new X(Object.assign({},this.limiterOptions,{Events:this.Events}))))}key(m=""){var w;return(w=this.instances[m])!=null?w:(()=>{var k;return k=this.instances[m]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${m}`,timeout:this.timeout,connection:this.connection})),this.Events.trigger("created",k,m),k})()}async deleteKey(m=""){var w,k;return k=this.instances[m],this.connection&&(w=await this.connection.__runCommand__(["del",...Ce.allKeys(`${this.id}-${m}`)])),k!=null&&(delete this.instances[m],await k.disconnect()),k!=null||w>0}limiters(){var m,w,k,x;w=this.instances,k=[];for(m in w)x=w[m],k.push({key:m,limiter:x});return k}keys(){return Object.keys(this.instances)}async clusterKeys(){var m,w,k,x,D,M,pe,Ne,Ze;if(this.connection==null)return this.Promise.resolve(this.keys());for(M=[],m=null,Ze=`b_${this.id}-`.length,w=9;m!==0;)for([Ne,k]=await this.connection.__runCommand__(["scan",m??0,"match",`b_${this.id}-*_settings`,"count",1e4]),m=~~Ne,x=0,pe=k.length;x<pe;x++)D=k[x],M.push(D.slice(Ze,-w));return M}_startAutoCleanup(){var m;return clearInterval(this.interval),typeof(m=this.interval=setInterval(async()=>{var w,k,x,D,M,pe;M=Date.now(),x=this.instances,D=[];for(k in x){pe=x[k];try{await pe._store.__groupCheck__(M)?D.push(this.deleteKey(k)):D.push(void 0)}catch(Ne){w=Ne,D.push(pe.Events.trigger("error",w))}}return D},this.timeout/2)).unref=="function"?m.unref():void 0}updateSettings(m={}){if(we.overwrite(m,this.defaults,this),we.overwrite(m,m,this.limiterOptions),m.timeout!=null)return this._startAutoCleanup()}disconnect(m=!0){var w;if(!this.sharedConnection)return(w=this.connection)!=null?w.disconnect(m):void 0}}return V.prototype.defaults={timeout:1e3*60*5,connection:null,Promise,id:"group-key"},V}).call(e);var ke=F,ie,Oe,_e;_e=r,Oe=c,ie=(function(){class V{constructor(m={}){this.options=m,_e.load(this.options,this.defaults,this),this.Events=new Oe(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((m,w)=>this._resolve=m)}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(m){var w;return this._arr.push(m),w=this._promise,this._arr.length===this.maxSize?this._flush():this.maxTime!=null&&this._arr.length===1&&(this._timeout=setTimeout(()=>this._flush(),this.maxTime)),w}}return V.prototype.defaults={maxTime:null,maxSize:null,Promise},V}).call(e);var Be=ie,zt=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),br=t(Le),qr,ef,Ba,Wa,tf,Ja,rf,nf,of,Ka,Rt,sf=[].splice;Ja=10,ef=5,Rt=r,rf=p,Wa=N,tf=ee,nf=zt,Ba=c,of=Ge,Ka=pt,qr=(function(){class V{constructor(m={},...w){var k,x;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(m,w),Rt.load(m,this.instanceDefaults,this),this._queues=new rf(Ja),this._scheduled={},this._states=new of(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new Ba(this),this._submitLock=new Ka("submit",this.Promise),this._registerLock=new Ka("register",this.Promise),x=Rt.load(m,this.storeDefaults,{}),this._store=(function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return k=Rt.load(m,this.redisStoreDefaults,{}),new nf(this,x,k);if(this.datastore==="local")return k=Rt.load(m,this.localStoreDefaults,{}),new tf(this,x,k);throw new V.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}).call(this),this._queues.on("leftzero",()=>{var D;return(D=this._store.heartbeat)!=null&&typeof D.ref=="function"?D.ref():void 0}),this._queues.on("zero",()=>{var D;return(D=this._store.heartbeat)!=null&&typeof D.unref=="function"?D.unref():void 0})}_validateOptions(m,w){if(!(m!=null&&typeof m=="object"&&w.length===0))throw new V.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(m){return this._store.__publish__(m)}disconnect(m=!0){return this._store.__disconnect__(m)}chain(m){return this._limiter=m,this}queued(m){return this._queues.queued(m)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(m){return this._states.jobStatus(m)}jobs(m){return this._states.statusJobs(m)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(m=1){return this._store.__check__(m)}_clearGlobalState(m){return this._scheduled[m]!=null?(clearTimeout(this._scheduled[m].expiration),delete this._scheduled[m],!0):!1}async _free(m,w,k,x){var D,M;try{if({running:M}=await this._store.__free__(m,k.weight),this.Events.trigger("debug",`Freed ${k.id}`,x),M===0&&this.empty())return this.Events.trigger("idle")}catch(pe){return D=pe,this.Events.trigger("error",D)}}_run(m,w,k){var x,D,M;return w.doRun(),x=this._clearGlobalState.bind(this,m),M=this._run.bind(this,m,w),D=this._free.bind(this,m,w),this._scheduled[m]={timeout:setTimeout(()=>w.doExecute(this._limiter,x,M,D),k),expiration:w.options.expiration!=null?setTimeout(function(){return w.doExpire(x,M,D)},k+w.options.expiration):void 0,job:w}}_drainOne(m){return this._registerLock.schedule(()=>{var w,k,x,D,M;return this.queued()===0?this.Promise.resolve(null):(M=this._queues.getFirst(),{options:D,args:w}=x=M.first(),m!=null&&D.weight>m?this.Promise.resolve(null):(this.Events.trigger("debug",`Draining ${D.id}`,{args:w,options:D}),k=this._randomIndex(),this._store.__register__(k,D.weight,D.expiration).then(({success:pe,wait:Ne,reservoir:Ze})=>{var Nn;return this.Events.trigger("debug",`Drained ${D.id}`,{success:pe,args:w,options:D}),pe?(M.shift(),Nn=this.empty(),Nn&&this.Events.trigger("empty"),Ze===0&&this.Events.trigger("depleted",Nn),this._run(k,x,Ne),this.Promise.resolve(D.weight)):this.Promise.resolve(null)})))})}_drainAll(m,w=0){return this._drainOne(m).then(k=>{var x;return k!=null?(x=m!=null?m-k:m,this._drainAll(x,w+k)):this.Promise.resolve(w)}).catch(k=>this.Events.trigger("error",k))}_dropAllQueued(m){return this._queues.shiftAll(function(w){return w.doDrop({message:m})})}stop(m={}){var w,k;return m=Rt.load(m,this.stopDefaults),k=x=>{var D;return D=()=>{var M;return M=this._states.counts,M[0]+M[1]+M[2]+M[3]===x},new this.Promise((M,pe)=>D()?M():this.on("done",()=>{if(D())return this.removeAllListeners("done"),M()}))},w=m.dropWaitingJobs?(this._run=function(x,D){return D.doDrop({message:m.dropErrorMessage})},this._drainOne=()=>this.Promise.resolve(null),this._registerLock.schedule(()=>this._submitLock.schedule(()=>{var x,D,M;D=this._scheduled;for(x in D)M=D[x],this.jobStatus(M.job.options.id)==="RUNNING"&&(clearTimeout(M.timeout),clearTimeout(M.expiration),M.job.doDrop({message:m.dropErrorMessage}));return this._dropAllQueued(m.dropErrorMessage),k(0)}))):this.schedule({priority:Ja-1,weight:0},()=>k(1)),this._receive=function(x){return x._reject(new V.prototype.BottleneckError(m.enqueueErrorMessage))},this.stop=()=>this.Promise.reject(new V.prototype.BottleneckError("stop() has already been called")),w}async _addToQueue(m){var w,k,x,D,M,pe,Ne;({args:w,options:D}=m);try{({reachedHWM:M,blocked:k,strategy:Ne}=await this._store.__submit__(this.queued(),D.weight))}catch(Ze){return x=Ze,this.Events.trigger("debug",`Could not queue ${D.id}`,{args:w,options:D,error:x}),m.doDrop({error:x}),!1}return k?(m.doDrop(),!0):M&&(pe=Ne===V.prototype.strategy.LEAK?this._queues.shiftLastFrom(D.priority):Ne===V.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(D.priority+1):Ne===V.prototype.strategy.OVERFLOW?m:void 0,pe?.doDrop(),pe==null||Ne===V.prototype.strategy.OVERFLOW)?(pe==null&&m.doDrop(),M):(m.doQueue(M,k),this._queues.push(m),await this._drainAll(),M)}_receive(m){return this._states.jobStatus(m.options.id)!=null?(m._reject(new V.prototype.BottleneckError(`A job with the same id already exists (id=${m.options.id})`)),!1):(m.doReceive(),this._submitLock.schedule(this._addToQueue,m))}submit(...m){var w,k,x,D,M,pe,Ne;return typeof m[0]=="function"?(M=m,[k,...m]=M,[w]=sf.call(m,-1),D=Rt.load({},this.jobDefaults)):(pe=m,[D,k,...m]=pe,[w]=sf.call(m,-1),D=Rt.load(D,this.jobDefaults)),Ne=(...Ze)=>new this.Promise(function(Nn,iS){return k(...Ze,function(...cf){return(cf[0]!=null?iS:Nn)(cf)})}),x=new Wa(Ne,m,D,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),x.promise.then(function(Ze){return typeof w=="function"?w(...Ze):void 0}).catch(function(Ze){return Array.isArray(Ze)?typeof w=="function"?w(...Ze):void 0:typeof w=="function"?w(Ze):void 0}),this._receive(x)}schedule(...m){var w,k,x;return typeof m[0]=="function"?([x,...m]=m,k={}):[k,x,...m]=m,w=new Wa(x,m,k,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(w),w.promise}wrap(m){var w,k;return w=this.schedule.bind(this),k=function(...x){return w(m.bind(this),...x)},k.withOptions=function(x,...D){return w(x,m,...D)},k}async updateSettings(m={}){return await this._store.__updateSettings__(Rt.overwrite(m,this.storeDefaults)),Rt.overwrite(m,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(m=0){return this._store.__incrementReservoir__(m)}}return V.default=V,V.Events=Ba,V.version=V.prototype.version=br.version,V.strategy=V.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},V.BottleneckError=V.prototype.BottleneckError=y,V.Group=V.prototype.Group=ke,V.RedisConnection=V.prototype.RedisConnection=mt,V.IORedisConnection=V.prototype.IORedisConnection=Et,V.Batcher=V.prototype.Batcher=Be,V.prototype.jobDefaults={priority:ef,weight:1,expiration:null,id:"<no-id>"},V.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:V.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},V.prototype.localStoreDefaults={Promise,timeout:null,heartbeatInterval:250},V.prototype.redisStoreDefaults={Promise,timeout:null,heartbeatInterval:5e3,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},V.prototype.instanceDefaults={datastore:"local",connection:null,id:"<no-id>",rejectOnDrop:!0,trackDoneStatus:!1,Promise},V.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},V}).call(e);var af=qr,oS=af;return oS}))});function Ux(e,t,n){return e.retryLimiter.schedule(jx,e,t,n)}async function jx(e,t,n){let{pathname:o}=new URL(n.url,"http://github.test"),r=zx(n.method,o),i=!r&&n.method!=="GET"&&n.method!=="HEAD",s=n.method==="GET"&&o.startsWith("/search/"),a=o.startsWith("/graphql"),u=~~t.retryCount>0?{priority:0,weight:0}:{};e.clustering&&(u.expiration=1e3*60),(i||a)&&await e.write.key(e.id).schedule(u,eg),i&&e.triggersNotification(o)&&await e.notifications.key(e.id).schedule(u,eg),s&&await e.search.key(e.id).schedule(u,eg);let l=(r?e.auth:e.global).key(e.id).schedule(u,t,n);if(a){let d=await l;if(d.data.errors!=null&&d.data.errors.some(p=>p.type==="RATE_LIMITED"))throw Object.assign(new Error("GraphQL Rate Limit Exceeded"),{response:d,data:d.data})}return l}function zx(e,t){return e==="PATCH"&&/^\/applications\/[^/]+\/token\/scoped$/.test(t)||e==="POST"&&(/^\/applications\/[^/]+\/token$/.test(t)||/^\/app\/installations\/[^/]+\/access_tokens$/.test(t)||t==="/login/oauth/access_token")}function Fx(e){let n=`^(?:${e.map(o=>o.split("/").map(r=>r.startsWith("{")?"(?:.+?)":r).join("/")).map(o=>`(?:${o})`).join("|")})[^/]*$`;return new RegExp(n,"i")}function sa(e,t){let{enabled:n=!0,Bottleneck:o=Z_.default,id:r="no-id",timeout:i=1e3*60*2,connection:s}=t.throttle||{};if(!n)return{};let a={timeout:i};typeof s<"u"&&(a.connection=s),Dr.global==null&&Lx(o,a);let c=Object.assign({clustering:s!=null,triggersNotification:V_,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new o,id:r,...Dr},t.throttle);if(typeof c.onSecondaryRateLimit!="function"||typeof c.onRateLimit!="function")throw new Error(`octokit/plugin-throttling error:
|
|
75
75
|
You must pass the onSecondaryRateLimit and onRateLimit error handlers.
|
|
76
76
|
See https://octokit.github.io/rest.js/#throttling
|
|
77
77
|
|
|
@@ -81,7 +81,7 @@ The gh CLI is recommended - install from https://cli.github.com`);return e}funct
|
|
|
81
81
|
onRateLimit: (retryAfter, options) => {/* ... */}
|
|
82
82
|
}
|
|
83
83
|
})
|
|
84
|
-
`);let u={},l=new o.Events(u);return u.on("secondary-limit",c.onSecondaryRateLimit),u.on("rate-limit",c.onRateLimit),u.on("error",d=>e.log.warn("Error in throttling-plugin limit handler",d)),c.retryLimiter.on("failed",async function(d,p){let[g,y,S]=p.args,{pathname:U}=new URL(S.url,"http://github.test");if(!(U.startsWith("/graphql")&&d.status!==401||d.status===403||d.status===429))return;let L=~~y.retryCount;y.retryCount=L,S.request.retryCount=L;let{wantRetry:Z,retryAfter:N=0}=await(async function(){if(/\bsecondary rate\b/i.test(d.message)){let z=Number(d.response.headers["retry-after"])||g.fallbackSecondaryRateRetryAfter;return{wantRetry:await l.trigger("secondary-limit",z,S,e,L),retryAfter:z}}if(d.response.headers!=null&&d.response.headers["x-ratelimit-remaining"]==="0"||(d.response.data?.errors??[]).some(z=>z.type==="RATE_LIMITED")){let z=new Date(~~d.response.headers["x-ratelimit-reset"]*1e3).getTime(),R=Math.max(Math.ceil((z-Date.now())/1e3)+1,0);return{wantRetry:await l.trigger("rate-limit",R,S,e,L),retryAfter:R}}return{}})();if(Z)return y.retryCount++,N*g.retryAfterBaseValue}),e.hook.wrap("request",Ux.bind(null,c)),{}}var Z_,Dx,eg,Gx,M_,V_,Dr,Lx,H_=b(()=>{Z_=re(N_(),1),Dx="0.0.0-development",eg=()=>Promise.resolve();Gx=["/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"];M_=Fx(Gx),V_=M_.test.bind(M_),Dr={},Lx=function(e,t){Dr.global=new e.Group({id:"octokit-global",maxConcurrent:10,...t}),Dr.auth=new e.Group({id:"octokit-auth",maxConcurrent:1,...t}),Dr.search=new e.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...t}),Dr.write=new e.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...t}),Dr.notifications=new e.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...t})};sa.VERSION=Dx;sa.triggersNotification=V_});function ua(e){return e.toLocaleTimeString("en-US",{hour12:!1})}function Mx(){return{onRateLimit:(e,t,n,o)=>{let r=t,i=new Date(Date.now()+e*1e3);return o<2?(v(aa,`Rate limit hit (retry ${o+1}/2, waiting ${e}s, resets at ${ua(i)}) \u2014 ${r.method} ${r.url}`),!0):(v(aa,`Rate limit exceeded, not retrying \u2014 ${r.method} ${r.url} (resets at ${ua(i)})`),!1)},onSecondaryRateLimit:(e,t,n,o)=>{let r=t,i=new Date(Date.now()+e*1e3);return o<3?(v(aa,`Secondary rate limit hit (retry ${o+1}/3, waiting ${e}s, resets at ${ua(i)}) \u2014 ${r.method} ${r.url}`),!0):(v(aa,`Secondary rate limit exceeded, not retrying \u2014 ${r.method} ${r.url} (resets at ${ua(i)})`),!1)}}}function je(e){if(ca&&q_===e)return ca;let t=Mx();return ca=new Nx({auth:e,throttle:t}),q_=e,ca}async function tg(e){let t=je(e),{data:n}=await t.rateLimit.get(),o=n.resources.search;return{remaining:o.remaining,limit:o.limit,resetAt:new Date(o.reset*1e3).toISOString()}}var aa,Nx,ca,q_,Dn=b(()=>{"use strict";L_();H_();$e();aa="github",Nx=F_.plugin(sa),ca=null,q_=null});function Hx(e,t){if(!e||!t)return!0;let n=e.toLowerCase();return Zx.has(n)?!0:n===t.toLowerCase()}function qx(e,t){let n=new Date(e).getTime(),o=new Date(t).getTime();return Number.isNaN(n)||Number.isNaN(o)?e>t:n-o>=Vx}function B_(e){let{latestCommitDate:t,latestCommitAuthor:n,contributorUsername:o}=e;if(t)return Hx(n,o)?t:void 0}function W_(e,t,n){return!(!e||!t||!qx(e,t)||n&&e<n)}function J_(e,t){return!e||!t?!1:e>=t}function Bx(e){let{ciStatus:t,hasMergeConflict:n,hasUnrespondedComment:o,hasIncompleteChecklist:r,reviewDecision:i,lastMaintainerCommentDate:s,latestChangesRequestedDate:a,hasActionableCIFailure:c=!0}=e,u=B_(e),l=[];return o&&!W_(u,s,a)&&l.push("needs_response"),i==="changes_requested"&&a&&!J_(u,a)&&l.push("needs_changes"),t==="failing"&&c&&l.push("failing_ci"),n&&l.push("merge_conflict"),r&&l.push("incomplete_checklist"),l.length>0?l:void 0}function rg(e){let t=Wx(e),n=Bx(e);return n?{...t,actionReasons:n}:t}function Wx(e){let{ciStatus:t,hasMergeConflict:n,hasUnrespondedComment:o,hasIncompleteChecklist:r,reviewDecision:i,daysSinceActivity:s,dormantThreshold:a,approachingThreshold:c,lastMaintainerCommentDate:u,latestChangesRequestedDate:l,hasActionableCIFailure:d=!0}=e,p="active";s>=a?p="dormant":s>=c&&(p="approaching_dormant");let g=B_(e);return o?W_(g,u,l)?t==="failing"&&d?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:p}:{status:"needs_addressing",actionReason:"needs_response",stalenessTier:p}:i==="changes_requested"&&l?J_(g,l)?t==="failing"&&d?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:p}:{status:"needs_addressing",actionReason:"needs_changes",stalenessTier:p}:t==="failing"?d?s>=5?{status:"waiting_on_maintainer",waitReason:"stale_ci_failure",stalenessTier:p}:{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"ci_blocked",stalenessTier:p}:n?{status:"needs_addressing",actionReason:"merge_conflict",stalenessTier:p}:r?{status:"needs_addressing",actionReason:"incomplete_checklist",stalenessTier:p}:i==="approved"&&(t==="passing"||t==="unknown")?{status:"waiting_on_maintainer",waitReason:"pending_merge",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"pending_review",stalenessTier:p}}var Zx,Vx,ng=b(()=>{"use strict";Zx=new Set(["autofix-ci[bot]","prettier-ci[bot]","pre-commit-ci[bot]"]),Vx=120*1e3});async function la(e,t,n){let o=0,r=!1,i=async()=>{for(;o<e.length&&!r;){let a=e[o++];try{await t(a)}catch(c){throw r=!0,c}}},s=Math.min(n,e.length);await Promise.all(Array.from({length:s},()=>i()))}var og=b(()=>{"use strict"});async function $t(e,t=100,n=10){let o=[];for(let r=1;r<=n;r++){let{data:i}=await e(r);if(o.push(...i),i.length<t)break}return o}var Go=b(()=>{"use strict"});function wt(){return ig||(ig=new pa),ig}async function Fo(e,t,n){let o=e.getInflight(t);if(o)return E(gr,`Dedup hit for ${t}`),await o;let i=(async()=>{let a={},c=e.get(t);c&&(a["if-none-match"]=c.etag);try{let u=await n(a),l=u.headers?.etag;return l&&e.set(t,l,u.data),u.data}catch(u){if(Kx(u)){let l=e.get(t);if(l)return E(gr,`304 cache hit for ${t}`),l.body}throw u}})(),s=e.setInflight(t,i);try{return await i}finally{s()}}async function ma(e,t,n,o){let r=e.getIfFresh(t,n);if(r)return E(gr,`Time-based cache hit for ${t}`),r;let i=await o();return e.set(t,"",i),i}function Kx(e){return He(e)===304}var st,da,K_,gr,Jx,pa,ig,Ur=b(()=>{"use strict";st=re(require("fs"),1),da=re(require("path"),1),K_=re(require("crypto"),1);Ue();$e();he();gr="http-cache",Jx=1440*60*1e3,pa=class{cacheDir;inflightRequests=new Map;constructor(t){this.cacheDir=t??Bs()}keyFor(t){return K_.createHash("sha256").update(t).digest("hex")}pathFor(t){return da.join(this.cacheDir,`${this.keyFor(t)}.json`)}getIfFresh(t,n){let o=this.get(t);if(!o)return null;let r=Date.now()-new Date(o.cachedAt).getTime();return!Number.isFinite(r)||r<0||r>n?null:o.body}get(t){let n=this.pathFor(t);try{let o=st.readFileSync(n,"utf-8"),r=JSON.parse(o);return r.url!==t?(E(gr,`Cache collision detected for ${t}, ignoring`),null):r}catch{return null}}set(t,n,o){let r={etag:n,url:t,body:o,cachedAt:new Date().toISOString()};try{st.writeFileSync(this.pathFor(t),JSON.stringify(r),{encoding:"utf-8",mode:384}),E(gr,`Cached response for ${t}`)}catch(i){E(gr,`Failed to write cache for ${t}`,i)}}hasInflight(t){return this.inflightRequests.has(t)}getInflight(t){return this.inflightRequests.get(t)}setInflight(t,n){return this.inflightRequests.set(t,n),()=>{this.inflightRequests.delete(t)}}evictStale(t=Jx){let n=0;try{let o=st.readdirSync(this.cacheDir),r=Date.now();for(let i of o){if(!i.endsWith(".json"))continue;let s=da.join(this.cacheDir,i);try{let a=st.readFileSync(s,"utf-8"),c=JSON.parse(a);r-new Date(c.cachedAt).getTime()>t&&(st.unlinkSync(s),n++)}catch{try{st.unlinkSync(s),n++}catch{}}}}catch{}return n>0&&E(gr,`Evicted ${n} stale cache entries`),n}clear(){try{let t=st.readdirSync(this.cacheDir);for(let n of t)n.endsWith(".json")&&st.unlinkSync(da.join(this.cacheDir,n));E(gr,"Cache cleared")}catch{}}size(){try{return st.readdirSync(this.cacheDir).filter(t=>t.endsWith(".json")).length}catch{return 0}}},ig=null});function ga(){return{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}}function sg(e,t,n){if(n==="cancelled"||n==="timed_out")return"infrastructure";if(n==="action_required")return"auth_gate";let o=e.toLowerCase();if(Y_.some(r=>r.test(o)))return"auth_gate";if(X_.some(r=>r.test(o)))return"fork_limitation";if(Q_.some(r=>r.test(o)))return"infrastructure";if(t){let r=t.toLowerCase();if(Y_.some(i=>i.test(r)))return"auth_gate";if(X_.some(i=>i.test(r)))return"fork_limitation";if(Q_.some(i=>i.test(r)))return"infrastructure"}return"actionable"}function fa(e,t){return e.map(n=>{let o=t?.get(n);return{name:n,category:sg(n,void 0,o),conclusion:o}})}function Xx(e){let t=!1,n=!1,o=!1,r=[],i=new Map;for(let s of e)s.conclusion==="failure"||s.conclusion==="cancelled"||s.conclusion==="timed_out"||s.conclusion==="action_required"?(t=!0,r.push(s.name),i.set(s.name,s.conclusion)):s.status==="in_progress"||s.status==="queued"?n=!0:s.conclusion==="success"&&(o=!0);return{hasFailingChecks:t,hasPendingChecks:n,hasSuccessfulChecks:o,failingCheckNames:r,failingCheckConclusions:i}}function Yx(e){let t=e.statuses.filter(c=>{let u=(c.description||"").toLowerCase();return!(c.state==="failure"&&(u.includes("authorization required")||u.includes("authorize")))}),n=t.some(c=>c.state==="failure"||c.state==="error"),o=t.some(c=>c.state==="pending"),r=t.some(c=>c.state==="success"),i;n?i="failure":o?i="pending":r||t.length===0?i="success":i=e.state;let s=e.statuses.length>0,a=[];for(let c of t)(c.state==="failure"||c.state==="error")&&a.push(c.context);return{effectiveCombinedState:i,hasStatuses:s,failingStatusNames:a}}function Qx(e,t,n){let{hasFailingChecks:o,hasPendingChecks:r,hasSuccessfulChecks:i,failingCheckNames:s,failingCheckConclusions:a}=e,{effectiveCombinedState:c,hasStatuses:u,failingStatusNames:l}=t,d=[...s,...l];return o||c==="failure"||c==="error"?{status:"failing",failingCheckNames:d,failingCheckConclusions:a}:r||c==="pending"?{status:"pending",failingCheckNames:[],failingCheckConclusions:new Map}:i||c==="success"?{status:"passing",failingCheckNames:[],failingCheckConclusions:new Map}:ga()}async function ag(e,t,n,o){if(!o)return ga();try{let[r,i]=await Promise.all([e.repos.getCombinedStatusForRef({owner:t,repo:n,ref:o}),e.checks.listForRef({owner:t,repo:n,ref:o}).catch(p=>{let g=He(p);if(g===429)throw p;if(g===403){let y=P(p).toLowerCase();if(y.includes("rate limit")||y.includes("abuse detection"))throw p}return g===404?E("pr-monitor",`Check runs 404 for ${t}/${n}@${o.slice(0,7)} (no checks configured)`):v("pr-monitor",`Non-404 error fetching check runs for ${t}/${n}@${o.slice(0,7)}: ${g??p}`),null})]),s=r.data,a=i?.data?.check_runs||[],c=new Map;for(let p of a){let g=c.get(p.name);(!g||new Date(p.started_at??0)>new Date(g.started_at??0))&&c.set(p.name,p)}let u=[...c.values()],l=Xx(u),d=Yx(s);return Qx(l,d,u.length)}catch(r){let i=He(r);if(i===401||i===403||i===429)throw r;return i===404?E("pr-monitor",`CI check 404 for ${t}/${n} (no CI configured)`):v("pr-monitor",`Failed to check CI for ${t}/${n}@${o.slice(0,7)}: ${P(r)}`),ga()}}var X_,Y_,Q_,cg=b(()=>{"use strict";he();$e();X_=[/vercel/i,/netlify/i,/\bpreview\s*deploy/i,/\bdeploy\s*preview/i,/storybook/i,/chromatic/i,/percy/i,/cloudflare pages/i,/\binternal\b/i],Y_=[/authoriz/i,/approval/i,/\bcla\b/i,/license\/cla/i],Q_=[/\binstall\s*(os\s*)?dep(endenc|s\b)/i,/\bsetup\s+fail(ed|ure)?\b/i,/\bservice\s*unavailable/i,/\binfrastructure/i,/\bblacksmith\b/i,/\breadthedocs\b/i]});function Un(e){return e.includes("[bot]")||eR.has(e.toLowerCase())}function Lo(e){if(!e||e.length>100||e.includes("?"))return!1;let t=e.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(o=>t.includes(o))}var eR,ha=b(()=>{"use strict";eR=new Set(["allcontributors","changeset-bot","claassistant","codecov-commenter","greenkeeper","imgbot","netlify","renovate","snyk-bot","sonarcloud","stale","vercel"])});function e$(e){if(e.length===0)return"review_required";let t=new Map;for(let o of e){let r=o.user?.login,i=o.state;r&&i&&t.set(r,i)}let n=Array.from(t.values());return n.includes("CHANGES_REQUESTED")?"changes_requested":n.includes("APPROVED")?"approved":"review_required"}function t$(e){let t;for(let n of e)n.state==="CHANGES_REQUESTED"&&n.submitted_at&&(!t||n.submitted_at>t)&&(t=n.submitted_at);return t}function tR(e,t){let n=t.filter(r=>r.pull_request_review_id===e);if(n.length===0)return!1;let o=new Map;for(let r of t)r.user?.login&&o.set(r.id,r.user.login.toLowerCase());return n.every(r=>{if(!r.in_reply_to_id)return!1;let i=o.get(r.in_reply_to_id),s=r.user?.login?.toLowerCase();return!(i==null||s==null||i!==s||!r.body||r.body.includes("?"))})}function rR(e,t){return t.find(n=>n.pull_request_review_id===e&&n.body?.trim())?.body?.trim()}function r$(e,t,n,o){let r=[],i=o.toLowerCase();for(let c of e){let u=c.user?.login||"unknown";r.push({author:u,body:c.body||"",createdAt:c.created_at,isUser:u.toLowerCase()===i})}for(let c of t){if(!c.submitted_at)continue;let u=(c.body||"").trim();if(!u&&c.state!=="COMMENTED"&&c.state!=="CHANGES_REQUESTED")continue;let l=c.user?.login||"unknown";if(!u&&c.state==="COMMENTED"&&c.id!=null&&tR(c.id,n))continue;let d=u||(c.id!=null?rR(c.id,n):void 0)||(c.state==="CHANGES_REQUESTED"?"(requested changes via inline review comments)":"(posted inline review comments)");r.push({author:l,body:d,createdAt:c.submitted_at,isUser:l.toLowerCase()===i})}r.sort((c,u)=>new Date(c.createdAt).getTime()-new Date(u.createdAt).getTime());let s=null;for(let c of r)c.isUser&&(s=new Date(c.createdAt));let a;for(let c of r){if(c.isUser||c.author==="unknown"||Un(c.author))continue;let u=new Date(c.createdAt);(!s||u>s)&&(a={author:c.author,body:c.body.slice(0,200)+(c.body.length>200?"...":""),createdAt:c.createdAt})}return a&&Lo(a.body)&&(a=void 0),{hasUnrespondedComment:!!a,lastMaintainerComment:a}}var n$=b(()=>{"use strict";ha()});function o$(e){return nR.test(e.toLowerCase())}function i$(e){if(!e)return{hasIncompleteChecklist:!1};let t=/- \[x\]/gi,n=/^.*- \[ \].*$/gm,o=e.match(t)||[],r=e.match(n)||[],i=o.length;if(i+r.length===0)return{hasIncompleteChecklist:!1};let a=r.filter(u=>!o$(u)),c=i+a.length;return{hasIncompleteChecklist:a.length>0,checklistStats:{checked:i,total:c}}}var nR,ug=b(()=>{"use strict";nR=/\(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 s$(e,t){let n=[];if(t==="changes_requested"&&n.push("changes_requested"),!e)return n;let o=e.toLowerCase();return["screenshot","demo","recording","screen recording","before/after","before and after","gif","video","screencast","show me","can you show"].some(c=>o.includes(c))&&n.push("demo_requested"),["add test","test coverage","unit test","missing test","add a test","write test","needs test","need test"].some(c=>o.includes(c))&&n.push("tests_requested"),["documentation","readme","jsdoc","docstring","add docs","update docs","document this"].some(c=>o.includes(c))&&n.push("docs_requested"),["rebase","merge conflict","out of date","behind main","behind master"].some(c=>o.includes(c))&&n.push("rebase_requested"),n}var a$=b(()=>{"use strict"});function iR(e){let t=c$[e]?.label;return t?t.replace(/[[\]]/g,"").toLowerCase():e}function va(e){if(e.status==="needs_addressing"&&e.actionReason){let t=c$[e.actionReason];if(t){let n=t.description(e);if(e.actionReasons&&e.actionReasons.length>1){let o=e.actionReasons.filter(r=>r!==e.actionReason).map(iR);o.length>0&&(n+=` (also: ${o.join(", ")})`)}return{displayLabel:t.label,displayDescription:n}}}if(e.status==="waiting_on_maintainer"&&e.waitReason){let t=oR[e.waitReason];if(t)return{displayLabel:t.label,displayDescription:t.description(e)}}return v("display-utils",`PR ${e.url} has status "${e.status}" but no matching reason (actionReason=${e.actionReason}, waitReason=${e.waitReason})`),e.status==="needs_addressing"?{displayLabel:"[Needs Addressing]",displayDescription:"Action required"}:{displayLabel:"[Waiting on Maintainer]",displayDescription:"Awaiting maintainer action"}}var c$,oR,lg=b(()=>{"use strict";$e();c$={needs_response:{label:"[Needs Response]",description:e=>e.lastMaintainerComment?`@${e.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:e=>{let t=e.classifiedChecks||[],n=t.filter(i=>i.category==="actionable");if(n.length>0)return`${n.length} check${n.length===1?"":"s"} failed: ${n.map(i=>i.name).join(", ")}`;let o=t.filter(i=>i.category==="infrastructure");if(o.length>0)return`${o.length} check${o.length===1?"":"s"} cancelled/timed out (infrastructure)`;let r=e.failingCheckNames||[];return r.length>0?`${r.length} check${r.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:e=>e.checklistStats?`${e.checklistStats.checked}/${e.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:e=>e.missingRequiredFiles?`Missing: ${e.missingRequiredFiles.join(", ")}`:"Required files are missing"}},oR={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:e=>e.hasUnrespondedComment&&e.lastMaintainerComment?`Changes addressed \u2014 waiting for @${e.lastMaintainerComment.author} to re-review`:"Changes addressed \u2014 awaiting re-review"},ci_blocked:{label:"[CI Blocked]",description:e=>{let t=e.classifiedChecks||[];return t.length>0&&t.every(n=>n.category!=="actionable")?`All failing checks are non-actionable (${[...new Set(t.map(o=>o.category))].join(", ")})`:"CI checks are failing but no action is needed from you"}},stale_ci_failure:{label:"[Stale CI Failure]",description:e=>`CI failing for ${e.daysSinceActivity}+ days \u2014 likely pre-existing or non-actionable`}}});function zr(){return{repos:new Map,monthlyCounts:{},monthlyOpenedCounts:{},dailyActivityCounts:{}}}function aR(e){if(typeof e!="object"||e===null)return!1;let t=e;return Array.isArray(t.reposEntries)&&typeof t.monthlyCounts=="object"&&t.monthlyCounts!==null&&typeof t.monthlyOpenedCounts=="object"&&t.monthlyOpenedCounts!==null&&typeof t.dailyActivityCounts=="object"&&t.dailyActivityCounts!==null}async function u$(e,t,n,o,r,i){if(!t)return zr();let s=wt(),a=i?`:stars${i.minStars}`:"",c=`pr-counts:v3:${o}:${t}${a}`,u=s.getIfFresh(c,sR);if(u&&aR(u))return E(Ee,`Using cached ${o} PR counts for @${t}`),{repos:new Map(u.reposEntries),monthlyCounts:u.monthlyCounts,monthlyOpenedCounts:u.monthlyOpenedCounts,dailyActivityCounts:u.dailyActivityCounts};E(Ee,`Fetching ${o} PR counts for @${t}...`);let l=new Map,d={},p={},g={},y=1,S=0,U;for(;;){let{data:T}=await e.search.issuesAndPullRequests({q:`is:pr ${n} author:${t} -user:${t}`,sort:"updated",order:"desc",per_page:100,page:y});U=T.total_count;for(let L of T.items){let Z=Pr(L.html_url);if(!Z){v(Ee,`Skipping ${o} PR with unparseable URL: ${L.html_url}`);continue}let{owner:N}=Z,z=`${N}/${Z.repo}`;if(bt(N,t)||i&&Wt(i.knownStarCounts.get(z),i.minStars))continue;let R=r(l,z,L);if(R){let G=R.slice(0,7);d[G]=(d[G]||0)+1;let ee=R.slice(0,10);ee.length===10&&(g[ee]=(g[ee]||0)+1)}if(L.created_at){let G=L.created_at.slice(0,7);p[G]=(p[G]||0)+1;let ee=L.created_at.slice(0,10);ee.length===10&&(g[ee]=(g[ee]||0)+1)}}if(S+=T.items.length,S>=T.total_count||S>=1e3||T.items.length===0||y>=jr)break;y++}return S<U&&y>=jr&&v(Ee,`Pagination capped at ${jr} pages: fetched ${S} of ${U} ${o} PRs. Stats may be incomplete for prolific contributors.`),E(Ee,`Found ${S} ${o} PRs across ${l.size} repos`),s.set(c,"",{reposEntries:Array.from(l.entries()),monthlyCounts:d,monthlyOpenedCounts:p,dailyActivityCounts:g}),{repos:l,monthlyCounts:d,monthlyOpenedCounts:p,dailyActivityCounts:g}}function l$(e,t,n){return u$(e,t,"is:merged","merged",(o,r,i)=>{i.pull_request?.merged_at||v(Ee,`merged_at missing for merged PR ${i.html_url}${i.closed_at?", falling back to closed_at":", no date available"}`);let s=i.pull_request?.merged_at||i.closed_at||"",a=o.get(r);return a?(a.count+=1,s&&s>a.lastMergedAt&&(a.lastMergedAt=s)):o.set(r,{count:1,lastMergedAt:s}),s},n)}function d$(e,t,n){return u$(e,t,"is:closed is:unmerged","closed",(o,r,i)=>(o.set(r,(o.get(r)||0)+1),i.closed_at||""),n)}async function p$(e,t,n,o,r,i){if(!t.githubUsername)return v(Ee,`Skipping recently ${o} PRs fetch: no githubUsername configured. Run /setup-oss to configure.`),[];let s=new Date;s.setDate(s.getDate()-r);let a=s.toISOString().split("T")[0];E(Ee,`Fetching recently ${o} PRs for @${t.githubUsername} (since ${a})...`);let{data:c}=await e.search.issuesAndPullRequests({q:n.replace("{username}",t.githubUsername).replace("{since}",a),sort:"updated",order:"desc",per_page:100}),u=[];for(let l of c.items){let d=Pe(l.html_url);if(!d){v(Ee,`Could not parse GitHub URL from API response: ${l.html_url}`);continue}if(bt(d.owner,t.githubUsername))continue;let p=`${d.owner}/${d.repo}`;u.push(i(l,{owner:d.owner,repo:p,number:d.number}))}return E(Ee,`Found ${u.length} recently ${o} PRs`),u}async function m$(e,t,n=7){return p$(e,t,"is:pr is:closed is:unmerged is:public author:{username} closed:>={since}","closed",n,(o,{repo:r,number:i})=>({url:o.html_url,repo:r,number:i,title:o.title,closedAt:o.closed_at||""}))}async function g$(e,t,n=7){return p$(e,t,"is:pr is:merged is:public author:{username} merged:>={since}","merged",n,(o,{repo:r,number:i})=>{let s=o.pull_request?.merged_at;return s||v(Ee,`merged_at missing for merged PR ${o.html_url}${o.closed_at?", falling back to closed_at":", no date available"}`),{url:o.html_url,repo:r,number:i,title:o.title,mergedAt:s||o.closed_at||""}})}async function f$(e,t,n){if(!t.githubUsername)return v(Ee,"Skipping merged PRs fetch: no githubUsername configured."),[];let o=n?` merged:>${n}`:"",r=`is:pr is:merged author:${t.githubUsername} -user:${t.githubUsername}${o}`;E(Ee,`Fetching merged PRs${n?` since ${n}`:" (all time)"}...`);let i=[],s=1,a=0;for(;;){let{data:c}=await e.search.issuesAndPullRequests({q:r,sort:"updated",order:"desc",per_page:100,page:s});for(let u of c.items){let l=Pe(u.html_url);if(!l){v(Ee,`Skipping merged PR with unparseable URL: ${u.html_url}`);continue}if(bt(l.owner,t.githubUsername))continue;let d=u.pull_request?.merged_at||u.closed_at||"";if(!d){v(Ee,`Skipping merged PR with no merge date: ${u.html_url}`);continue}i.push({url:u.html_url,title:u.title,mergedAt:d})}if(a+=c.items.length,a>=c.total_count||a>=1e3||c.items.length===0||s>=jr)break;s++}return E(Ee,`Fetched ${i.length} merged PRs${n?" (incremental)":" (initial)"}`),i}async function h$(e,t,n){if(!t.githubUsername)return v(Ee,"Skipping closed PRs fetch: no githubUsername configured."),[];let o=n?` closed:>${n}`:"",r=`is:pr is:closed is:unmerged author:${t.githubUsername} -user:${t.githubUsername}${o}`;E(Ee,`Fetching closed PRs${n?` since ${n}`:" (all time)"}...`);let i=[],s=1,a=0,c;for(;;){let{data:u}=await e.search.issuesAndPullRequests({q:r,sort:"updated",order:"desc",per_page:100,page:s});c=u.total_count;for(let l of u.items){let d=Pe(l.html_url);if(!d){v(Ee,`Skipping closed PR with unparseable URL: ${l.html_url}`);continue}if(bt(d.owner,t.githubUsername))continue;let p=l.closed_at||"";if(!p){v(Ee,`Skipping closed PR with no close date: ${l.html_url}`);continue}i.push({url:l.html_url,title:l.title,closedAt:p})}if(a+=u.items.length,a>=c||a>=1e3||u.items.length===0||s>=jr)break;s++}return a<c&&s>=jr&&v(Ee,`Pagination capped at ${jr} pages: fetched ${a} of ${c} closed PRs. Oldest PRs may be missing.`),E(Ee,`Fetched ${i.length} closed PRs${n?" (incremental)":" (initial)"}`),i}var Ee,sR,jr,ba=b(()=>{"use strict";Ue();Dt();$e();Ur();Ee="github-stats",sR=1440*60*1e3,jr=3});function cR(e,t){return e===!1||t==="dirty"}var ya,uR,Gr,v$=b(()=>{"use strict";Dn();On();Ue();ng();og();he();Go();$e();Ur();cg();n$();ug();a$();lg();ba();lg();cg();ug();ng();ya="pr-monitor",uR=En,Gr=class{octokit;stateManager;constructor(t){this.octokit=je(t),this.stateManager=K()}async fetchUserOpenPRs(){let t=this.stateManager.getState().config;if(!t.githubUsername)throw new Zt("No GitHub username configured. Run setup first.");E("pr-monitor",`Fetching open PRs for @${t.githubUsername}...`);let n=[],o=1,r=100,i=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open is:public author:${t.githubUsername}`,sort:"updated",order:"desc",per_page:r,page:1});n.push(...i.data.items);let s=i.data.total_count;E("pr-monitor",`Found ${s} open PRs`);let a=Math.min(Math.ceil(s/r),10);for(;o<a;){o++;let d=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open is:public author:${t.githubUsername}`,sort:"updated",order:"desc",per_page:r,page:o});n.push(...d.data.items)}let c=[],u=[],l=n.filter(d=>{if(!d.pull_request)return!1;let p=Pr(d.html_url);return p?!bt(p.owner,t.githubUsername):(v("pr-monitor",`Skipping PR with unparseable URL: ${d.html_url}`),!1)});return E("pr-monitor",`Filtered to ${l.length} PRs after excluding own repos`),await Cm("pr-monitor",`Fetch details for ${l.length} PRs`,async()=>{await la(l,async d=>{try{E("pr-monitor",`Fetching details for ${d.html_url}`);let p=await this.fetchPRDetails(d.html_url);p&&c.push(p)}catch(p){let g=P(p);v("pr-monitor",`Error fetching ${d.html_url}: ${g}`),u.push({prUrl:d.html_url,error:g})}},uR)}),c.sort((d,p)=>d.status===p.status?0:d.status==="needs_addressing"?-1:1),{prs:c,failures:u}}async fetchPRDetails(t){let n=Pe(t);if(!n||n.type!=="pull")throw new fe(`Invalid PR URL format: ${t}`);let{owner:o,repo:r,number:i}=n,s=this.stateManager.getState().config,[a,c,u,l]=await Promise.all([this.octokit.pulls.get({owner:o,repo:r,pull_number:i}),$t(F=>this.octokit.issues.listComments({owner:o,repo:r,issue_number:i,per_page:100,page:F})),this.octokit.pulls.listReviews({owner:o,repo:r,pull_number:i}),$t(F=>this.octokit.pulls.listReviewComments({owner:o,repo:r,pull_number:i,per_page:100,page:F})).catch(F=>{let X=He(F);if(X===429)throw F;if(X===403){let B=P(F).toLowerCase();if(B.includes("rate limit")||B.includes("abuse detection"))throw F;return v("pr-monitor",`403 fetching review comments for ${o}/${r}#${i}: ${B}`),[]}return X===404?E("pr-monitor",`Review comments 404 for ${o}/${r}#${i} (likely no inline comments)`):v("pr-monitor",`Failed to fetch review comments for ${o}/${r}#${i} (status ${X??"unknown"}): self-reply detection will be skipped`),[]})]),d=a.data,p=u.data,g=e$(p),y=cR(d.mergeable,d.mergeable_state),{hasUnrespondedComment:S,lastMaintainerComment:U}=r$(c,p,l,s.githubUsername),T=ag(this.octokit,o,r,d.head.sha),Z=S||g==="changes_requested"?this.octokit.repos.getCommit({owner:o,repo:r,ref:d.head.sha}).then(F=>({date:F.data.commit.author?.date,author:F.data.author?.login})).catch(F=>{let X=He(F);if(X===429)throw F;if(X===403){let B=P(F).toLowerCase();if(B.includes("rate limit")||B.includes("abuse detection"))throw F;v("pr-monitor",`403 fetching commit date for ${o}/${r}@${d.head.sha.slice(0,7)}: ${P(F)}`);return}v("pr-monitor",`Failed to fetch commit date for ${o}/${r}@${d.head.sha.slice(0,7)}: ${P(F)}`)}):Promise.resolve(void 0),[{status:N,failingCheckNames:z,failingCheckConclusions:R},G]=await Promise.all([T,Z]),ee=G?.date,q=G?.author,{hasIncompleteChecklist:ae,checklistStats:Ge}=i$(d.body||""),ve=s$(U?.body,g),be=dt(new Date(d.updated_at),new Date),pt=t$(p),Fe=fa(z,R),tr=N==="failing"&&Fe.some(F=>F.category==="actionable"),{status:Le,actionReason:mt,waitReason:Et,stalenessTier:xt,actionReasons:vr}=rg({ciStatus:N,hasMergeConflict:y,hasUnrespondedComment:S,hasIncompleteChecklist:ae,reviewDecision:g,daysSinceActivity:be,dormantThreshold:s.dormantThresholdDays,approachingThreshold:s.approachingDormantDays,latestCommitDate:ee,latestCommitAuthor:q,contributorUsername:s.githubUsername,lastMaintainerCommentDate:U?.createdAt,latestChangesRequestedDate:pt,hasActionableCIFailure:tr});return this.buildFetchedPR({id:d.id,url:t,repo:`${o}/${r}`,number:i,title:d.title,status:Le,actionReason:mt,waitReason:Et,stalenessTier:xt,actionReasons:vr,createdAt:d.created_at,updatedAt:d.updated_at,daysSinceActivity:be,ciStatus:N,failingCheckNames:z,classifiedChecks:Fe,hasMergeConflict:y,reviewDecision:g,hasUnrespondedComment:S,lastMaintainerComment:U,latestCommitDate:ee,hasIncompleteChecklist:ae,checklistStats:Ge,maintainerActionHints:ve})}buildFetchedPR(t){let n={...t,displayLabel:"",displayDescription:""},{displayLabel:o,displayDescription:r}=va(n);return n.displayLabel=o,n.displayDescription=r,n}async fetchUserMergedPRCounts(t){let n=this.stateManager.getState().config;return l$(this.octokit,n.githubUsername,t)}async fetchUserClosedPRCounts(t){let n=this.stateManager.getState().config;return d$(this.octokit,n.githubUsername,t)}async fetchRepoMetadata(t){if(t.length===0)return new Map;E(ya,`Fetching repo metadata for ${t.length} repos...`);let n=new Map,o=wt(),r=[...new Set(t)],i=10;for(let s=0;s<r.length;s+=i){let a=r.slice(s,s+i),c=await Promise.allSettled(a.map(async l=>{let d=l.split("/");if(d.length!==2||!d[0]||!d[1])throw new fe(`Malformed repo identifier: "${l}"`);let[p,g]=d,y=`/repos/${p}/${g}`,S=await Fo(o,y,T=>this.octokit.repos.get({owner:p,repo:g,headers:T})),U={stars:S.stargazers_count,language:S.language??null};return{repo:l,metadata:U}})),u=0;for(let l=0;l<c.length;l++){let d=c[l];d.status==="fulfilled"?n.set(d.value.repo,d.value.metadata):(u++,v(ya,`Failed to fetch metadata for ${a[l]}: ${P(d.reason)}`))}if(u===a.length&&a.length>0){let l=r.length-s-i;l>0&&v(ya,`Entire chunk failed, aborting remaining ${l} repos`);break}}return E(ya,`Fetched repo metadata for ${n.size}/${t.length} repos`),n}async fetchRecentlyClosedPRs(t=7){let n=this.stateManager.getState().config;return m$(this.octokit,n,t)}async fetchRecentlyMergedPRs(t=7){let n=this.stateManager.getState().config;return g$(this.octokit,n,t)}generateDigest(t,n=[],o=[]){let r=new Date().toISOString(),i=t.filter(c=>c.status==="needs_addressing"),s=t.filter(c=>c.status==="waiting_on_maintainer"),a=this.stateManager.getStats();return{generatedAt:r,openPRs:t,needsAddressingPRs:i,waitingOnMaintainerPRs:s,recentlyClosedPRs:n,recentlyMergedPRs:o,shelvedPRs:[],autoUnshelvedPRs:[],summary:{totalActivePRs:t.length,totalNeedingAttention:i.length,totalMergedAllTime:a.mergedPRs,mergeRate:parseFloat(a.mergeRate)}}}async updateRepoScoreFromObservedPR(t,n){n?this.stateManager.incrementMergedCount(t):this.stateManager.incrementClosedCount(t)}}});function dg(e){if(!e.labels||!Array.isArray(e.labels)||e.labels.length===0)return!1;let n=e.labels.map(o=>(typeof o=="string"?o:o.name||"").toLowerCase()).filter(o=>o.length>0);return n.length===0?!1:n.every(o=>b$.has(o))}function dR(e){return!e.labels||!Array.isArray(e.labels)?!1:e.labels.map(o=>(typeof o=="string"?o:o.name||"").toLowerCase()).filter(o=>lR.has(o)).length>=5}function pR(e){return e?/^.+\s+(question|fact|point|item|task|entry|post|challenge|exercise|example|problem|tip|recipe|snippet)\s+#?\d+$/i.test(e):!1}function y$(e){let t=new Set,n=new Map;for(let o of e){let r=o.repository_url.split("/").slice(-2).join("/");if(dR(o)){t.add(r);continue}o.title&&pR(o.title)&&n.set(r,(n.get(r)||0)+1)}for(let[o,r]of n)r>=3&&t.add(o);return t}function pg(e,t){let n=new Map,o=[];for(let r of e){let i=n.get(r.issue.repo)||0;i<t&&(o.push(r),n.set(r.issue.repo,i+1))}return o}var b$,lR,_a=b(()=>{"use strict";b$=new Set(["documentation","docs","typo","spelling"]);lR=new Set(["good first issue","hacktoberfest","easy","up-for-grabs","first-timers-only","beginner-friendly","beginner","starter","newbie","low-hanging-fruit","community"])});function _$(e,t){let n=0;return e>=5e3?n+=8:e>=500?n+=5:e>=50&&(n+=3),t>=500?n+=4:t>=50&&(n+=2),n}function $$(e){let t=50;e.repoScore!==null&&(t+=e.repoScore*2),t+=e.repoQualityBonus??0,e.mergedPRCount>0&&(t+=15),e.clearRequirements&&(t+=15);let n=new Date(e.issueUpdatedAt),o=dt(n);return o<=14?t+=15:o<=30&&(t+=Math.round(15*(1-(o-14)/16))),e.hasContributionGuidelines&&(t+=10),e.orgHasMergedPRs&&(t+=5),e.matchesPreferredCategory&&(t+=5),e.hasExistingPR&&(t-=30),e.isClaimed&&(t-=20),e.closedWithoutMergeCount>0&&e.mergedPRCount===0&&(t-=15),Math.max(0,Math.min(100,t))}var w$=b(()=>{"use strict";Ue()});function S$(e,t){if(t.length===0)return!1;let n=e.split("/")[0]?.toLowerCase();if(!n)return!1;for(let o of t){let r=gR[o];if(r&&r.some(i=>i.toLowerCase()===n))return!0}return!1}function k$(e){let t=new Set;for(let n of e){let o=mR[n];if(o)for(let r of o)t.add(r)}return[...t]}var mR,gR,mg=b(()=>{"use strict";mR={nonprofit:["nonprofit","social-good","humanitarian","charity","social-impact","civic-tech"],devtools:["developer-tools","devtools","cli","sdk","linter","formatter","build-tool"],infrastructure:["infrastructure","cloud","kubernetes","docker","devops","monitoring","observability"],"web-frameworks":["web-framework","frontend","backend","fullstack","nextjs","react","vue"],"data-ml":["machine-learning","data-science","deep-learning","nlp","data-pipeline","analytics"],education:["education","learning","tutorial","courseware","edtech","teaching"]},gR={nonprofit:["code-for-america","opengovfoundation","ushahidi","hotosm","openfn","democracyearth"],devtools:["eslint","prettier","vitejs","biomejs","oxc-project","ast-grep","turbot"],infrastructure:["kubernetes","hashicorp","grafana","prometheus","open-telemetry","envoyproxy","cncf"],"web-frameworks":["vercel","remix-run","sveltejs","nuxt","astro","redwoodjs","blitz-js"],"data-ml":["huggingface","mlflow","apache","dbt-labs","dagster-io","prefecthq","langchain-ai"],education:["freeCodeCamp","TheOdinProject","exercism","codecademy","oppia","Khan"]}});async function T$(e,t,n,o){try{let{data:r}=await e.search.issuesAndPullRequests({q:`repo:${t}/${n} is:pr ${o}`,per_page:5}),s=(await $t(a=>e.issues.listEventsForTimeline({owner:t,repo:n,issue_number:o,per_page:100,page:a}))).filter(a=>{let c=a;return c.event==="cross-referenced"&&c.source?.issue?.pull_request});return{passed:r.total_count===0&&s.length===0}}catch(r){let i=P(r);return v(gg,`Failed to check for existing PRs on ${t}/${n}#${o}: ${i}. Assuming no existing PR.`),{passed:!0,inconclusive:!0,reason:i}}}async function E$(e,t,n){try{let{data:o}=await e.search.issuesAndPullRequests({q:`repo:${t}/${n} is:pr is:merged author:@me`,per_page:1});return o.total_count}catch(o){let r=P(o);return v(gg,`Could not check merged PRs in ${t}/${n}: ${r}. Defaulting to 0.`),0}}async function x$(e,t,n,o,r){if(r===0)return{passed:!0};try{let s=(await e.paginate(e.issues.listComments,{owner:t,repo:n,issue_number:o,per_page:100},a=>a.data)).slice(-100);for(let a of s){let c=(a.body||"").toLowerCase();if(fR.some(u=>c.includes(u)))return{passed:!1}}return{passed:!0}}catch(i){let s=P(i);return v(gg,`Failed to check claim status on ${t}/${n}#${o}: ${s}. Assuming not claimed.`),{passed:!0,inconclusive:!0,reason:s}}}function R$(e){if(!e||e.length<50)return!1;let t=/\d\.|[-*]\s/.test(e),n=/```/.test(e),o=/expect|should|must|want/i.test(e);return[t,n,o,e.length>200].filter(Boolean).length>=2}var gg,fR,P$=b(()=>{"use strict";Go();he();$e();gg="issue-eligibility",fR=["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"]});function O$(){let e=Date.now();for(let[t,n]of Jt.entries())e-n.fetchedAt>I$&&Jt.delete(t);if(Jt.size>C$){let n=Array.from(Jt.entries()).sort((o,r)=>o[1].fetchedAt-r[1].fetchedAt).slice(0,Jt.size-C$);for(let[o]of n)Jt.delete(o)}}async function A$(e,t,n){let o=wt(),r=`health:${t}/${n}`;try{return await ma(o,r,hR,async()=>{let i=`/repos/${t}/${n}`,s=await Fo(o,i,p=>e.repos.get({owner:t,repo:n,headers:p})),{data:a}=await e.repos.listCommits({owner:t,repo:n,per_page:1}),u=a[0]?.commit?.author?.date||s.pushed_at,l=dt(new Date(u)),d="unknown";try{let{data:p}=await e.actions.listRepoWorkflows({owner:t,repo:n,per_page:1});p.total_count>0&&(d="passing")}catch(p){let g=P(p);v(fg,`Failed to check CI status for ${t}/${n}: ${g}. Defaulting to unknown.`)}return{repo:`${t}/${n}`,lastCommitAt:u,daysSinceLastCommit:l,openIssuesCount:s.open_issues_count,avgIssueResponseDays:0,ciStatus:d,isActive:l<30,stargazersCount:s.stargazers_count,forksCount:s.forks_count}})}catch(i){let s=P(i);return v(fg,`Error checking project health for ${t}/${n}: ${s}`),{repo:`${t}/${n}`,lastCommitAt:"",daysSinceLastCommit:999,openIssuesCount:0,avgIssueResponseDays:0,ciStatus:"unknown",isActive:!1,checkFailed:!0,failureReason:s}}}async function D$(e,t,n){let o=`${t}/${n}`,r=Jt.get(o);if(r&&Date.now()-r.fetchedAt<I$)return r.guidelines;let i=["CONTRIBUTING.md",".github/CONTRIBUTING.md","docs/CONTRIBUTING.md","contributing.md"],s=await Promise.allSettled(i.map(a=>e.repos.getContent({owner:t,repo:n,path:a}).then(({data:c})=>"content"in c?Buffer.from(c.content,"base64").toString("utf-8"):null)));for(let a=0;a<s.length;a++){let c=s[a];if(c.status==="fulfilled"&&c.value){let u=vR(c.value);return Jt.set(o,{guidelines:u,fetchedAt:Date.now()}),O$(),u}if(c.status==="rejected"){let u=c.reason instanceof Error?c.reason.message:String(c.reason);!u.includes("404")&&!u.includes("Not Found")&&v(fg,`Unexpected error fetching ${i[a]} from ${t}/${n}: ${u}`)}}Jt.set(o,{guidelines:void 0,fetchedAt:Date.now()}),O$()}function vR(e){let t={rawContent:e},n=e.toLowerCase();if(n.includes("branch")){let o=e.match(/branch[^\n]*(?:named?|format|convention)[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.branchNamingConvention=o[1])}if(n.includes("conventional commit"))t.commitMessageFormat="conventional commits";else if(n.includes("commit message")){let o=e.match(/commit message[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.commitMessageFormat=o[1])}return n.includes("jest")?t.testFramework="Jest":n.includes("rspec")?t.testFramework="RSpec":n.includes("pytest")?t.testFramework="pytest":n.includes("mocha")&&(t.testFramework="Mocha"),n.includes("eslint")?t.linter="ESLint":n.includes("rubocop")?t.linter="RuboCop":n.includes("prettier")&&(t.formatter="Prettier"),(n.includes("cla")||n.includes("contributor license agreement"))&&(t.claRequired=!0),t}var fg,Jt,I$,hR,C$,U$=b(()=>{"use strict";Ue();he();$e();Ur();fg="repo-health",Jt=new Map,I$=3600*1e3,hR=14400*1e3,C$=100});var hg,bR,yR,$a,j$=b(()=>{"use strict";Ue();he();$e();w$();mg();P$();U$();Ur();hg="issue-vetting",bR=3,yR=900*1e3,$a=class{octokit;stateManager;constructor(t,n){this.octokit=t,this.stateManager=n}async vetIssue(t){let n=wt(),o=`vet:${t}`,r=n.getIfFresh(o,yR);if(r&&typeof r=="object"&&"issue"in r&&"viabilityScore"in r)return E(hg,`Vetting cache hit for ${t}`),r;let i=Pe(t);if(!i||i.type!=="issues")throw new fe(`Invalid issue URL: ${t}`);let{owner:s,repo:a,number:c}=i,u=`${s}/${a}`,{data:l}=await this.octokit.issues.get({owner:s,repo:a,issue_number:c}),[d,p,g,y,S]=await Promise.all([T$(this.octokit,s,a,c),x$(this.octokit,s,a,c,l.comments),A$(this.octokit,s,a),D$(this.octokit,s,a),E$(this.octokit,s,a)]),U=d.passed,T=p.passed,L=R$(l.body||""),Z=g.checkFailed?!0:g.isActive,N={passedAllChecks:U&&T&&Z&&L,checks:{noExistingPR:U,notClaimed:T,projectActive:Z,clearRequirements:L,contributionGuidelinesFound:!!y},contributionGuidelines:y,notes:[]};U||N.notes.push("Existing PR found for this issue"),T||N.notes.push("Issue appears to be claimed by someone"),d.inconclusive&&N.notes.push(`Could not verify absence of existing PRs: ${d.reason||"API error"}`),p.inconclusive&&N.notes.push(`Could not verify claim status: ${p.reason||"API error"}`),g.checkFailed?N.notes.push(`Could not verify project activity: ${g.failureReason||"API error"}`):g.isActive||N.notes.push("Project may be inactive"),L||N.notes.push("Issue requirements are unclear"),y||N.notes.push("No CONTRIBUTING.md found");let z={id:l.id,url:t,repo:u,number:c,title:l.title,status:"candidate",labels:l.labels.map(B=>typeof B=="string"?B:B.name||""),createdAt:l.created_at,updatedAt:l.updated_at,vetted:!0,vettingResult:N},R=[],G=[];U||R.push("Has existing PR"),T||R.push("Already claimed"),!g.isActive&&!g.checkFailed&&R.push("Inactive project"),L||R.push("Unclear requirements"),U&&G.push("No existing PR"),T&&G.push("Not claimed"),g.isActive&&!g.checkFailed&&G.push("Active project"),L&&G.push("Clear requirements"),y&&G.push("Has contribution guidelines");let ee=this.stateManager.getState().config,q=this.stateManager.getRepoScore(u),ae=q&&q.mergedPRCount>0?q.mergedPRCount:S;ae>0?G.push(`Trusted project (${ae} PR${ae>1?"s":""} merged)`):ee.trustedProjects.includes(u)&&G.push("Trusted project (previous PR merged)"),q&&(q.closedWithoutMergeCount>0&&ae===0?R.push("User has rejected PR(s) in this repo with no successful merges"):q.closedWithoutMergeCount>0&&ae>0&&N.notes.push(`Mixed history: ${ae} merged, ${q.closedWithoutMergeCount} closed without merge`));let Ge=u.split("/")[0],ve=!1;Ge&&u.includes("/")&&(ve=Object.values(this.stateManager.getState().repoScores).some(B=>B.repo&&B.mergedPRCount>0&&B.repo.startsWith(Ge+"/")&&B.repo!==u)),ve&&G.push(`Org affinity (merged PRs in other ${Ge} repos)`);let be=ee.projectCategories??[],pt=S$(u,be);pt&&G.push("Matches preferred project category");let Fe;N.passedAllChecks?Fe="approve":R.length>2?Fe="skip":Fe="needs_review";let tr=g.checkFailed||d.inconclusive||p.inconclusive;Fe==="approve"&&tr&&(Fe="needs_review",N.notes.push("Recommendation downgraded: one or more checks were inconclusive"));let Le=_$(g.stargazersCount??0,g.forksCount??0);g.checkFailed&&Le===0&&N.notes.push("Repo quality bonus unavailable: could not fetch star/fork counts due to API error");let mt=this.getRepoScore(u),Et=$$({repoScore:mt,hasExistingPR:!U,isClaimed:!T,clearRequirements:L,hasContributionGuidelines:!!y,issueUpdatedAt:l.updated_at,closedWithoutMergeCount:q?.closedWithoutMergeCount??0,mergedPRCount:ae,orgHasMergedPRs:ve,repoQualityBonus:Le,matchesPreferredCategory:pt}),xt=this.stateManager.getStarredRepos(),vr=ee.preferredOrgs??[],F="normal";ae>0?F="merged_pr":vr.some(B=>B.toLowerCase()===Ge?.toLowerCase())?F="preferred_org":xt.includes(u)&&(F="starred");let X={issue:z,vettingResult:N,projectHealth:g,recommendation:Fe,reasonsToSkip:R,reasonsToApprove:G,viabilityScore:Et,searchPriority:F};return n.set(o,"",X),X}async vetIssuesParallel(t,n,o){let r=[],i=new Map,s=0,a=0,c=0;for(let l of t){if(r.length>=n)break;c++;let d=this.vetIssue(l).then(p=>{r.length<n&&(o&&(p.searchPriority=o),r.push(p))}).catch(p=>{s++,Vt(p)&&a++,v(hg,`Error vetting issue ${l}:`,P(p))}).finally(()=>i.delete(l));i.set(l,d),i.size>=bR&&await Promise.race(i.values())}await Promise.allSettled(i.values());let u=s===c&&c>0;return u&&v(hg,`All ${c} issue(s) failed vetting. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:r.slice(0,n),allFailed:u,rateLimitHit:a>0}}getRepoScore(t){return this.stateManager.getState().repoScores?.[t]?.score??null}}});function $R(e,t=0){let n=z$-t+1;if(n<1)return e.length>0&&v(Fr,`Label filtering disabled: ${t} repo/org ORs exceed GitHub's ${z$} operator limit. All ${e.length} label(s) dropped from query.`),[[]];if(e.length<=n)return[e];let o=[];for(let r=0;r<e.length;r+=n)o.push(e.slice(r,r+n));return E(Fr,`Split ${e.length} labels into ${o.length} chunks (${t} ops reserved, max ${n} per chunk)`),o}function wR(e){return e.length===0?"":e.length===1?`label:"${e[0]}"`:`(${e.map(t=>`label:"${t}"`).join(" OR ")})`}function F$(e,t){let n=new Set;for(let o of e)for(let r of Io[o]??[])n.add(r);for(let o of t)n.add(o);return[...n]}function L$(e){let t=[],n=Math.max(...e.map(o=>o.length),0);for(let o=0;o<n;o++)for(let r of e)o<r.length&&t.push(r[o]);return t}function SR(e,t){let n=[];for(let o=0;o<e.length;o+=t)n.push(e.slice(o,o+t));return n}async function vg(e,t){let n=`search:${t.q}:${t.sort}:${t.order}:${t.per_page}`;return ma(wt(),n,kR,async()=>{let{data:o}=await e.search.issuesAndPullRequests(t);return o})}async function wa(e,t,n,o,r){let i=$R(t,n),s=new Set,a=[];for(let c=0;c<i.length;c++){c>0&&await qt(G$);let u=o(wR(i[c])),l=await vg(e,{q:u,sort:"created",order:"desc",per_page:r});for(let d of l.items)s.has(d.html_url)||(s.add(d.html_url),a.push(d))}return a}async function bg(e,t,n,o,r,i,s){let a=y$(t);if(a.size>0){let y=t.filter(S=>a.has(S.repository_url.split("/").slice(-2).join("/"))).length;E(Fr,`[SPAM_FILTER] Filtered ${y} issues from ${a.size} label-farming repos: ${[...a].join(", ")}`)}let c=n(t).filter(y=>{let S=y.repository_url.split("/").slice(-2).join("/");return a.has(S)?!1:o.every(U=>!U.has(S))}).slice(0,r*2);if(c.length===0)return E(Fr,`[${s}] All ${t.length} items filtered before vetting`),{candidates:[],allVetFailed:!1,rateLimitHit:!1};let{candidates:u,allFailed:l,rateLimitHit:d}=await e.vetIssuesParallel(c.map(y=>y.html_url),r,"normal"),p=u.filter(y=>y.projectHealth.checkFailed?!0:(y.projectHealth.stargazersCount??0)>=i),g=u.length-p.length;return g>0&&E(Fr,`[STAR_FILTER] Filtered ${g} ${s} candidates below ${i} stars`),{candidates:p,allVetFailed:l,rateLimitHit:d}}async function Sa(e,t,n,o,r,i,s,a){let c=[],u=SR(n,_R),l=0,d=0;for(let y=0;y<u.length;y++){let S=u[y];if(c.length>=i)break;y>0&&await qt(G$);try{let U=S.map(N=>`repo:${N}`).join(" OR "),T=S.length-1,L=Math.min(30,(i-c.length)*3),Z=await wa(e,r,T,N=>`${o} ${N} (${U})`.replace(/ +/g," ").trim(),L);if(Z.length>0){let N=a(Z),z=i-c.length,{candidates:R,rateLimitHit:G}=await t.vetIssuesParallel(N.slice(0,z*2).map(ee=>ee.html_url),z,s);c.push(...R),G&&d++}}catch(U){l++,Vt(U)&&d++;let T=S.join(", ");v(Fr,`Error searching issues in batch [${T}]:`,P(U))}}let p=l===u.length&&u.length>0,g=d>0;return p&&v(Fr,`All ${u.length} batch(es) failed for ${s} phase. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:c,allBatchesFailed:p,rateLimitHit:g}}var Fr,z$,G$,_R,kR,N$=b(()=>{"use strict";Dt();he();$e();Ur();_a();Ue();Fr="search-phases",z$=5,G$=1500,_R=3;kR=900*1e3});var M$,Z$,ue,ka,No,Ta,Kt,V$=b(()=>{"use strict";M$=re(require("fs"),1),Z$=re(require("path"),1);Dn();On();Ue();Dt();he();$e();_a();j$();mg();N$();ue="issue-discovery",ka=2e3,No=20,Ta=10,Kt=class{octokit;stateManager;githubToken;vetter;rateLimitWarning=null;constructor(t){this.githubToken=t,this.octokit=je(t),this.stateManager=K(),this.vetter=new $a(this.octokit,this.stateManager)}async fetchStarredRepos(){Re(ue,"Fetching starred repositories...");let t=[];try{let n=this.octokit.paginate.iterator(this.octokit.activity.listReposStarredByAuthenticatedUser,{per_page:100}),o=0;for await(let{data:r}of n){for(let i of r){let s;"full_name"in i&&typeof i.full_name=="string"?s=i.full_name:"repo"in i&&i.repo&&typeof i.repo=="object"&&"full_name"in i.repo&&(s=i.repo.full_name),s&&t.push(s)}if(o++,o>=5){Re(ue,"Reached pagination limit for starred repos (500)");break}}return Re(ue,`Fetched ${t.length} starred repositories`),this.stateManager.setStarredRepos(t),t}catch(n){let o=this.stateManager.getStarredRepos(),r=P(n);return v(ue,"Error fetching starred repos:",r),o.length===0?v(ue,`Failed to fetch starred repositories from GitHub API. No cached repos available. Error: ${r}
|
|
84
|
+
`);let u={},l=new o.Events(u);return u.on("secondary-limit",c.onSecondaryRateLimit),u.on("rate-limit",c.onRateLimit),u.on("error",d=>e.log.warn("Error in throttling-plugin limit handler",d)),c.retryLimiter.on("failed",async function(d,p){let[g,y,S]=p.args,{pathname:U}=new URL(S.url,"http://github.test");if(!(U.startsWith("/graphql")&&d.status!==401||d.status===403||d.status===429))return;let L=~~y.retryCount;y.retryCount=L,S.request.retryCount=L;let{wantRetry:Z,retryAfter:N=0}=await(async function(){if(/\bsecondary rate\b/i.test(d.message)){let z=Number(d.response.headers["retry-after"])||g.fallbackSecondaryRateRetryAfter;return{wantRetry:await l.trigger("secondary-limit",z,S,e,L),retryAfter:z}}if(d.response.headers!=null&&d.response.headers["x-ratelimit-remaining"]==="0"||(d.response.data?.errors??[]).some(z=>z.type==="RATE_LIMITED")){let z=new Date(~~d.response.headers["x-ratelimit-reset"]*1e3).getTime(),R=Math.max(Math.ceil((z-Date.now())/1e3)+1,0);return{wantRetry:await l.trigger("rate-limit",R,S,e,L),retryAfter:R}}return{}})();if(Z)return y.retryCount++,N*g.retryAfterBaseValue}),e.hook.wrap("request",Ux.bind(null,c)),{}}var Z_,Dx,eg,Gx,M_,V_,Dr,Lx,H_=b(()=>{Z_=re(N_(),1),Dx="0.0.0-development",eg=()=>Promise.resolve();Gx=["/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"];M_=Fx(Gx),V_=M_.test.bind(M_),Dr={},Lx=function(e,t){Dr.global=new e.Group({id:"octokit-global",maxConcurrent:10,...t}),Dr.auth=new e.Group({id:"octokit-auth",maxConcurrent:1,...t}),Dr.search=new e.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...t}),Dr.write=new e.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...t}),Dr.notifications=new e.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...t})};sa.VERSION=Dx;sa.triggersNotification=V_});function ua(e){return e.toLocaleTimeString("en-US",{hour12:!1})}function Mx(){return{onRateLimit:(e,t,n,o)=>{let r=t,i=new Date(Date.now()+e*1e3);return o<2?(v(aa,`Rate limit hit (retry ${o+1}/2, waiting ${e}s, resets at ${ua(i)}) \u2014 ${r.method} ${r.url}`),!0):(v(aa,`Rate limit exceeded, not retrying \u2014 ${r.method} ${r.url} (resets at ${ua(i)})`),!1)},onSecondaryRateLimit:(e,t,n,o)=>{let r=t,i=new Date(Date.now()+e*1e3);return o<3?(v(aa,`Secondary rate limit hit (retry ${o+1}/3, waiting ${e}s, resets at ${ua(i)}) \u2014 ${r.method} ${r.url}`),!0):(v(aa,`Secondary rate limit exceeded, not retrying \u2014 ${r.method} ${r.url} (resets at ${ua(i)})`),!1)}}}function je(e){if(ca&&q_===e)return ca;let t=Mx();return ca=new Nx({auth:e,throttle:t}),q_=e,ca}async function tg(e){let t=je(e),{data:n}=await t.rateLimit.get(),o=n.resources.search;return{remaining:o.remaining,limit:o.limit,resetAt:new Date(o.reset*1e3).toISOString()}}var aa,Nx,ca,q_,Dn=b(()=>{"use strict";L_();H_();$e();aa="github",Nx=F_.plugin(sa),ca=null,q_=null});function Hx(e,t){if(!e||!t)return!0;let n=e.toLowerCase();return Zx.has(n)?!0:n===t.toLowerCase()}function qx(e,t){let n=new Date(e).getTime(),o=new Date(t).getTime();return Number.isNaN(n)||Number.isNaN(o)?e>t:n-o>=Vx}function B_(e){let{latestCommitDate:t,latestCommitAuthor:n,contributorUsername:o}=e;if(t)return Hx(n,o)?t:void 0}function W_(e,t,n){return!(!e||!t||!qx(e,t)||n&&e<n)}function J_(e,t){return!e||!t?!1:e>=t}function Bx(e){let{ciStatus:t,hasMergeConflict:n,hasUnrespondedComment:o,hasIncompleteChecklist:r,reviewDecision:i,lastMaintainerCommentDate:s,latestChangesRequestedDate:a,hasActionableCIFailure:c=!0}=e,u=B_(e),l=[];return o&&!W_(u,s,a)&&l.push("needs_response"),i==="changes_requested"&&a&&!J_(u,a)&&l.push("needs_changes"),t==="failing"&&c&&l.push("failing_ci"),n&&l.push("merge_conflict"),r&&l.push("incomplete_checklist"),l.length>0?l:void 0}function rg(e){let t=Wx(e),n=Bx(e);return n?{...t,actionReasons:n}:t}function Wx(e){let{ciStatus:t,hasMergeConflict:n,hasUnrespondedComment:o,hasIncompleteChecklist:r,reviewDecision:i,daysSinceActivity:s,dormantThreshold:a,approachingThreshold:c,lastMaintainerCommentDate:u,latestChangesRequestedDate:l,hasActionableCIFailure:d=!0}=e,p="active";s>=a?p="dormant":s>=c&&(p="approaching_dormant");let g=B_(e);return o?W_(g,u,l)?t==="failing"&&d?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:p}:{status:"needs_addressing",actionReason:"needs_response",stalenessTier:p}:i==="changes_requested"&&l?J_(g,l)?t==="failing"&&d?{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"changes_addressed",stalenessTier:p}:{status:"needs_addressing",actionReason:"needs_changes",stalenessTier:p}:t==="failing"?d?s>=5?{status:"waiting_on_maintainer",waitReason:"stale_ci_failure",stalenessTier:p}:{status:"needs_addressing",actionReason:"failing_ci",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"ci_blocked",stalenessTier:p}:n?{status:"needs_addressing",actionReason:"merge_conflict",stalenessTier:p}:r?{status:"needs_addressing",actionReason:"incomplete_checklist",stalenessTier:p}:i==="approved"&&(t==="passing"||t==="unknown")?{status:"waiting_on_maintainer",waitReason:"pending_merge",stalenessTier:p}:{status:"waiting_on_maintainer",waitReason:"pending_review",stalenessTier:p}}var Zx,Vx,ng=b(()=>{"use strict";Zx=new Set(["autofix-ci[bot]","prettier-ci[bot]","pre-commit-ci[bot]"]),Vx=120*1e3});async function la(e,t,n){let o=0,r=!1,i=async()=>{for(;o<e.length&&!r;){let a=e[o++];try{await t(a)}catch(c){throw r=!0,c}}},s=Math.min(n,e.length);await Promise.all(Array.from({length:s},()=>i()))}var og=b(()=>{"use strict"});async function $t(e,t=100,n=10){let o=[];for(let r=1;r<=n;r++){let{data:i}=await e(r);if(o.push(...i),i.length<t)break}return o}var Go=b(()=>{"use strict"});function wt(){return ig||(ig=new pa),ig}async function Fo(e,t,n){let o=e.getInflight(t);if(o)return E(gr,`Dedup hit for ${t}`),await o;let i=(async()=>{let a={},c=e.get(t);c&&(a["if-none-match"]=c.etag);try{let u=await n(a),l=u.headers?.etag;return l&&e.set(t,l,u.data),u.data}catch(u){if(Kx(u)){let l=e.get(t);if(l)return E(gr,`304 cache hit for ${t}`),l.body}throw u}})(),s=e.setInflight(t,i);try{return await i}finally{s()}}async function ma(e,t,n,o){let r=e.getIfFresh(t,n);if(r)return E(gr,`Time-based cache hit for ${t}`),r;let i=await o();return e.set(t,"",i),i}function Kx(e){return He(e)===304}var st,da,K_,gr,Jx,pa,ig,Ur=b(()=>{"use strict";st=re(require("fs"),1),da=re(require("path"),1),K_=re(require("crypto"),1);Ue();$e();he();gr="http-cache",Jx=1440*60*1e3,pa=class{cacheDir;inflightRequests=new Map;constructor(t){this.cacheDir=t??Bs()}keyFor(t){return K_.createHash("sha256").update(t).digest("hex")}pathFor(t){return da.join(this.cacheDir,`${this.keyFor(t)}.json`)}getIfFresh(t,n){let o=this.get(t);if(!o)return null;let r=Date.now()-new Date(o.cachedAt).getTime();return!Number.isFinite(r)||r<0||r>n?null:o.body}get(t){let n=this.pathFor(t);try{let o=st.readFileSync(n,"utf-8"),r=JSON.parse(o);return r.url!==t?(E(gr,`Cache collision detected for ${t}, ignoring`),null):r}catch{return null}}set(t,n,o){let r={etag:n,url:t,body:o,cachedAt:new Date().toISOString()};try{st.writeFileSync(this.pathFor(t),JSON.stringify(r),{encoding:"utf-8",mode:384}),E(gr,`Cached response for ${t}`)}catch(i){E(gr,`Failed to write cache for ${t}`,i)}}hasInflight(t){return this.inflightRequests.has(t)}getInflight(t){return this.inflightRequests.get(t)}setInflight(t,n){return this.inflightRequests.set(t,n),()=>{this.inflightRequests.delete(t)}}evictStale(t=Jx){let n=0;try{let o=st.readdirSync(this.cacheDir),r=Date.now();for(let i of o){if(!i.endsWith(".json"))continue;let s=da.join(this.cacheDir,i);try{let a=st.readFileSync(s,"utf-8"),c=JSON.parse(a);r-new Date(c.cachedAt).getTime()>t&&(st.unlinkSync(s),n++)}catch{try{st.unlinkSync(s),n++}catch{}}}}catch{}return n>0&&E(gr,`Evicted ${n} stale cache entries`),n}clear(){try{let t=st.readdirSync(this.cacheDir);for(let n of t)n.endsWith(".json")&&st.unlinkSync(da.join(this.cacheDir,n));E(gr,"Cache cleared")}catch{}}size(){try{return st.readdirSync(this.cacheDir).filter(t=>t.endsWith(".json")).length}catch{return 0}}},ig=null});function ga(){return{status:"unknown",failingCheckNames:[],failingCheckConclusions:new Map}}function sg(e,t,n){if(n==="cancelled"||n==="timed_out")return"infrastructure";if(n==="action_required")return"auth_gate";let o=e.toLowerCase();if(Y_.some(r=>r.test(o)))return"auth_gate";if(X_.some(r=>r.test(o)))return"fork_limitation";if(Q_.some(r=>r.test(o)))return"infrastructure";if(t){let r=t.toLowerCase();if(Y_.some(i=>i.test(r)))return"auth_gate";if(X_.some(i=>i.test(r)))return"fork_limitation";if(Q_.some(i=>i.test(r)))return"infrastructure"}return"actionable"}function fa(e,t){return e.map(n=>{let o=t?.get(n);return{name:n,category:sg(n,void 0,o),conclusion:o}})}function Xx(e){let t=!1,n=!1,o=!1,r=[],i=new Map;for(let s of e)s.conclusion==="failure"||s.conclusion==="cancelled"||s.conclusion==="timed_out"||s.conclusion==="action_required"?(t=!0,r.push(s.name),i.set(s.name,s.conclusion)):s.status==="in_progress"||s.status==="queued"?n=!0:s.conclusion==="success"&&(o=!0);return{hasFailingChecks:t,hasPendingChecks:n,hasSuccessfulChecks:o,failingCheckNames:r,failingCheckConclusions:i}}function Yx(e){let t=e.statuses.filter(c=>{let u=(c.description||"").toLowerCase();return!(c.state==="failure"&&(u.includes("authorization required")||u.includes("authorize")))}),n=t.some(c=>c.state==="failure"||c.state==="error"),o=t.some(c=>c.state==="pending"),r=t.some(c=>c.state==="success"),i;n?i="failure":o?i="pending":r||t.length===0?i="success":i=e.state;let s=e.statuses.length>0,a=[];for(let c of t)(c.state==="failure"||c.state==="error")&&a.push(c.context);return{effectiveCombinedState:i,hasStatuses:s,failingStatusNames:a}}function Qx(e,t,n){let{hasFailingChecks:o,hasPendingChecks:r,hasSuccessfulChecks:i,failingCheckNames:s,failingCheckConclusions:a}=e,{effectiveCombinedState:c,hasStatuses:u,failingStatusNames:l}=t,d=[...s,...l];return o||c==="failure"||c==="error"?{status:"failing",failingCheckNames:d,failingCheckConclusions:a}:r||c==="pending"?{status:"pending",failingCheckNames:[],failingCheckConclusions:new Map}:i||c==="success"?{status:"passing",failingCheckNames:[],failingCheckConclusions:new Map}:ga()}async function ag(e,t,n,o){if(!o)return ga();try{let[r,i]=await Promise.all([e.repos.getCombinedStatusForRef({owner:t,repo:n,ref:o}),e.checks.listForRef({owner:t,repo:n,ref:o}).catch(p=>{let g=He(p);if(g===429)throw p;if(g===403){let y=P(p).toLowerCase();if(y.includes("rate limit")||y.includes("abuse detection"))throw p}return g===404?E("pr-monitor",`Check runs 404 for ${t}/${n}@${o.slice(0,7)} (no checks configured)`):v("pr-monitor",`Non-404 error fetching check runs for ${t}/${n}@${o.slice(0,7)}: ${g??p}`),null})]),s=r.data,a=i?.data?.check_runs||[],c=new Map;for(let p of a){let g=c.get(p.name);(!g||new Date(p.started_at??0)>new Date(g.started_at??0))&&c.set(p.name,p)}let u=[...c.values()],l=Xx(u),d=Yx(s);return Qx(l,d,u.length)}catch(r){let i=He(r);if(i===401||i===403||i===429)throw r;return i===404?E("pr-monitor",`CI check 404 for ${t}/${n} (no CI configured)`):v("pr-monitor",`Failed to check CI for ${t}/${n}@${o.slice(0,7)}: ${P(r)}`),ga()}}var X_,Y_,Q_,cg=b(()=>{"use strict";he();$e();X_=[/vercel/i,/netlify/i,/\bpreview\s*deploy/i,/\bdeploy\s*preview/i,/storybook/i,/chromatic/i,/percy/i,/cloudflare pages/i,/\binternal\b/i],Y_=[/authoriz/i,/approval/i,/\bcla\b/i,/license\/cla/i],Q_=[/\binstall\s*(os\s*)?dep(endenc|s\b)/i,/\bsetup\s+fail(ed|ure)?\b/i,/\bservice\s*unavailable/i,/\binfrastructure/i,/\bblacksmith\b/i,/\breadthedocs\b/i]});function Un(e){return e.includes("[bot]")||eR.has(e.toLowerCase())}function Lo(e){if(!e||e.length>100||e.includes("?"))return!1;let t=e.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(o=>t.includes(o))}var eR,ha=b(()=>{"use strict";eR=new Set(["allcontributors","changeset-bot","claassistant","codecov-commenter","greenkeeper","imgbot","netlify","renovate","snyk-bot","sonarcloud","stale","vercel"])});function e$(e){if(e.length===0)return"review_required";let t=new Map;for(let o of e){let r=o.user?.login,i=o.state;r&&i&&t.set(r,i)}let n=Array.from(t.values());return n.includes("CHANGES_REQUESTED")?"changes_requested":n.includes("APPROVED")?"approved":"review_required"}function t$(e){let t;for(let n of e)n.state==="CHANGES_REQUESTED"&&n.submitted_at&&(!t||n.submitted_at>t)&&(t=n.submitted_at);return t}function tR(e,t){let n=t.filter(r=>r.pull_request_review_id===e);if(n.length===0)return!1;let o=new Map;for(let r of t)r.user?.login&&o.set(r.id,r.user.login.toLowerCase());return n.every(r=>{if(!r.in_reply_to_id)return!1;let i=o.get(r.in_reply_to_id),s=r.user?.login?.toLowerCase();return!(i==null||s==null||i!==s||!r.body||r.body.includes("?"))})}function rR(e,t){return t.find(n=>n.pull_request_review_id===e&&n.body?.trim())?.body?.trim()}function nR(e,t){return t.some(n=>n.pull_request_review_id===e)}function r$(e,t,n,o){let r=[],i=o.toLowerCase();for(let l of e){let d=l.user?.login||"unknown";r.push({author:d,body:l.body||"",createdAt:l.created_at,isUser:d.toLowerCase()===i})}for(let l of t){if(!l.submitted_at)continue;let d=(l.body||"").trim();if(!d&&l.state!=="COMMENTED"&&l.state!=="CHANGES_REQUESTED")continue;let p=l.user?.login||"unknown";if(!d&&l.state==="COMMENTED"&&l.id!=null&&tR(l.id,n))continue;let g=d||(l.id!=null?rR(l.id,n):void 0)||(l.state==="CHANGES_REQUESTED"?"(requested changes via inline review comments)":"(posted inline review comments)");r.push({author:p,body:g,createdAt:l.submitted_at,isUser:p.toLowerCase()===i,reviewId:l.id})}r.sort((l,d)=>new Date(l.createdAt).getTime()-new Date(d.createdAt).getTime());let s=null;for(let l of r)l.isUser&&(s=new Date(l.createdAt));let a,c;for(let l of r){if(l.isUser||l.author==="unknown"||Un(l.author))continue;let d=new Date(l.createdAt);(!s||d>s)&&(a={author:l.author,body:l.body.slice(0,200)+(l.body.length>200?"...":""),createdAt:l.createdAt},c=l.reviewId)}let u=c!=null&&nR(c,n);return a&&Lo(a.body)&&!u&&(a=void 0),{hasUnrespondedComment:!!a,lastMaintainerComment:a}}var n$=b(()=>{"use strict";ha()});function o$(e){return oR.test(e.toLowerCase())}function i$(e){if(!e)return{hasIncompleteChecklist:!1};let t=/- \[x\]/gi,n=/^.*- \[ \].*$/gm,o=e.match(t)||[],r=e.match(n)||[],i=o.length;if(i+r.length===0)return{hasIncompleteChecklist:!1};let a=r.filter(u=>!o$(u)),c=i+a.length;return{hasIncompleteChecklist:a.length>0,checklistStats:{checked:i,total:c}}}var oR,ug=b(()=>{"use strict";oR=/\(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 s$(e,t){let n=[];if(t==="changes_requested"&&n.push("changes_requested"),!e)return n;let o=e.toLowerCase();return["screenshot","demo","recording","screen recording","before/after","before and after","gif","video","screencast","show me","can you show"].some(c=>o.includes(c))&&n.push("demo_requested"),["add test","test coverage","unit test","missing test","add a test","write test","needs test","need test"].some(c=>o.includes(c))&&n.push("tests_requested"),["documentation","readme","jsdoc","docstring","add docs","update docs","document this"].some(c=>o.includes(c))&&n.push("docs_requested"),["rebase","merge conflict","out of date","behind main","behind master"].some(c=>o.includes(c))&&n.push("rebase_requested"),n}var a$=b(()=>{"use strict"});function sR(e){let t=c$[e]?.label;return t?t.replace(/[[\]]/g,"").toLowerCase():e}function va(e){if(e.status==="needs_addressing"&&e.actionReason){let t=c$[e.actionReason];if(t){let n=t.description(e);if(e.actionReasons&&e.actionReasons.length>1){let o=e.actionReasons.filter(r=>r!==e.actionReason).map(sR);o.length>0&&(n+=` (also: ${o.join(", ")})`)}return{displayLabel:t.label,displayDescription:n}}}if(e.status==="waiting_on_maintainer"&&e.waitReason){let t=iR[e.waitReason];if(t)return{displayLabel:t.label,displayDescription:t.description(e)}}return v("display-utils",`PR ${e.url} has status "${e.status}" but no matching reason (actionReason=${e.actionReason}, waitReason=${e.waitReason})`),e.status==="needs_addressing"?{displayLabel:"[Needs Addressing]",displayDescription:"Action required"}:{displayLabel:"[Waiting on Maintainer]",displayDescription:"Awaiting maintainer action"}}var c$,iR,lg=b(()=>{"use strict";$e();c$={needs_response:{label:"[Needs Response]",description:e=>e.lastMaintainerComment?`@${e.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:e=>{let t=e.classifiedChecks||[],n=t.filter(i=>i.category==="actionable");if(n.length>0)return`${n.length} check${n.length===1?"":"s"} failed: ${n.map(i=>i.name).join(", ")}`;let o=t.filter(i=>i.category==="infrastructure");if(o.length>0)return`${o.length} check${o.length===1?"":"s"} cancelled/timed out (infrastructure)`;let r=e.failingCheckNames||[];return r.length>0?`${r.length} check${r.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:e=>e.checklistStats?`${e.checklistStats.checked}/${e.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:e=>e.missingRequiredFiles?`Missing: ${e.missingRequiredFiles.join(", ")}`:"Required files are missing"}},iR={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:e=>e.hasUnrespondedComment&&e.lastMaintainerComment?`Changes addressed \u2014 waiting for @${e.lastMaintainerComment.author} to re-review`:"Changes addressed \u2014 awaiting re-review"},ci_blocked:{label:"[CI Blocked]",description:e=>{let t=e.classifiedChecks||[];return t.length>0&&t.every(n=>n.category!=="actionable")?`All failing checks are non-actionable (${[...new Set(t.map(o=>o.category))].join(", ")})`:"CI checks are failing but no action is needed from you"}},stale_ci_failure:{label:"[Stale CI Failure]",description:e=>`CI failing for ${e.daysSinceActivity}+ days \u2014 likely pre-existing or non-actionable`}}});function zr(){return{repos:new Map,monthlyCounts:{},monthlyOpenedCounts:{},dailyActivityCounts:{}}}function cR(e){if(typeof e!="object"||e===null)return!1;let t=e;return Array.isArray(t.reposEntries)&&typeof t.monthlyCounts=="object"&&t.monthlyCounts!==null&&typeof t.monthlyOpenedCounts=="object"&&t.monthlyOpenedCounts!==null&&typeof t.dailyActivityCounts=="object"&&t.dailyActivityCounts!==null}async function u$(e,t,n,o,r,i){if(!t)return zr();let s=wt(),a=i?`:stars${i.minStars}`:"",c=`pr-counts:v3:${o}:${t}${a}`,u=s.getIfFresh(c,aR);if(u&&cR(u))return E(Ee,`Using cached ${o} PR counts for @${t}`),{repos:new Map(u.reposEntries),monthlyCounts:u.monthlyCounts,monthlyOpenedCounts:u.monthlyOpenedCounts,dailyActivityCounts:u.dailyActivityCounts};E(Ee,`Fetching ${o} PR counts for @${t}...`);let l=new Map,d={},p={},g={},y=1,S=0,U;for(;;){let{data:T}=await e.search.issuesAndPullRequests({q:`is:pr ${n} author:${t} -user:${t}`,sort:"updated",order:"desc",per_page:100,page:y});U=T.total_count;for(let L of T.items){let Z=Pr(L.html_url);if(!Z){v(Ee,`Skipping ${o} PR with unparseable URL: ${L.html_url}`);continue}let{owner:N}=Z,z=`${N}/${Z.repo}`;if(bt(N,t)||i&&Wt(i.knownStarCounts.get(z),i.minStars))continue;let R=r(l,z,L);if(R){let G=R.slice(0,7);d[G]=(d[G]||0)+1;let ee=R.slice(0,10);ee.length===10&&(g[ee]=(g[ee]||0)+1)}if(L.created_at){let G=L.created_at.slice(0,7);p[G]=(p[G]||0)+1;let ee=L.created_at.slice(0,10);ee.length===10&&(g[ee]=(g[ee]||0)+1)}}if(S+=T.items.length,S>=T.total_count||S>=1e3||T.items.length===0||y>=jr)break;y++}return S<U&&y>=jr&&v(Ee,`Pagination capped at ${jr} pages: fetched ${S} of ${U} ${o} PRs. Stats may be incomplete for prolific contributors.`),E(Ee,`Found ${S} ${o} PRs across ${l.size} repos`),s.set(c,"",{reposEntries:Array.from(l.entries()),monthlyCounts:d,monthlyOpenedCounts:p,dailyActivityCounts:g}),{repos:l,monthlyCounts:d,monthlyOpenedCounts:p,dailyActivityCounts:g}}function l$(e,t,n){return u$(e,t,"is:merged","merged",(o,r,i)=>{i.pull_request?.merged_at||v(Ee,`merged_at missing for merged PR ${i.html_url}${i.closed_at?", falling back to closed_at":", no date available"}`);let s=i.pull_request?.merged_at||i.closed_at||"",a=o.get(r);return a?(a.count+=1,s&&s>a.lastMergedAt&&(a.lastMergedAt=s)):o.set(r,{count:1,lastMergedAt:s}),s},n)}function d$(e,t,n){return u$(e,t,"is:closed is:unmerged","closed",(o,r,i)=>(o.set(r,(o.get(r)||0)+1),i.closed_at||""),n)}async function p$(e,t,n,o,r,i){if(!t.githubUsername)return v(Ee,`Skipping recently ${o} PRs fetch: no githubUsername configured. Run /setup-oss to configure.`),[];let s=new Date;s.setDate(s.getDate()-r);let a=s.toISOString().split("T")[0];E(Ee,`Fetching recently ${o} PRs for @${t.githubUsername} (since ${a})...`);let{data:c}=await e.search.issuesAndPullRequests({q:n.replace("{username}",t.githubUsername).replace("{since}",a),sort:"updated",order:"desc",per_page:100}),u=[];for(let l of c.items){let d=Pe(l.html_url);if(!d){v(Ee,`Could not parse GitHub URL from API response: ${l.html_url}`);continue}if(bt(d.owner,t.githubUsername))continue;let p=`${d.owner}/${d.repo}`;u.push(i(l,{owner:d.owner,repo:p,number:d.number}))}return E(Ee,`Found ${u.length} recently ${o} PRs`),u}async function m$(e,t,n=7){return p$(e,t,"is:pr is:closed is:unmerged is:public author:{username} closed:>={since}","closed",n,(o,{repo:r,number:i})=>({url:o.html_url,repo:r,number:i,title:o.title,closedAt:o.closed_at||""}))}async function g$(e,t,n=7){return p$(e,t,"is:pr is:merged is:public author:{username} merged:>={since}","merged",n,(o,{repo:r,number:i})=>{let s=o.pull_request?.merged_at;return s||v(Ee,`merged_at missing for merged PR ${o.html_url}${o.closed_at?", falling back to closed_at":", no date available"}`),{url:o.html_url,repo:r,number:i,title:o.title,mergedAt:s||o.closed_at||""}})}async function f$(e,t,n){if(!t.githubUsername)return v(Ee,"Skipping merged PRs fetch: no githubUsername configured."),[];let o=n?` merged:>${n}`:"",r=`is:pr is:merged author:${t.githubUsername} -user:${t.githubUsername}${o}`;E(Ee,`Fetching merged PRs${n?` since ${n}`:" (all time)"}...`);let i=[],s=1,a=0;for(;;){let{data:c}=await e.search.issuesAndPullRequests({q:r,sort:"updated",order:"desc",per_page:100,page:s});for(let u of c.items){let l=Pe(u.html_url);if(!l){v(Ee,`Skipping merged PR with unparseable URL: ${u.html_url}`);continue}if(bt(l.owner,t.githubUsername))continue;let d=u.pull_request?.merged_at||u.closed_at||"";if(!d){v(Ee,`Skipping merged PR with no merge date: ${u.html_url}`);continue}i.push({url:u.html_url,title:u.title,mergedAt:d})}if(a+=c.items.length,a>=c.total_count||a>=1e3||c.items.length===0||s>=jr)break;s++}return E(Ee,`Fetched ${i.length} merged PRs${n?" (incremental)":" (initial)"}`),i}async function h$(e,t,n){if(!t.githubUsername)return v(Ee,"Skipping closed PRs fetch: no githubUsername configured."),[];let o=n?` closed:>${n}`:"",r=`is:pr is:closed is:unmerged author:${t.githubUsername} -user:${t.githubUsername}${o}`;E(Ee,`Fetching closed PRs${n?` since ${n}`:" (all time)"}...`);let i=[],s=1,a=0,c;for(;;){let{data:u}=await e.search.issuesAndPullRequests({q:r,sort:"updated",order:"desc",per_page:100,page:s});c=u.total_count;for(let l of u.items){let d=Pe(l.html_url);if(!d){v(Ee,`Skipping closed PR with unparseable URL: ${l.html_url}`);continue}if(bt(d.owner,t.githubUsername))continue;let p=l.closed_at||"";if(!p){v(Ee,`Skipping closed PR with no close date: ${l.html_url}`);continue}i.push({url:l.html_url,title:l.title,closedAt:p})}if(a+=u.items.length,a>=c||a>=1e3||u.items.length===0||s>=jr)break;s++}return a<c&&s>=jr&&v(Ee,`Pagination capped at ${jr} pages: fetched ${a} of ${c} closed PRs. Oldest PRs may be missing.`),E(Ee,`Fetched ${i.length} closed PRs${n?" (incremental)":" (initial)"}`),i}var Ee,aR,jr,ba=b(()=>{"use strict";Ue();Dt();$e();Ur();Ee="github-stats",aR=1440*60*1e3,jr=3});function uR(e,t){return e===!1||t==="dirty"}var ya,lR,Gr,v$=b(()=>{"use strict";Dn();On();Ue();ng();og();he();Go();$e();Ur();cg();n$();ug();a$();lg();ba();lg();cg();ug();ng();ya="pr-monitor",lR=En,Gr=class{octokit;stateManager;constructor(t){this.octokit=je(t),this.stateManager=K()}async fetchUserOpenPRs(){let t=this.stateManager.getState().config;if(!t.githubUsername)throw new Zt("No GitHub username configured. Run setup first.");E("pr-monitor",`Fetching open PRs for @${t.githubUsername}...`);let n=[],o=1,r=100,i=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open is:public author:${t.githubUsername}`,sort:"updated",order:"desc",per_page:r,page:1});n.push(...i.data.items);let s=i.data.total_count;E("pr-monitor",`Found ${s} open PRs`);let a=Math.min(Math.ceil(s/r),10);for(;o<a;){o++;let d=await this.octokit.search.issuesAndPullRequests({q:`is:pr is:open is:public author:${t.githubUsername}`,sort:"updated",order:"desc",per_page:r,page:o});n.push(...d.data.items)}let c=[],u=[],l=n.filter(d=>{if(!d.pull_request)return!1;let p=Pr(d.html_url);return p?!bt(p.owner,t.githubUsername):(v("pr-monitor",`Skipping PR with unparseable URL: ${d.html_url}`),!1)});return E("pr-monitor",`Filtered to ${l.length} PRs after excluding own repos`),await Cm("pr-monitor",`Fetch details for ${l.length} PRs`,async()=>{await la(l,async d=>{try{E("pr-monitor",`Fetching details for ${d.html_url}`);let p=await this.fetchPRDetails(d.html_url);p&&c.push(p)}catch(p){let g=P(p);v("pr-monitor",`Error fetching ${d.html_url}: ${g}`),u.push({prUrl:d.html_url,error:g})}},lR)}),c.sort((d,p)=>d.status===p.status?0:d.status==="needs_addressing"?-1:1),{prs:c,failures:u}}async fetchPRDetails(t){let n=Pe(t);if(!n||n.type!=="pull")throw new fe(`Invalid PR URL format: ${t}`);let{owner:o,repo:r,number:i}=n,s=this.stateManager.getState().config,[a,c,u,l]=await Promise.all([this.octokit.pulls.get({owner:o,repo:r,pull_number:i}),$t(F=>this.octokit.issues.listComments({owner:o,repo:r,issue_number:i,per_page:100,page:F})),this.octokit.pulls.listReviews({owner:o,repo:r,pull_number:i}),$t(F=>this.octokit.pulls.listReviewComments({owner:o,repo:r,pull_number:i,per_page:100,page:F})).catch(F=>{let X=He(F);if(X===429)throw F;if(X===403){let B=P(F).toLowerCase();if(B.includes("rate limit")||B.includes("abuse detection"))throw F;return v("pr-monitor",`403 fetching review comments for ${o}/${r}#${i}: ${B}`),[]}return X===404?E("pr-monitor",`Review comments 404 for ${o}/${r}#${i} (likely no inline comments)`):v("pr-monitor",`Failed to fetch review comments for ${o}/${r}#${i} (status ${X??"unknown"}): self-reply detection will be skipped`),[]})]),d=a.data,p=u.data,g=e$(p),y=uR(d.mergeable,d.mergeable_state),{hasUnrespondedComment:S,lastMaintainerComment:U}=r$(c,p,l,s.githubUsername),T=ag(this.octokit,o,r,d.head.sha),Z=S||g==="changes_requested"?this.octokit.repos.getCommit({owner:o,repo:r,ref:d.head.sha}).then(F=>({date:F.data.commit.author?.date,author:F.data.author?.login})).catch(F=>{let X=He(F);if(X===429)throw F;if(X===403){let B=P(F).toLowerCase();if(B.includes("rate limit")||B.includes("abuse detection"))throw F;v("pr-monitor",`403 fetching commit date for ${o}/${r}@${d.head.sha.slice(0,7)}: ${P(F)}`);return}v("pr-monitor",`Failed to fetch commit date for ${o}/${r}@${d.head.sha.slice(0,7)}: ${P(F)}`)}):Promise.resolve(void 0),[{status:N,failingCheckNames:z,failingCheckConclusions:R},G]=await Promise.all([T,Z]),ee=G?.date,q=G?.author,{hasIncompleteChecklist:ae,checklistStats:Ge}=i$(d.body||""),ve=s$(U?.body,g),be=dt(new Date(d.updated_at),new Date),pt=t$(p),Fe=fa(z,R),tr=N==="failing"&&Fe.some(F=>F.category==="actionable"),{status:Le,actionReason:mt,waitReason:Et,stalenessTier:xt,actionReasons:vr}=rg({ciStatus:N,hasMergeConflict:y,hasUnrespondedComment:S,hasIncompleteChecklist:ae,reviewDecision:g,daysSinceActivity:be,dormantThreshold:s.dormantThresholdDays,approachingThreshold:s.approachingDormantDays,latestCommitDate:ee,latestCommitAuthor:q,contributorUsername:s.githubUsername,lastMaintainerCommentDate:U?.createdAt,latestChangesRequestedDate:pt,hasActionableCIFailure:tr});return this.buildFetchedPR({id:d.id,url:t,repo:`${o}/${r}`,number:i,title:d.title,status:Le,actionReason:mt,waitReason:Et,stalenessTier:xt,actionReasons:vr,createdAt:d.created_at,updatedAt:d.updated_at,daysSinceActivity:be,ciStatus:N,failingCheckNames:z,classifiedChecks:Fe,hasMergeConflict:y,reviewDecision:g,hasUnrespondedComment:S,lastMaintainerComment:U,latestCommitDate:ee,hasIncompleteChecklist:ae,checklistStats:Ge,maintainerActionHints:ve})}buildFetchedPR(t){let n={...t,displayLabel:"",displayDescription:""},{displayLabel:o,displayDescription:r}=va(n);return n.displayLabel=o,n.displayDescription=r,n}async fetchUserMergedPRCounts(t){let n=this.stateManager.getState().config;return l$(this.octokit,n.githubUsername,t)}async fetchUserClosedPRCounts(t){let n=this.stateManager.getState().config;return d$(this.octokit,n.githubUsername,t)}async fetchRepoMetadata(t){if(t.length===0)return new Map;E(ya,`Fetching repo metadata for ${t.length} repos...`);let n=new Map,o=wt(),r=[...new Set(t)],i=10;for(let s=0;s<r.length;s+=i){let a=r.slice(s,s+i),c=await Promise.allSettled(a.map(async l=>{let d=l.split("/");if(d.length!==2||!d[0]||!d[1])throw new fe(`Malformed repo identifier: "${l}"`);let[p,g]=d,y=`/repos/${p}/${g}`,S=await Fo(o,y,T=>this.octokit.repos.get({owner:p,repo:g,headers:T})),U={stars:S.stargazers_count,language:S.language??null};return{repo:l,metadata:U}})),u=0;for(let l=0;l<c.length;l++){let d=c[l];d.status==="fulfilled"?n.set(d.value.repo,d.value.metadata):(u++,v(ya,`Failed to fetch metadata for ${a[l]}: ${P(d.reason)}`))}if(u===a.length&&a.length>0){let l=r.length-s-i;l>0&&v(ya,`Entire chunk failed, aborting remaining ${l} repos`);break}}return E(ya,`Fetched repo metadata for ${n.size}/${t.length} repos`),n}async fetchRecentlyClosedPRs(t=7){let n=this.stateManager.getState().config;return m$(this.octokit,n,t)}async fetchRecentlyMergedPRs(t=7){let n=this.stateManager.getState().config;return g$(this.octokit,n,t)}generateDigest(t,n=[],o=[]){let r=new Date().toISOString(),i=t.filter(c=>c.status==="needs_addressing"),s=t.filter(c=>c.status==="waiting_on_maintainer"),a=this.stateManager.getStats();return{generatedAt:r,openPRs:t,needsAddressingPRs:i,waitingOnMaintainerPRs:s,recentlyClosedPRs:n,recentlyMergedPRs:o,shelvedPRs:[],autoUnshelvedPRs:[],summary:{totalActivePRs:t.length,totalNeedingAttention:i.length,totalMergedAllTime:a.mergedPRs,mergeRate:parseFloat(a.mergeRate)}}}async updateRepoScoreFromObservedPR(t,n){n?this.stateManager.incrementMergedCount(t):this.stateManager.incrementClosedCount(t)}}});function dg(e){if(!e.labels||!Array.isArray(e.labels)||e.labels.length===0)return!1;let n=e.labels.map(o=>(typeof o=="string"?o:o.name||"").toLowerCase()).filter(o=>o.length>0);return n.length===0?!1:n.every(o=>b$.has(o))}function pR(e){return!e.labels||!Array.isArray(e.labels)?!1:e.labels.map(o=>(typeof o=="string"?o:o.name||"").toLowerCase()).filter(o=>dR.has(o)).length>=5}function mR(e){return e?/^.+\s+(question|fact|point|item|task|entry|post|challenge|exercise|example|problem|tip|recipe|snippet)\s+#?\d+$/i.test(e):!1}function y$(e){let t=new Set,n=new Map;for(let o of e){let r=o.repository_url.split("/").slice(-2).join("/");if(pR(o)){t.add(r);continue}o.title&&mR(o.title)&&n.set(r,(n.get(r)||0)+1)}for(let[o,r]of n)r>=3&&t.add(o);return t}function pg(e,t){let n=new Map,o=[];for(let r of e){let i=n.get(r.issue.repo)||0;i<t&&(o.push(r),n.set(r.issue.repo,i+1))}return o}var b$,dR,_a=b(()=>{"use strict";b$=new Set(["documentation","docs","typo","spelling"]);dR=new Set(["good first issue","hacktoberfest","easy","up-for-grabs","first-timers-only","beginner-friendly","beginner","starter","newbie","low-hanging-fruit","community"])});function _$(e,t){let n=0;return e>=5e3?n+=8:e>=500?n+=5:e>=50&&(n+=3),t>=500?n+=4:t>=50&&(n+=2),n}function $$(e){let t=50;e.repoScore!==null&&(t+=e.repoScore*2),t+=e.repoQualityBonus??0,e.mergedPRCount>0&&(t+=15),e.clearRequirements&&(t+=15);let n=new Date(e.issueUpdatedAt),o=dt(n);return o<=14?t+=15:o<=30&&(t+=Math.round(15*(1-(o-14)/16))),e.hasContributionGuidelines&&(t+=10),e.orgHasMergedPRs&&(t+=5),e.matchesPreferredCategory&&(t+=5),e.hasExistingPR&&(t-=30),e.isClaimed&&(t-=20),e.closedWithoutMergeCount>0&&e.mergedPRCount===0&&(t-=15),Math.max(0,Math.min(100,t))}var w$=b(()=>{"use strict";Ue()});function S$(e,t){if(t.length===0)return!1;let n=e.split("/")[0]?.toLowerCase();if(!n)return!1;for(let o of t){let r=fR[o];if(r&&r.some(i=>i.toLowerCase()===n))return!0}return!1}function k$(e){let t=new Set;for(let n of e){let o=gR[n];if(o)for(let r of o)t.add(r)}return[...t]}var gR,fR,mg=b(()=>{"use strict";gR={nonprofit:["nonprofit","social-good","humanitarian","charity","social-impact","civic-tech"],devtools:["developer-tools","devtools","cli","sdk","linter","formatter","build-tool"],infrastructure:["infrastructure","cloud","kubernetes","docker","devops","monitoring","observability"],"web-frameworks":["web-framework","frontend","backend","fullstack","nextjs","react","vue"],"data-ml":["machine-learning","data-science","deep-learning","nlp","data-pipeline","analytics"],education:["education","learning","tutorial","courseware","edtech","teaching"]},fR={nonprofit:["code-for-america","opengovfoundation","ushahidi","hotosm","openfn","democracyearth"],devtools:["eslint","prettier","vitejs","biomejs","oxc-project","ast-grep","turbot"],infrastructure:["kubernetes","hashicorp","grafana","prometheus","open-telemetry","envoyproxy","cncf"],"web-frameworks":["vercel","remix-run","sveltejs","nuxt","astro","redwoodjs","blitz-js"],"data-ml":["huggingface","mlflow","apache","dbt-labs","dagster-io","prefecthq","langchain-ai"],education:["freeCodeCamp","TheOdinProject","exercism","codecademy","oppia","Khan"]}});async function T$(e,t,n,o){try{let{data:r}=await e.search.issuesAndPullRequests({q:`repo:${t}/${n} is:pr ${o}`,per_page:5}),s=(await $t(a=>e.issues.listEventsForTimeline({owner:t,repo:n,issue_number:o,per_page:100,page:a}))).filter(a=>{let c=a;return c.event==="cross-referenced"&&c.source?.issue?.pull_request});return{passed:r.total_count===0&&s.length===0}}catch(r){let i=P(r);return v(gg,`Failed to check for existing PRs on ${t}/${n}#${o}: ${i}. Assuming no existing PR.`),{passed:!0,inconclusive:!0,reason:i}}}async function E$(e,t,n){try{let{data:o}=await e.search.issuesAndPullRequests({q:`repo:${t}/${n} is:pr is:merged author:@me`,per_page:1});return o.total_count}catch(o){let r=P(o);return v(gg,`Could not check merged PRs in ${t}/${n}: ${r}. Defaulting to 0.`),0}}async function x$(e,t,n,o,r){if(r===0)return{passed:!0};try{let s=(await e.paginate(e.issues.listComments,{owner:t,repo:n,issue_number:o,per_page:100},a=>a.data)).slice(-100);for(let a of s){let c=(a.body||"").toLowerCase();if(hR.some(u=>c.includes(u)))return{passed:!1}}return{passed:!0}}catch(i){let s=P(i);return v(gg,`Failed to check claim status on ${t}/${n}#${o}: ${s}. Assuming not claimed.`),{passed:!0,inconclusive:!0,reason:s}}}function R$(e){if(!e||e.length<50)return!1;let t=/\d\.|[-*]\s/.test(e),n=/```/.test(e),o=/expect|should|must|want/i.test(e);return[t,n,o,e.length>200].filter(Boolean).length>=2}var gg,hR,P$=b(()=>{"use strict";Go();he();$e();gg="issue-eligibility",hR=["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"]});function O$(){let e=Date.now();for(let[t,n]of Jt.entries())e-n.fetchedAt>I$&&Jt.delete(t);if(Jt.size>C$){let n=Array.from(Jt.entries()).sort((o,r)=>o[1].fetchedAt-r[1].fetchedAt).slice(0,Jt.size-C$);for(let[o]of n)Jt.delete(o)}}async function A$(e,t,n){let o=wt(),r=`health:${t}/${n}`;try{return await ma(o,r,vR,async()=>{let i=`/repos/${t}/${n}`,s=await Fo(o,i,p=>e.repos.get({owner:t,repo:n,headers:p})),{data:a}=await e.repos.listCommits({owner:t,repo:n,per_page:1}),u=a[0]?.commit?.author?.date||s.pushed_at,l=dt(new Date(u)),d="unknown";try{let{data:p}=await e.actions.listRepoWorkflows({owner:t,repo:n,per_page:1});p.total_count>0&&(d="passing")}catch(p){let g=P(p);v(fg,`Failed to check CI status for ${t}/${n}: ${g}. Defaulting to unknown.`)}return{repo:`${t}/${n}`,lastCommitAt:u,daysSinceLastCommit:l,openIssuesCount:s.open_issues_count,avgIssueResponseDays:0,ciStatus:d,isActive:l<30,stargazersCount:s.stargazers_count,forksCount:s.forks_count}})}catch(i){let s=P(i);return v(fg,`Error checking project health for ${t}/${n}: ${s}`),{repo:`${t}/${n}`,lastCommitAt:"",daysSinceLastCommit:999,openIssuesCount:0,avgIssueResponseDays:0,ciStatus:"unknown",isActive:!1,checkFailed:!0,failureReason:s}}}async function D$(e,t,n){let o=`${t}/${n}`,r=Jt.get(o);if(r&&Date.now()-r.fetchedAt<I$)return r.guidelines;let i=["CONTRIBUTING.md",".github/CONTRIBUTING.md","docs/CONTRIBUTING.md","contributing.md"],s=await Promise.allSettled(i.map(a=>e.repos.getContent({owner:t,repo:n,path:a}).then(({data:c})=>"content"in c?Buffer.from(c.content,"base64").toString("utf-8"):null)));for(let a=0;a<s.length;a++){let c=s[a];if(c.status==="fulfilled"&&c.value){let u=bR(c.value);return Jt.set(o,{guidelines:u,fetchedAt:Date.now()}),O$(),u}if(c.status==="rejected"){let u=c.reason instanceof Error?c.reason.message:String(c.reason);!u.includes("404")&&!u.includes("Not Found")&&v(fg,`Unexpected error fetching ${i[a]} from ${t}/${n}: ${u}`)}}Jt.set(o,{guidelines:void 0,fetchedAt:Date.now()}),O$()}function bR(e){let t={rawContent:e},n=e.toLowerCase();if(n.includes("branch")){let o=e.match(/branch[^\n]*(?:named?|format|convention)[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.branchNamingConvention=o[1])}if(n.includes("conventional commit"))t.commitMessageFormat="conventional commits";else if(n.includes("commit message")){let o=e.match(/commit message[^\n]*[`"]([^`"]+)[`"]/i);o&&(t.commitMessageFormat=o[1])}return n.includes("jest")?t.testFramework="Jest":n.includes("rspec")?t.testFramework="RSpec":n.includes("pytest")?t.testFramework="pytest":n.includes("mocha")&&(t.testFramework="Mocha"),n.includes("eslint")?t.linter="ESLint":n.includes("rubocop")?t.linter="RuboCop":n.includes("prettier")&&(t.formatter="Prettier"),(n.includes("cla")||n.includes("contributor license agreement"))&&(t.claRequired=!0),t}var fg,Jt,I$,vR,C$,U$=b(()=>{"use strict";Ue();he();$e();Ur();fg="repo-health",Jt=new Map,I$=3600*1e3,vR=14400*1e3,C$=100});var hg,yR,_R,$a,j$=b(()=>{"use strict";Ue();he();$e();w$();mg();P$();U$();Ur();hg="issue-vetting",yR=3,_R=900*1e3,$a=class{octokit;stateManager;constructor(t,n){this.octokit=t,this.stateManager=n}async vetIssue(t){let n=wt(),o=`vet:${t}`,r=n.getIfFresh(o,_R);if(r&&typeof r=="object"&&"issue"in r&&"viabilityScore"in r)return E(hg,`Vetting cache hit for ${t}`),r;let i=Pe(t);if(!i||i.type!=="issues")throw new fe(`Invalid issue URL: ${t}`);let{owner:s,repo:a,number:c}=i,u=`${s}/${a}`,{data:l}=await this.octokit.issues.get({owner:s,repo:a,issue_number:c}),[d,p,g,y,S]=await Promise.all([T$(this.octokit,s,a,c),x$(this.octokit,s,a,c,l.comments),A$(this.octokit,s,a),D$(this.octokit,s,a),E$(this.octokit,s,a)]),U=d.passed,T=p.passed,L=R$(l.body||""),Z=g.checkFailed?!0:g.isActive,N={passedAllChecks:U&&T&&Z&&L,checks:{noExistingPR:U,notClaimed:T,projectActive:Z,clearRequirements:L,contributionGuidelinesFound:!!y},contributionGuidelines:y,notes:[]};U||N.notes.push("Existing PR found for this issue"),T||N.notes.push("Issue appears to be claimed by someone"),d.inconclusive&&N.notes.push(`Could not verify absence of existing PRs: ${d.reason||"API error"}`),p.inconclusive&&N.notes.push(`Could not verify claim status: ${p.reason||"API error"}`),g.checkFailed?N.notes.push(`Could not verify project activity: ${g.failureReason||"API error"}`):g.isActive||N.notes.push("Project may be inactive"),L||N.notes.push("Issue requirements are unclear"),y||N.notes.push("No CONTRIBUTING.md found");let z={id:l.id,url:t,repo:u,number:c,title:l.title,status:"candidate",labels:l.labels.map(B=>typeof B=="string"?B:B.name||""),createdAt:l.created_at,updatedAt:l.updated_at,vetted:!0,vettingResult:N},R=[],G=[];U||R.push("Has existing PR"),T||R.push("Already claimed"),!g.isActive&&!g.checkFailed&&R.push("Inactive project"),L||R.push("Unclear requirements"),U&&G.push("No existing PR"),T&&G.push("Not claimed"),g.isActive&&!g.checkFailed&&G.push("Active project"),L&&G.push("Clear requirements"),y&&G.push("Has contribution guidelines");let ee=this.stateManager.getState().config,q=this.stateManager.getRepoScore(u),ae=q&&q.mergedPRCount>0?q.mergedPRCount:S;ae>0?G.push(`Trusted project (${ae} PR${ae>1?"s":""} merged)`):ee.trustedProjects.includes(u)&&G.push("Trusted project (previous PR merged)"),q&&(q.closedWithoutMergeCount>0&&ae===0?R.push("User has rejected PR(s) in this repo with no successful merges"):q.closedWithoutMergeCount>0&&ae>0&&N.notes.push(`Mixed history: ${ae} merged, ${q.closedWithoutMergeCount} closed without merge`));let Ge=u.split("/")[0],ve=!1;Ge&&u.includes("/")&&(ve=Object.values(this.stateManager.getState().repoScores).some(B=>B.repo&&B.mergedPRCount>0&&B.repo.startsWith(Ge+"/")&&B.repo!==u)),ve&&G.push(`Org affinity (merged PRs in other ${Ge} repos)`);let be=ee.projectCategories??[],pt=S$(u,be);pt&&G.push("Matches preferred project category");let Fe;N.passedAllChecks?Fe="approve":R.length>2?Fe="skip":Fe="needs_review";let tr=g.checkFailed||d.inconclusive||p.inconclusive;Fe==="approve"&&tr&&(Fe="needs_review",N.notes.push("Recommendation downgraded: one or more checks were inconclusive"));let Le=_$(g.stargazersCount??0,g.forksCount??0);g.checkFailed&&Le===0&&N.notes.push("Repo quality bonus unavailable: could not fetch star/fork counts due to API error");let mt=this.getRepoScore(u),Et=$$({repoScore:mt,hasExistingPR:!U,isClaimed:!T,clearRequirements:L,hasContributionGuidelines:!!y,issueUpdatedAt:l.updated_at,closedWithoutMergeCount:q?.closedWithoutMergeCount??0,mergedPRCount:ae,orgHasMergedPRs:ve,repoQualityBonus:Le,matchesPreferredCategory:pt}),xt=this.stateManager.getStarredRepos(),vr=ee.preferredOrgs??[],F="normal";ae>0?F="merged_pr":vr.some(B=>B.toLowerCase()===Ge?.toLowerCase())?F="preferred_org":xt.includes(u)&&(F="starred");let X={issue:z,vettingResult:N,projectHealth:g,recommendation:Fe,reasonsToSkip:R,reasonsToApprove:G,viabilityScore:Et,searchPriority:F};return n.set(o,"",X),X}async vetIssuesParallel(t,n,o){let r=[],i=new Map,s=0,a=0,c=0;for(let l of t){if(r.length>=n)break;c++;let d=this.vetIssue(l).then(p=>{r.length<n&&(o&&(p.searchPriority=o),r.push(p))}).catch(p=>{s++,Vt(p)&&a++,v(hg,`Error vetting issue ${l}:`,P(p))}).finally(()=>i.delete(l));i.set(l,d),i.size>=yR&&await Promise.race(i.values())}await Promise.allSettled(i.values());let u=s===c&&c>0;return u&&v(hg,`All ${c} issue(s) failed vetting. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:r.slice(0,n),allFailed:u,rateLimitHit:a>0}}getRepoScore(t){return this.stateManager.getState().repoScores?.[t]?.score??null}}});function wR(e,t=0){let n=z$-t+1;if(n<1)return e.length>0&&v(Fr,`Label filtering disabled: ${t} repo/org ORs exceed GitHub's ${z$} operator limit. All ${e.length} label(s) dropped from query.`),[[]];if(e.length<=n)return[e];let o=[];for(let r=0;r<e.length;r+=n)o.push(e.slice(r,r+n));return E(Fr,`Split ${e.length} labels into ${o.length} chunks (${t} ops reserved, max ${n} per chunk)`),o}function SR(e){return e.length===0?"":e.length===1?`label:"${e[0]}"`:`(${e.map(t=>`label:"${t}"`).join(" OR ")})`}function F$(e,t){let n=new Set;for(let o of e)for(let r of Io[o]??[])n.add(r);for(let o of t)n.add(o);return[...n]}function L$(e){let t=[],n=Math.max(...e.map(o=>o.length),0);for(let o=0;o<n;o++)for(let r of e)o<r.length&&t.push(r[o]);return t}function kR(e,t){let n=[];for(let o=0;o<e.length;o+=t)n.push(e.slice(o,o+t));return n}async function vg(e,t){let n=`search:${t.q}:${t.sort}:${t.order}:${t.per_page}`;return ma(wt(),n,TR,async()=>{let{data:o}=await e.search.issuesAndPullRequests(t);return o})}async function wa(e,t,n,o,r){let i=wR(t,n),s=new Set,a=[];for(let c=0;c<i.length;c++){c>0&&await qt(G$);let u=o(SR(i[c])),l=await vg(e,{q:u,sort:"created",order:"desc",per_page:r});for(let d of l.items)s.has(d.html_url)||(s.add(d.html_url),a.push(d))}return a}async function bg(e,t,n,o,r,i,s){let a=y$(t);if(a.size>0){let y=t.filter(S=>a.has(S.repository_url.split("/").slice(-2).join("/"))).length;E(Fr,`[SPAM_FILTER] Filtered ${y} issues from ${a.size} label-farming repos: ${[...a].join(", ")}`)}let c=n(t).filter(y=>{let S=y.repository_url.split("/").slice(-2).join("/");return a.has(S)?!1:o.every(U=>!U.has(S))}).slice(0,r*2);if(c.length===0)return E(Fr,`[${s}] All ${t.length} items filtered before vetting`),{candidates:[],allVetFailed:!1,rateLimitHit:!1};let{candidates:u,allFailed:l,rateLimitHit:d}=await e.vetIssuesParallel(c.map(y=>y.html_url),r,"normal"),p=u.filter(y=>y.projectHealth.checkFailed?!0:(y.projectHealth.stargazersCount??0)>=i),g=u.length-p.length;return g>0&&E(Fr,`[STAR_FILTER] Filtered ${g} ${s} candidates below ${i} stars`),{candidates:p,allVetFailed:l,rateLimitHit:d}}async function Sa(e,t,n,o,r,i,s,a){let c=[],u=kR(n,$R),l=0,d=0;for(let y=0;y<u.length;y++){let S=u[y];if(c.length>=i)break;y>0&&await qt(G$);try{let U=S.map(N=>`repo:${N}`).join(" OR "),T=S.length-1,L=Math.min(30,(i-c.length)*3),Z=await wa(e,r,T,N=>`${o} ${N} (${U})`.replace(/ +/g," ").trim(),L);if(Z.length>0){let N=a(Z),z=i-c.length,{candidates:R,rateLimitHit:G}=await t.vetIssuesParallel(N.slice(0,z*2).map(ee=>ee.html_url),z,s);c.push(...R),G&&d++}}catch(U){l++,Vt(U)&&d++;let T=S.join(", ");v(Fr,`Error searching issues in batch [${T}]:`,P(U))}}let p=l===u.length&&u.length>0,g=d>0;return p&&v(Fr,`All ${u.length} batch(es) failed for ${s} phase. This may indicate a systemic issue (rate limit, auth, network).`),{candidates:c,allBatchesFailed:p,rateLimitHit:g}}var Fr,z$,G$,$R,TR,N$=b(()=>{"use strict";Dt();he();$e();Ur();_a();Ue();Fr="search-phases",z$=5,G$=1500,$R=3;TR=900*1e3});var M$,Z$,ue,ka,No,Ta,Kt,V$=b(()=>{"use strict";M$=re(require("fs"),1),Z$=re(require("path"),1);Dn();On();Ue();Dt();he();$e();_a();j$();mg();N$();ue="issue-discovery",ka=2e3,No=20,Ta=10,Kt=class{octokit;stateManager;githubToken;vetter;rateLimitWarning=null;constructor(t){this.githubToken=t,this.octokit=je(t),this.stateManager=K(),this.vetter=new $a(this.octokit,this.stateManager)}async fetchStarredRepos(){Re(ue,"Fetching starred repositories...");let t=[];try{let n=this.octokit.paginate.iterator(this.octokit.activity.listReposStarredByAuthenticatedUser,{per_page:100}),o=0;for await(let{data:r}of n){for(let i of r){let s;"full_name"in i&&typeof i.full_name=="string"?s=i.full_name:"repo"in i&&i.repo&&typeof i.repo=="object"&&"full_name"in i.repo&&(s=i.repo.full_name),s&&t.push(s)}if(o++,o>=5){Re(ue,"Reached pagination limit for starred repos (500)");break}}return Re(ue,`Fetched ${t.length} starred repositories`),this.stateManager.setStarredRepos(t),t}catch(n){let o=this.stateManager.getStarredRepos(),r=P(n);return v(ue,"Error fetching starred repos:",r),o.length===0?v(ue,`Failed to fetch starred repositories from GitHub API. No cached repos available. Error: ${r}
|
|
85
85
|
Tip: Ensure your GITHUB_TOKEN has the 'read:user' scope and try again.`):v(ue,`Failed to fetch starred repositories from GitHub API. Using ${o.length} cached repos instead. Error: ${r}`),o}}async getStarredReposWithRefresh(){return this.stateManager.isStarredReposStale()?this.fetchStarredRepos():this.stateManager.getStarredRepos()}async searchIssues(t={}){let n=this.stateManager.getState().config,o=t.languages||n.languages,r=n.scope,i=t.labels||(r?F$(r,n.labels):n.labels),s=t.maxResults||10,a=n.minStars??50,c=[],u=null,l=null,d=!1;this.rateLimitWarning=null;let p=No-1;try{let F=await tg(this.githubToken);if(p=F.remaining,F.remaining<5){let X=new Date(F.resetAt).toLocaleTimeString("en-US",{hour12:!1});this.rateLimitWarning=`GitHub search API quota low (${F.remaining}/${F.limit} remaining, resets at ${X}). Search may be slow.`,v(ue,this.rateLimitWarning)}p<Ta?Re(ue,`Search budget critical (${p} remaining) \u2014 running only Phase 0`):p<No&&Re(ue,`Search budget low (${p} remaining) \u2014 skipping heavy phases (2, 3)`)}catch(F){if(He(F)===401)throw F;v(ue,"Could not check rate limit \u2014 using conservative budget, skipping heavy phases:",P(F))}let g=this.stateManager.getReposWithMergedPRs(),y=new Set(g),S=this.stateManager.getReposWithOpenPRs(),U=await this.getStarredReposWithRefresh(),T=new Set(U),L=new Set(this.stateManager.getLowScoringRepos(3)),Z=new Set(this.stateManager.getState().activeIssues.map(F=>F.url)),N=new Set(n.excludeRepos),z=n.maxIssueAgeDays||90,R=new Date,ee=o.some(F=>F.toLowerCase()==="any")?"":o.map(F=>`language:${F}`).join(" "),q=`is:issue is:open ${ee} no:assignee`.replace(/ +/g," ").trim(),ae=n.includeDocIssues??!0,Ge=new Set(n.aiPolicyBlocklist??Rn.aiPolicyBlocklist??[]);Ge.size>0&&E(ue,`[AI_POLICY_FILTER] Filtering issues from ${Ge.size} blocklisted repo(s): ${[...Ge].join(", ")}`);let ve=F=>F.filter(X=>{if(Z.has(X.html_url))return!1;let B=X.repository_url.split("/").slice(-2).join("/");if(N.has(B)||Ge.has(B)||L.has(B))return!1;let Ce=new Date(X.updated_at);return!(dt(Ce,R)>z||!ae&&dg(X))}),be=[...g,...S.filter(F=>!y.has(F))].slice(0,10),pt=new Set(be);if(be.length>0){let F=Math.min(g.length,be.length),X=be.length-F;Re(ue,`Phase 0: Searching issues in ${be.length} repos (${F} merged-PR, ${X} open-PR, no label filter)...`);let B=be.slice(0,F);if(B.length>0){let we=s-c.length;if(we>0){let{candidates:ke,allBatchesFailed:ie,rateLimitHit:Oe}=await Sa(this.octokit,this.vetter,B,q,[],we,"merged_pr",ve);c.push(...ke),ie&&(u="All merged-PR repo batches failed"),Oe&&(d=!0),Re(ue,`Found ${ke.length} candidates from merged-PR repos`)}}let Ce=be.slice(F);if(Ce.length>0&&c.length<s){let we=s-c.length;if(we>0){let{candidates:ke,allBatchesFailed:ie,rateLimitHit:Oe}=await Sa(this.octokit,this.vetter,Ce,q,[],we,"starred",ve);if(c.push(...ke),ie){let _e="All open-PR repo batches failed";u=u?`${u}; ${_e}`:_e}Oe&&(d=!0),Re(ue,`Found ${ke.length} candidates from open-PR repos`)}}}let Fe=null,tr=n.preferredOrgs??[];if(c.length<s&&tr.length>0&&p>=Ta){be.length>0&&await qt(ka);let F=new Set(be.map(B=>B.split("/")[0]?.toLowerCase())),X=tr.filter(B=>!F.has(B.toLowerCase())).slice(0,5);if(X.length>0){Re(ue,`Phase 0.5: Searching issues in ${X.length} preferred org(s)...`);let B=s-c.length,Ce=X.map(ke=>`org:${ke}`).join(" OR "),we=X.length-1;try{let ke=await wa(this.octokit,i,we,ie=>`${q} ${ie} (${Ce})`.replace(/ +/g," ").trim(),B*3);if(ke.length>0){let ie=ve(ke).filter(zt=>{let br=zt.repository_url.split("/").slice(-2).join("/");return!pt.has(br)}),{candidates:Oe,allFailed:_e,rateLimitHit:Be}=await this.vetter.vetIssuesParallel(ie.slice(0,B*2).map(zt=>zt.html_url),B,"preferred_org");c.push(...Oe),_e&&(Fe="All preferred org issue vetting failed"),Be&&(d=!0),Re(ue,`Found ${Oe.length} candidates from preferred orgs`)}}catch(ke){let ie=P(ke);Fe=ie,Vt(ke)&&(d=!0),v(ue,`Error searching preferred orgs: ${ie}`)}}}if(c.length<s&&U.length>0&&p>=Ta){await qt(ka);let F=U.filter(X=>!pt.has(X));if(F.length>0){Re(ue,`Phase 1: Searching issues in ${F.length} starred repos...`);let X=s-c.length;if(X>0){let{candidates:B,allBatchesFailed:Ce,rateLimitHit:we}=await Sa(this.octokit,this.vetter,F.slice(0,10),q,i,X,"starred",ve);c.push(...B),Ce&&(l="All starred repo batches failed"),we&&(d=!0),Re(ue,`Found ${B.length} candidates from starred repos`)}}}let Le=null;if(c.length<s&&p>=No){await qt(ka),Re(ue,"Phase 2: General issue search...");let F=s-c.length,X=new Set(c.map(ie=>ie.issue.repo)),B=[];if(r&&r.length>1){for(let _e of r){let Be=Io[_e]??[];if(Be.length===0){v(ue,`Scope "${_e}" has no labels, skipping tier`);continue}B.push({tier:_e,tierLabels:Be})}let ie=new Set(r.flatMap(_e=>Io[_e]??[])),Oe=n.labels.filter(_e=>!ie.has(_e));Oe.length>0&&B.push({tier:"custom",tierLabels:Oe})}else B.push({tier:"general",tierLabels:i});let Ce=Math.ceil(F/B.length),we=[];for(let{tier:ie,tierLabels:Oe}of B)try{let _e=await wa(this.octokit,Oe,0,qr=>`${q} ${qr}`.replace(/ +/g," ").trim(),Ce*3);Re(ue,`Phase 2 [${ie}]: processing ${_e.length} items...`);let{candidates:Be,allVetFailed:zt,rateLimitHit:br}=await bg(this.vetter,_e,ve,[pt,T,X],Ce,a,`Phase 2 [${ie}]`);we.push(Be);for(let qr of Be)X.add(qr.issue.repo);zt&&(Le=(Le?Le+"; ":"")+`${ie}: all vetting failed`),br&&(d=!0),Re(ue,`Found ${Be.length} candidates from ${ie} tier`)}catch(_e){if(He(_e)===401)throw _e;let Be=P(_e);Le=(Le?Le+"; ":"")+`${ie}: ${Be}`,Vt(_e)&&(d=!0),v(ue,`Error in ${ie} tier search: ${Be}`),we.push([])}let ke=L$(we);ke.length===0&&Le&&v(ue,`All ${B.length} scope tiers failed in Phase 2: ${Le}`),c.push(...ke.slice(0,F))}let mt=null;if(c.length<s&&p>=No){await qt(ka),Re(ue,"Phase 3: Searching actively maintained repos...");let F=s-c.length,X=new Date;X.setDate(X.getDate()-30);let B=X.toISOString().split("T")[0],Ce=k$(n.projectCategories??[]),we=Ce.length>0?`topic:${Ce[0]}`:"",ke=`is:issue is:open no:assignee ${ee} ${we} stars:>=${a} pushed:>=${B} archived:false`.replace(/ +/g," ").trim();try{let ie=await vg(this.octokit,{q:ke,sort:"updated",order:"desc",per_page:F*3});Re(ue,`Found ${ie.total_count} issues in maintained-repo search, processing top ${ie.items.length}...`);let Oe=new Set(c.map(br=>br.issue.repo)),{candidates:_e,allVetFailed:Be,rateLimitHit:zt}=await bg(this.vetter,ie.items,ve,[pt,T,Oe],F,a,"Phase 3");c.push(..._e),Be&&(mt="all vetting failed"),zt&&(d=!0),Re(ue,`Found ${_e.length} candidates from maintained-repo search`)}catch(ie){let Oe=P(ie);mt=Oe,Vt(ie)&&(d=!0),v(ue,`Error in maintained-repo search: ${Oe}`)}}let Et=p<No,xt="";if(p<Ta?xt=` Most search phases were skipped due to critically low API quota (${p} remaining).`:Et&&(xt=` Some search phases were skipped due to low API quota (${p} remaining).`),c.length===0){let F=[u?`Phase 0 (merged-PR repos): ${u}`:null,Fe?`Phase 0.5 (preferred orgs): ${Fe}`:null,l?`Phase 1 (starred repos): ${l}`:null,Le?`Phase 2 (general): ${Le}`:null,mt?`Phase 3 (maintained repos): ${mt}`:null].filter(Boolean),X=F.length>0?` ${F.join(". ")}.`:"";if(d||Et)return this.rateLimitWarning=`Search returned no results due to GitHub API rate limits.${X}${xt} Try again after the rate limit resets.`,[];throw new fe(`No issue candidates found across all search phases.${X} Try adjusting your search criteria (languages, labels) or check your network connection.`)}return(d||Et)&&(this.rateLimitWarning=`Search results may be incomplete: GitHub API rate limits were hit during search.${xt} Found ${c.length} candidate${c.length===1?"":"s"} but some search phases were limited. Try again after the rate limit resets for complete results.`),c.sort((F,X)=>{let B={merged_pr:0,preferred_org:1,starred:2,normal:3},Ce=B[F.searchPriority]-B[X.searchPriority];if(Ce!==0)return Ce;let we={approve:0,needs_review:1,skip:2},ke=we[F.recommendation]-we[X.recommendation];return ke!==0?ke:X.viabilityScore-F.viabilityScore}),pg(c,2).slice(0,s)}async vetIssue(t){return this.vetter.vetIssue(t)}saveSearchResults(t){let n=[...t].sort((a,c)=>c.viabilityScore-a.viabilityScore),o=vt(),r=Z$.join(o,"found-issues.md"),i=new Date().toISOString(),s=`# Found Issues
|
|
86
86
|
|
|
87
87
|
`;s+=`> Generated at: ${i}
|
|
@@ -124,19 +124,19 @@ ${o.notes.length>0?`
|
|
|
124
124
|
**Notes:**
|
|
125
125
|
${o.notes.map(u=>`- ${u}`).join(`
|
|
126
126
|
`)}`:""}
|
|
127
|
-
`}}});var Xt,TR,H$,Lr,q$=b(()=>{"use strict";Dn();ha();Go();On();Ue();og();he();$e();Xt="issue-conversation",TR=En,H$=new Set(["OWNER","MEMBER","COLLABORATOR"]),Lr=class{octokit;stateManager;constructor(t){this.octokit=je(t),this.stateManager=K()}async fetchCommentedIssues(t=30){let n=this.stateManager.getState().config;if(!n.githubUsername)throw new Zt("No GitHub username configured. Run setup first.");let o=n.githubUsername,r=new Date;r.setDate(r.getDate()-t);let i=r.toISOString().split("T")[0];E(Xt,`Fetching commented issues for @${o} (last ${t} days)...`);let{data:s}=await this.octokit.search.issuesAndPullRequests({q:`commenter:${o} type:issue state:open updated:>=${i}`,sort:"updated",order:"desc",per_page:100});s.total_count>100&&v(Xt,`Search returned ${s.total_count} results but only first 100 were fetched. Some commented issues may be missing.`);let a=this.stateManager.getState().activeIssues||[],c=new Set(a.filter(y=>y.status==="claimed"||y.status==="in_progress"||y.status==="pr_submitted").map(y=>`${y.repo}#${y.number}`)),u=new Set((n.aiPolicyBlocklist||[]).map(y=>y.toLowerCase())),l=[];for(let y of s.items){if(y.pull_request)continue;let S=Pr(y.html_url);if(!S){v(Xt,`Skipping issue with unparseable URL: ${y.html_url}`);continue}let{owner:U,repo:T}=S,L=`${U}/${T}`;bt(U,o)||y.user?.login?.toLowerCase()!==o.toLowerCase()&&(n.excludeRepos.includes(L)||n.excludeOrgs?.some(Z=>U.toLowerCase()===Z.toLowerCase())||u.has(L.toLowerCase())||c.has(`${L}#${y.number}`)||l.push({item:y,repoFullName:L}))}E(Xt,`Found ${l.length} commented issues to check`);let d=[],p=[];await la(l,async({item:y,repoFullName:S})=>{try{let U=await this.analyzeIssueConversation(y,S,o);U?d.push(U):p.push({issueUrl:y.html_url,error:"No user comment found despite commenter: search match (possible pagination or eventual consistency)"})}catch(U){let T=P(U);p.push({issueUrl:y.html_url,error:T}),v(Xt,`Error analyzing issue ${y.html_url}: ${T}`)}},TR),p.length>0&&v(Xt,`${p.length}/${l.length} issue analysis call(s) failed`),p.length===l.length&&l.length>0&&v(Xt,`All ${l.length} issue analysis call(s) failed. Possible systemic issue (rate limit, auth, network).`);let g={new_response:0,waiting:1,acknowledged:2};return d.sort((y,S)=>g[y.status]-g[S.status]),E(Xt,`Analyzed ${d.length} issue conversations (${d.filter(y=>y.status==="new_response").length} with new responses)`),{issues:d,failures:p}}async analyzeIssueConversation(t,n,o){let{owner:r,repo:i}=xn(n),s=await $t(T=>this.octokit.issues.listComments({owner:r,repo:i,issue_number:t.number,per_page:100,page:T})),a=[];for(let T of s){if(!T.user?.login)continue;let L=T.user.login;a.push({author:L,body:T.body||"",createdAt:T.created_at,isUser:L.toLowerCase()===o.toLowerCase(),authorAssociation:String(T.author_association??"")})}a.sort((T,L)=>new Date(T.createdAt).getTime()-new Date(L.createdAt).getTime());let c;for(let T of a)T.isUser&&(c=T);if(!c)return v(Xt,`No user comment found for ${t.html_url} despite commenter: search match`),null;let u=new Date(c.createdAt),l=`@${o.toLowerCase()}`;function d(T){return H$.has(T.authorAssociation)||T.body.toLowerCase().includes(l)}let p;for(let T of a){if(T.isUser||Un(T.author))continue;if(new Date(T.createdAt)>u){if(Lo(T.body)||!d(T))continue;p={author:T.author,body:T.body.slice(0,200)+(T.body.length>200?"...":""),createdAt:T.createdAt,authorAssociation:T.authorAssociation}}}let g=(t.labels||[]).map(T=>T.name||"").filter(Boolean),y={repo:n,number:t.number,title:t.title,url:t.html_url,userLastCommentedAt:c.createdAt,labels:g,daysSinceUserComment:dt(u,new Date)};if(p)return{...y,status:"new_response",lastResponseAuthor:p.author,lastResponseBody:p.body,lastResponseAt:p.createdAt,isFromMaintainer:H$.has(p.authorAssociation)};let U=[...a].reverse().find(T=>Un(T.author)?!1:T.isUser?!0:d(T))?.isUser?"acknowledged":"waiting";return{...y,status:U}}}});function Nr(e,t){let n=t.config.statusOverrides;if(!n||Object.keys(n).length===0)return e;let o=K(),r=[];return o.batch(()=>{r=e.map(i=>{try{let s=o.getStatusOverride(i.url,i.updatedAt);return s?xR.has(s.status)?s.status===i.status?i:s.status==="waiting_on_maintainer"?{...i,status:s.status,actionReason:void 0,waitReason:"pending_review"}:{...i,status:s.status,waitReason:void 0,actionReason:"needs_response"}:(v("daily-logic",`Invalid override status "${s.status}" for ${i.url} \u2014 ignoring`),i):i}catch(s){return v("daily-logic",`Failed to apply status override for ${i.url}: ${P(s)}`),i}})}),r}function W$(e,t){let n=new Map;for(let o of e){if(!o.repo){v(t,`Skipping PR #${o.number} (${o.url}) with empty repo field`);continue}let r=n.get(o.repo)||[];r.push(o),n.set(o.repo,r)}return n}function Yt(e){return{number:e.number,url:e.url,title:e.title,repo:e.repo,daysSinceActivity:e.daysSinceActivity,status:e.status}}function Mo(e){let t=W$(e,"GROUP_BY_REPO"),n=[];for(let[o,r]of t)n.push({repo:o,prs:r});return n}function Zo(e){let t=W$(e,"COMPUTE_SIGNALS"),n=new Map;for(let[o,r]of t){let i=r.some(a=>a.lastMaintainerComment&&!B$.has(a.stalenessTier)),s=r.some(a=>!B$.has(a.stalenessTier));n.set(o,{isResponsive:i,hasActiveMaintainers:s})}return n}function Vo(e,t,n){let o=e.length,r=e.filter(l=>l.status==="needs_addressing"&&l.actionReason&&ER.has(l.actionReason)).length,i=o<t,s=r===0,a=i&&s,c,u=n>0?` + ${n} shelved`:"";if(a)c=`You have capacity: ${o}/${t} active PRs${u}, no critical issues`;else{let l=[];i||l.push(`at PR limit (${o}/${t}${u})`),s||l.push(`${r} critical issue${r===1?"":"s"} need attention`),c=`No capacity: ${l.join(", ")}`}return{hasCapacity:a,activePRCount:o,maxActivePRs:t,shelvedPRCount:n,criticalIssueCount:r,reason:c}}function Ho(e,t){let n=[],o=e.filter(s=>s.status==="needs_addressing"),r=t?new Date(t).getTime():NaN,i=["needs_response","needs_changes","failing_ci","merge_conflict","incomplete_checklist"];for(let s of i)for(let a of o){if(a.actionReason!==s)continue;let c,u;switch(s){case"needs_response":c="[Needs Response]",u="needs_response";break;case"needs_changes":c="[Needs Changes]",u="needs_changes";break;case"failing_ci":{c=`[CI Failing${a.failingCheckNames.length>0?` (${a.failingCheckNames.join(", ")})`:""}]`,u="ci_failing";break}case"merge_conflict":c="[Merge Conflict]",u="merge_conflict";break;case"incomplete_checklist":{c=`[Incomplete Checklist${a.checklistStats?` (${a.checklistStats.checked}/${a.checklistStats.total})`:""}]`,u="incomplete_checklist";break}default:v("daily-logic",`Unhandled ActionReason "${s}" for PR ${a.url} \u2014 falling back to needs_response`),c=`[${s}]`,u="needs_response"}let l=new Date(a.createdAt).getTime(),d;isNaN(l)?(v("daily-logic",`Invalid createdAt "${a.createdAt}" for PR ${a.url}, assuming new contribution`),d=!0):d=isNaN(r)||l>r,n.push({type:u,pr:a,label:c,isNewContribution:d})}return n}function qo(e,t,n=[]){let o=n.filter(c=>c.status==="new_response"),r=[],i=e.length>0,s=o.length>0;if(i){let c=e.length===1;r.push({key:"address_all",label:c?"Address this issue (Recommended)":`Work through all ${e.length} issues (Recommended)`,description:c?"Fix the issue blocking your PR":"Run maintenance in parallel, then address code changes one at a time"})}s&&r.push({key:"issue_replies",label:`Review ${o.length} issue repl${o.length===1?"y":"ies"}`,description:"Maintainers responded to your comments on issues"});let a={key:"search",label:"Search for new issues",description:"Look for new contribution opportunities"};if(!t.hasCapacity){let c=t.activePRCount>=t.maxActivePRs,u=t.criticalIssueCount>0;c&&u?a.capacityWarning=`You're at ${t.activePRCount}/${t.maxActivePRs} active PRs and have ${t.criticalIssueCount} critical issue(s). Resolve existing work before claiming new issues.`:c?a.capacityWarning=`You're at ${t.activePRCount}/${t.maxActivePRs} active PRs. Claiming a new issue will exceed your limit.`:a.capacityWarning=`You have ${t.criticalIssueCount} critical issue(s) needing attention. Resolve them before claiming new issues.`}return r.push(a),r.push({key:"done",label:"Done for now",description:"End session with summary"}),{items:r,context:{hasActionableIssues:i,actionableCount:e.length,hasCapacity:t.hasCapacity,hasIssueResponses:s,issueResponseCount:o.length}}}function Bo(e,t,n=0){let o=t>0?`${t} need${t===1?"s":""} attention`:"all on track",r=n>0?` | ${n} issue repl${n===1?"y":"ies"}`:"";return`\u{1F4CA} ${e.summary.totalActivePRs} Active PRs | ${o}${r}`}function Wo(e,t,n=[]){let o=[];if(o.push("## OSS Dashboard"),o.push(""),o.push(`\u{1F4CA} **${e.summary.totalActivePRs} Active PRs** | ${e.summary.totalMergedAllTime} Merged | ${e.summary.mergeRate}% Merge Rate`),o.push('\u2713 Dashboard generated \u2014 say "open dashboard" to view in browser'),o.push(""),e.needsAddressingPRs.length>0){o.push("### \u274C Needs Addressing");for(let a of e.needsAddressingPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),o.push(` \u2514\u2500 ${a.displayLabel} ${a.displayDescription}`);o.push("")}if(e.waitingOnMaintainerPRs.length>0){o.push("### \u23F3 Waiting on Maintainer");for(let a of e.waitingOnMaintainerPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),o.push(` \u2514\u2500 ${a.displayDescription}`);o.push("")}if(e.recentlyMergedPRs.length>0){o.push("### \u{1F389} Recently Merged");for(let a of e.recentlyMergedPRs){let c=a.mergedAt?new Date(a.mergedAt).toLocaleDateString():"";o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (merged ${c})`:""}`)}o.push("")}if(e.recentlyClosedPRs.length>0){o.push("### \u{1F6AB} Recently Closed");for(let a of e.recentlyClosedPRs){let c=a.closedAt?new Date(a.closedAt).toLocaleDateString():"";o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (closed ${c})`:""}`)}o.push("")}if(e.autoUnshelvedPRs.length>0){o.push("### \u{1F514} Auto-Unshelved"),o.push("> These PRs were shelved but a maintainer engaged \u2014 moved back to active.");for(let a of e.autoUnshelvedPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title} (${a.status.replace(/_/g," ")})`);o.push("")}if(e.shelvedPRs.length>0){o.push("### \u{1F4E6} Shelved");for(let a of e.shelvedPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);o.push("")}if(n.length>0){o.push("### \u{1F4AC} Issue Replies");for(let a of n){o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);let c=Ws(a.lastResponseAt);o.push(` \u2514\u2500 @${a.lastResponseAuthor}: "${a.lastResponseBody.slice(0,80)}${a.lastResponseBody.length>80?"...":""}"${c?` (${c})`:""}`)}o.push("")}let r=t.hasCapacity?"\u2705":"\u26A0\uFE0F",i=t.hasCapacity?"Ready for new work":"Focus on existing PRs",s=t.shelvedPRCount>0?` + ${t.shelvedPRCount} shelved`:"";return o.push(`**Capacity:** ${r} ${i} (${t.activePRCount}/${t.maxActivePRs} PRs${s})`),o.join(`
|
|
127
|
+
`}}});var Xt,ER,H$,Lr,q$=b(()=>{"use strict";Dn();ha();Go();On();Ue();og();he();$e();Xt="issue-conversation",ER=En,H$=new Set(["OWNER","MEMBER","COLLABORATOR"]),Lr=class{octokit;stateManager;constructor(t){this.octokit=je(t),this.stateManager=K()}async fetchCommentedIssues(t=30){let n=this.stateManager.getState().config;if(!n.githubUsername)throw new Zt("No GitHub username configured. Run setup first.");let o=n.githubUsername,r=new Date;r.setDate(r.getDate()-t);let i=r.toISOString().split("T")[0];E(Xt,`Fetching commented issues for @${o} (last ${t} days)...`);let{data:s}=await this.octokit.search.issuesAndPullRequests({q:`commenter:${o} type:issue state:open updated:>=${i}`,sort:"updated",order:"desc",per_page:100});s.total_count>100&&v(Xt,`Search returned ${s.total_count} results but only first 100 were fetched. Some commented issues may be missing.`);let a=this.stateManager.getState().activeIssues||[],c=new Set(a.filter(y=>y.status==="claimed"||y.status==="in_progress"||y.status==="pr_submitted").map(y=>`${y.repo}#${y.number}`)),u=new Set((n.aiPolicyBlocklist||[]).map(y=>y.toLowerCase())),l=[];for(let y of s.items){if(y.pull_request)continue;let S=Pr(y.html_url);if(!S){v(Xt,`Skipping issue with unparseable URL: ${y.html_url}`);continue}let{owner:U,repo:T}=S,L=`${U}/${T}`;bt(U,o)||y.user?.login?.toLowerCase()!==o.toLowerCase()&&(n.excludeRepos.includes(L)||n.excludeOrgs?.some(Z=>U.toLowerCase()===Z.toLowerCase())||u.has(L.toLowerCase())||c.has(`${L}#${y.number}`)||l.push({item:y,repoFullName:L}))}E(Xt,`Found ${l.length} commented issues to check`);let d=[],p=[];await la(l,async({item:y,repoFullName:S})=>{try{let U=await this.analyzeIssueConversation(y,S,o);U?d.push(U):p.push({issueUrl:y.html_url,error:"No user comment found despite commenter: search match (possible pagination or eventual consistency)"})}catch(U){let T=P(U);p.push({issueUrl:y.html_url,error:T}),v(Xt,`Error analyzing issue ${y.html_url}: ${T}`)}},ER),p.length>0&&v(Xt,`${p.length}/${l.length} issue analysis call(s) failed`),p.length===l.length&&l.length>0&&v(Xt,`All ${l.length} issue analysis call(s) failed. Possible systemic issue (rate limit, auth, network).`);let g={new_response:0,waiting:1,acknowledged:2};return d.sort((y,S)=>g[y.status]-g[S.status]),E(Xt,`Analyzed ${d.length} issue conversations (${d.filter(y=>y.status==="new_response").length} with new responses)`),{issues:d,failures:p}}async analyzeIssueConversation(t,n,o){let{owner:r,repo:i}=xn(n),s=await $t(T=>this.octokit.issues.listComments({owner:r,repo:i,issue_number:t.number,per_page:100,page:T})),a=[];for(let T of s){if(!T.user?.login)continue;let L=T.user.login;a.push({author:L,body:T.body||"",createdAt:T.created_at,isUser:L.toLowerCase()===o.toLowerCase(),authorAssociation:String(T.author_association??"")})}a.sort((T,L)=>new Date(T.createdAt).getTime()-new Date(L.createdAt).getTime());let c;for(let T of a)T.isUser&&(c=T);if(!c)return v(Xt,`No user comment found for ${t.html_url} despite commenter: search match`),null;let u=new Date(c.createdAt),l=`@${o.toLowerCase()}`;function d(T){return H$.has(T.authorAssociation)||T.body.toLowerCase().includes(l)}let p;for(let T of a){if(T.isUser||Un(T.author))continue;if(new Date(T.createdAt)>u){if(Lo(T.body)||!d(T))continue;p={author:T.author,body:T.body.slice(0,200)+(T.body.length>200?"...":""),createdAt:T.createdAt,authorAssociation:T.authorAssociation}}}let g=(t.labels||[]).map(T=>T.name||"").filter(Boolean),y={repo:n,number:t.number,title:t.title,url:t.html_url,userLastCommentedAt:c.createdAt,labels:g,daysSinceUserComment:dt(u,new Date)};if(p)return{...y,status:"new_response",lastResponseAuthor:p.author,lastResponseBody:p.body,lastResponseAt:p.createdAt,isFromMaintainer:H$.has(p.authorAssociation)};let U=[...a].reverse().find(T=>Un(T.author)?!1:T.isUser?!0:d(T))?.isUser?"acknowledged":"waiting";return{...y,status:U}}}});function Nr(e,t){let n=t.config.statusOverrides;if(!n||Object.keys(n).length===0)return e;let o=K(),r=[];return o.batch(()=>{r=e.map(i=>{try{let s=o.getStatusOverride(i.url,i.updatedAt);return s?RR.has(s.status)?s.status===i.status?i:s.status==="waiting_on_maintainer"?{...i,status:s.status,actionReason:void 0,waitReason:"pending_review"}:{...i,status:s.status,waitReason:void 0,actionReason:"needs_response"}:(v("daily-logic",`Invalid override status "${s.status}" for ${i.url} \u2014 ignoring`),i):i}catch(s){return v("daily-logic",`Failed to apply status override for ${i.url}: ${P(s)}`),i}})}),r}function W$(e,t){let n=new Map;for(let o of e){if(!o.repo){v(t,`Skipping PR #${o.number} (${o.url}) with empty repo field`);continue}let r=n.get(o.repo)||[];r.push(o),n.set(o.repo,r)}return n}function Yt(e){return{number:e.number,url:e.url,title:e.title,repo:e.repo,daysSinceActivity:e.daysSinceActivity,status:e.status}}function Mo(e){let t=W$(e,"GROUP_BY_REPO"),n=[];for(let[o,r]of t)n.push({repo:o,prs:r});return n}function Zo(e){let t=W$(e,"COMPUTE_SIGNALS"),n=new Map;for(let[o,r]of t){let i=r.some(a=>a.lastMaintainerComment&&!B$.has(a.stalenessTier)),s=r.some(a=>!B$.has(a.stalenessTier));n.set(o,{isResponsive:i,hasActiveMaintainers:s})}return n}function Vo(e,t,n){let o=e.length,r=e.filter(l=>l.status==="needs_addressing"&&l.actionReason&&xR.has(l.actionReason)).length,i=o<t,s=r===0,a=i&&s,c,u=n>0?` + ${n} shelved`:"";if(a)c=`You have capacity: ${o}/${t} active PRs${u}, no critical issues`;else{let l=[];i||l.push(`at PR limit (${o}/${t}${u})`),s||l.push(`${r} critical issue${r===1?"":"s"} need attention`),c=`No capacity: ${l.join(", ")}`}return{hasCapacity:a,activePRCount:o,maxActivePRs:t,shelvedPRCount:n,criticalIssueCount:r,reason:c}}function Ho(e,t){let n=[],o=e.filter(s=>s.status==="needs_addressing"),r=t?new Date(t).getTime():NaN,i=["needs_response","needs_changes","failing_ci","merge_conflict","incomplete_checklist"];for(let s of i)for(let a of o){if(a.actionReason!==s)continue;let c,u;switch(s){case"needs_response":c="[Needs Response]",u="needs_response";break;case"needs_changes":c="[Needs Changes]",u="needs_changes";break;case"failing_ci":{c=`[CI Failing${a.failingCheckNames.length>0?` (${a.failingCheckNames.join(", ")})`:""}]`,u="ci_failing";break}case"merge_conflict":c="[Merge Conflict]",u="merge_conflict";break;case"incomplete_checklist":{c=`[Incomplete Checklist${a.checklistStats?` (${a.checklistStats.checked}/${a.checklistStats.total})`:""}]`,u="incomplete_checklist";break}default:v("daily-logic",`Unhandled ActionReason "${s}" for PR ${a.url} \u2014 falling back to needs_response`),c=`[${s}]`,u="needs_response"}let l=new Date(a.createdAt).getTime(),d;isNaN(l)?(v("daily-logic",`Invalid createdAt "${a.createdAt}" for PR ${a.url}, assuming new contribution`),d=!0):d=isNaN(r)||l>r,n.push({type:u,pr:a,label:c,isNewContribution:d})}return n}function qo(e,t,n=[]){let o=n.filter(c=>c.status==="new_response"),r=[],i=e.length>0,s=o.length>0;if(i){let c=e.length===1;r.push({key:"address_all",label:c?"Address this issue (Recommended)":`Work through all ${e.length} issues (Recommended)`,description:c?"Fix the issue blocking your PR":"Run maintenance in parallel, then address code changes one at a time"})}s&&r.push({key:"issue_replies",label:`Review ${o.length} issue repl${o.length===1?"y":"ies"}`,description:"Maintainers responded to your comments on issues"});let a={key:"search",label:"Search for new issues",description:"Look for new contribution opportunities"};if(!t.hasCapacity){let c=t.activePRCount>=t.maxActivePRs,u=t.criticalIssueCount>0;c&&u?a.capacityWarning=`You're at ${t.activePRCount}/${t.maxActivePRs} active PRs and have ${t.criticalIssueCount} critical issue(s). Resolve existing work before claiming new issues.`:c?a.capacityWarning=`You're at ${t.activePRCount}/${t.maxActivePRs} active PRs. Claiming a new issue will exceed your limit.`:a.capacityWarning=`You have ${t.criticalIssueCount} critical issue(s) needing attention. Resolve them before claiming new issues.`}return r.push(a),r.push({key:"done",label:"Done for now",description:"End session with summary"}),{items:r,context:{hasActionableIssues:i,actionableCount:e.length,hasCapacity:t.hasCapacity,hasIssueResponses:s,issueResponseCount:o.length}}}function Bo(e,t,n=0){let o=t>0?`${t} need${t===1?"s":""} attention`:"all on track",r=n>0?` | ${n} issue repl${n===1?"y":"ies"}`:"";return`\u{1F4CA} ${e.summary.totalActivePRs} Active PRs | ${o}${r}`}function Wo(e,t,n=[]){let o=[];if(o.push("## OSS Dashboard"),o.push(""),o.push(`\u{1F4CA} **${e.summary.totalActivePRs} Active PRs** | ${e.summary.totalMergedAllTime} Merged | ${e.summary.mergeRate}% Merge Rate`),o.push('\u2713 Dashboard generated \u2014 say "open dashboard" to view in browser'),o.push(""),e.needsAddressingPRs.length>0){o.push("### \u274C Needs Addressing");for(let a of e.needsAddressingPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),o.push(` \u2514\u2500 ${a.displayLabel} ${a.displayDescription}`);o.push("")}if(e.waitingOnMaintainerPRs.length>0){o.push("### \u23F3 Waiting on Maintainer");for(let a of e.waitingOnMaintainerPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`),o.push(` \u2514\u2500 ${a.displayDescription}`);o.push("")}if(e.recentlyMergedPRs.length>0){o.push("### \u{1F389} Recently Merged");for(let a of e.recentlyMergedPRs){let c=a.mergedAt?new Date(a.mergedAt).toLocaleDateString():"";o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (merged ${c})`:""}`)}o.push("")}if(e.recentlyClosedPRs.length>0){o.push("### \u{1F6AB} Recently Closed");for(let a of e.recentlyClosedPRs){let c=a.closedAt?new Date(a.closedAt).toLocaleDateString():"";o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}${c?` (closed ${c})`:""}`)}o.push("")}if(e.autoUnshelvedPRs.length>0){o.push("### \u{1F514} Auto-Unshelved"),o.push("> These PRs were shelved but a maintainer engaged \u2014 moved back to active.");for(let a of e.autoUnshelvedPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title} (${a.status.replace(/_/g," ")})`);o.push("")}if(e.shelvedPRs.length>0){o.push("### \u{1F4E6} Shelved");for(let a of e.shelvedPRs)o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);o.push("")}if(n.length>0){o.push("### \u{1F4AC} Issue Replies");for(let a of n){o.push(`- [${a.repo}#${a.number}](${a.url}): ${a.title}`);let c=Ws(a.lastResponseAt);o.push(` \u2514\u2500 @${a.lastResponseAuthor}: "${a.lastResponseBody.slice(0,80)}${a.lastResponseBody.length>80?"...":""}"${c?` (${c})`:""}`)}o.push("")}let r=t.hasCapacity?"\u2705":"\u26A0\uFE0F",i=t.hasCapacity?"Ready for new work":"Focus on existing PRs",s=t.shelvedPRCount>0?` + ${t.shelvedPRCount} shelved`:"";return o.push(`**Capacity:** ${r} ${i} (${t.activePRCount}/${t.maxActivePRs} PRs${s})`),o.join(`
|
|
128
128
|
`)}function yg(e,t,n=[]){if(console.log(`
|
|
129
129
|
\u{1F4CA} OSS Daily Check
|
|
130
130
|
`),console.log(`Active PRs: ${e.summary.totalActivePRs}`),console.log(`Needing Attention: ${e.summary.totalNeedingAttention}`),console.log(`Merged (all time): ${e.summary.totalMergedAllTime}`),console.log(`Merge Rate: ${e.summary.mergeRate}%`),console.log(`
|
|
131
131
|
Capacity: ${t.hasCapacity?"\u2705 Ready for new work":"\u26A0\uFE0F Focus on existing work"}`),console.log(` ${t.reason}
|
|
132
|
-
`),e.needsAddressingPRs.length>0){console.log("\u274C Needs Addressing:");for(let r of e.needsAddressingPRs)console.log(` - ${r.repo}#${r.number}: ${r.title}`),console.log(` ${r.displayLabel} ${r.displayDescription}`);console.log("")}if(e.waitingOnMaintainerPRs.length>0){console.log("\u23F3 Waiting on Maintainer:");for(let r of e.waitingOnMaintainerPRs)console.log(` - ${r.repo}#${r.number}: ${r.title}`),console.log(` ${r.displayDescription}`);console.log("")}if(e.recentlyMergedPRs.length>0){console.log("\u{1F389} Recently Merged:");for(let r of e.recentlyMergedPRs){let i=r.mergedAt?new Date(r.mergedAt).toLocaleDateString():"";console.log(` - ${r.repo}#${r.number}: ${r.title}${i?` (merged ${i})`:""}`)}console.log("")}if(e.recentlyClosedPRs.length>0){console.log("\u{1F6AB} Recently Closed:");for(let r of e.recentlyClosedPRs){let i=r.closedAt?new Date(r.closedAt).toLocaleDateString():"";console.log(` - ${r.repo}#${r.number}: ${r.title}${i?` (closed ${i})`:""}`)}console.log("")}if(e.autoUnshelvedPRs.length>0){console.log("\u{1F514} Auto-Unshelved:");for(let r of e.autoUnshelvedPRs)console.log(` - ${r.repo}#${r.number}: ${r.title} (${r.status.replace(/_/g," ")})`);console.log("")}if(e.shelvedPRs.length>0){console.log("\u{1F4E6} Shelved:");for(let r of e.shelvedPRs)console.log(` - ${r.repo}#${r.number}: ${r.title}`);console.log("")}let o=n.filter(r=>r.status==="new_response");if(o.length>0){console.log("\u{1F4AC} Issue Replies:");for(let r of o)console.log(` - ${r.repo}#${r.number}: ${r.title}`),console.log(` @${r.lastResponseAuthor}: ${r.lastResponseBody.slice(0,80)}${r.lastResponseBody.length>80?"...":""}`);console.log("")}console.log("Run with --json for structured output"),console.log('Run "dashboard serve" for browser view')}var jn,ER,B$,xR,J$=b(()=>{"use strict";Ue();$e();he();On();jn=new Set(["needs_addressing"]),ER=new Set(["needs_response","needs_changes","failing_ci","merge_conflict"]),B$=new Set(["dormant","approaching_dormant"]),xR=new Set(["needs_addressing","waiting_on_maintainer"])});function _g(e){let{repoScores:t,activePRCount:n}=e,o=0,r=0,i=[];for(let c of Object.values(t))o+=c.mergedPRCount,r+=c.closedWithoutMergeCount,c.mergedPRCount>0&&i.push({repo:c.repo,mergedCount:c.mergedPRCount});let s=o+r,a=s>0?o/s:0;return i.sort((c,u)=>u.mergedCount-c.mergedCount),{totalMerged:o,totalClosed:r,mergeRate:a,activePRs:n,reposContributed:i.length,topRepos:i.slice(0,10)}}var $g=b(()=>{"use strict"});async function wg(e,t,n){for(let o of RR)try{E(Mr,`Checking ${t}/${n} for template at ${o}`);let{data:r}=await e.repos.getContent({owner:t,repo:n,path:o});if(Array.isArray(r)){E(Mr,`${o} is a directory (multiple templates?), skipping`);continue}if(r.type!=="file"){E(Mr,`${o} is type "${r.type}", skipping`);continue}if(!r.content){E(Mr,`${o} has no content, skipping`);continue}let i=Buffer.from(r.content,"base64").toString("utf-8");return E(Mr,`Found PR template at ${o} (${i.length} chars)`),{template:i,source:o}}catch(r){if(He(r)===404)continue;if(De(r))throw r;let i=P(r);return v(Mr,`Error checking ${t}/${n}/${o}: ${i}`),{template:null,source:null,error:i}}return E(Mr,`No PR template found for ${t}/${n}`),{template:null,source:null}}var Mr,RR,Sg=b(()=>{"use strict";$e();he();Mr="pr-template",RR=[".github/PULL_REQUEST_TEMPLATE.md",".github/pull_request_template.md","docs/pull_request_template.md","pull_request_template.md"]});function AR(e){try{let t=tt.readFileSync(e,"utf-8");return JSON.parse(t)}catch(t){E(Ea,`Failed to parse ${e}: ${t instanceof Error?t.message:String(t)}`);return}}function DR(e){try{return tt.readFileSync(e,"utf-8")}catch(t){E(Ea,`Failed to read ${e}: ${t instanceof Error?t.message:String(t)}`);return}}function kg(e,t){for(let n of t)if(tt.existsSync(Ut.join(e,n)))return n}function UR(e){return AR(Ut.join(e,"package.json"))}function jR(e){if(!e?.scripts)return[];let t=[];for(let n of OR){let o=e.scripts[n];o&&t.push({name:n,command:o})}return t}function zR(e){return e?!!(e.devDependencies?.prettier||e.dependencies?.prettier):!1}function K$(e,t,n){let o=DR(Ut.join(e,t));return o?o.includes(n):!1}function xa(e){if(!tt.existsSync(e)||!tt.statSync(e).isDirectory())throw new Error(`Repository path does not exist or is not a directory: ${e}`);let t=[],n=UR(e),o=kg(e,["biome.json","biome.jsonc"]);o&&t.push({name:"biome",configPath:o,fixCommand:"npx @biomejs/biome check --write",checkCommand:"npx @biomejs/biome check",supportsFileArgs:!0});let r=kg(e,PR);r?t.push({name:"prettier",configPath:r,fixCommand:"npx prettier --write .",checkCommand:"npx prettier --check .",supportsFileArgs:!0}):zR(n)&&t.push({name:"prettier",configPath:"package.json",fixCommand:"npx prettier --write .",checkCommand:"npx prettier --check .",supportsFileArgs:!0});let i=kg(e,CR);i&&t.push({name:"eslint",configPath:i,fixCommand:"npx eslint --fix .",checkCommand:"npx eslint .",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,"Cargo.toml"))&&t.push({name:"rustfmt",configPath:"Cargo.toml",fixCommand:"cargo fmt",checkCommand:"cargo fmt --check",supportsFileArgs:!1});let s=tt.existsSync(Ut.join(e,"pyproject.toml"));s&&K$(e,"pyproject.toml","[tool.ruff]")?t.push({name:"ruff",configPath:"pyproject.toml",fixCommand:"ruff format .",checkCommand:"ruff format --check .",supportsFileArgs:!0}):s&&K$(e,"pyproject.toml","[tool.black]")?t.push({name:"black",configPath:"pyproject.toml",fixCommand:"black .",checkCommand:"black --check .",supportsFileArgs:!0}):tt.existsSync(Ut.join(e,"ruff.toml"))&&t.push({name:"ruff",configPath:"ruff.toml",fixCommand:"ruff format .",checkCommand:"ruff format --check .",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,"go.mod"))&&t.push({name:"gofmt",configPath:"go.mod",fixCommand:"gofmt -w .",checkCommand:"gofmt -d .",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,".clang-format"))&&t.push({name:"clang-format",configPath:".clang-format",fixCommand:"clang-format -i",checkCommand:"clang-format --dry-run --Werror",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,".rubocop.yml"))&&t.push({name:"rubocop",configPath:".rubocop.yml",fixCommand:"rubocop -a",checkCommand:"rubocop",supportsFileArgs:!0});let a=jR(n);return E(Ea,`Detected ${t.length} formatters in ${e}`),{formatters:t,packageJsonScripts:a,repoPath:e}}function Tg(e,t){if(!e.trim())return{isFormattingFailure:!1,evidence:[]};let n=[],o;for(let{formatter:i,patterns:s}of IR)for(let a of s){let c=e.match(a);c&&(n.push(c[0]),o||(o=i))}if(!o)return{isFormattingFailure:!1,evidence:[]};let r;if(t)try{let s=xa(t).formatters.find(a=>a.name===o);s&&(r=s.fixCommand)}catch(i){E(Ea,`Cross-reference failed for ${t}: ${i instanceof Error?i.message:String(i)}`)}return r||(r={prettier:"npx prettier --write .",eslint:"npx eslint --fix .",biome:"npx @biomejs/biome check --write",black:"black .",ruff:"ruff format .",rustfmt:"cargo fmt",gofmt:"gofmt -w .","clang-format":"clang-format -i",rubocop:"rubocop -a"}[o]),{isFormattingFailure:!0,formatter:o,fixCommand:r,evidence:n}}var tt,Ut,Ea,PR,CR,OR,IR,Eg=b(()=>{"use strict";tt=re(require("fs"),1),Ut=re(require("path"),1);$e();Ea="formatter-detection",PR=[".prettierrc",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml",".prettierrc.json5",".prettierrc.js",".prettierrc.cjs",".prettierrc.mjs",".prettierrc.toml","prettier.config.js","prettier.config.cjs","prettier.config.mjs"],CR=[".eslintrc",".eslintrc.js",".eslintrc.cjs",".eslintrc.yml",".eslintrc.yaml",".eslintrc.json","eslint.config.js","eslint.config.cjs","eslint.config.mjs","eslint.config.ts"],OR=["lint:fix","format","fmt","lint","format:check","format:fix"],IR=[{formatter:"prettier",patterns:[/Code style issues found/i,/Forgot to run Prettier/i,/prettier --check/i]},{formatter:"ruff",patterns:[/ruff format.*--check/i,/ruff format.*would reformat/i]},{formatter:"black",patterns:[/Oh no! .* files? would be reformatted/i,/black --check/i]},{formatter:"rustfmt",patterns:[/Diff in .*\.rs/i,/rustfmt --check/i,/cargo fmt.*--check/i]},{formatter:"biome",patterns:[/biome check/i,/biome ci/i,/Found \d+ fixable diagnostics?/i]},{formatter:"eslint",patterns:[/eslint.*--fix/i,/eslint.*\d+ problems?/i]},{formatter:"gofmt",patterns:[/gofmt -d/i,/goimports/i]},{formatter:"clang-format",patterns:[/clang-format/i]},{formatter:"rubocop",patterns:[/rubocop.*offense/i,/rubocop -a/i]}]});var Se=b(()=>{"use strict";On();v$();V$();_a();q$();ha();Dn();Ue();he();$e();Ur();J$();$g();Sg();Eg();Dt()});var Og={};ne(Og,{compactActionableIssues:()=>Rg,compactRepoGroups:()=>Pg,deduplicateDigest:()=>xg,jsonError:()=>Q$,jsonSuccess:()=>Y$,outputJson:()=>oe,outputJsonError:()=>Cg,toCompactDailyOutput:()=>X$,toCompactStartupOutput:()=>GR});function X$(e){return{digest:e.digest,capacity:e.capacity,briefSummary:e.briefSummary,actionableIssues:e.actionableIssues,actionMenu:e.actionMenu,commentedIssues:e.commentedIssues,failureCount:e.failures.length}}function xg(e){let t=n=>n.map(o=>o.url);return{generatedAt:e.generatedAt,openPRs:e.openPRs,needsAddressingPRs:t(e.needsAddressingPRs),waitingOnMaintainerPRs:t(e.waitingOnMaintainerPRs),recentlyClosedPRs:e.recentlyClosedPRs,recentlyMergedPRs:e.recentlyMergedPRs,shelvedPRs:e.shelvedPRs,autoUnshelvedPRs:e.autoUnshelvedPRs,summary:e.summary}}function Rg(e){return e.map(t=>({type:t.type,prUrl:t.pr.url,label:t.label,isNewContribution:t.isNewContribution}))}function Pg(e){return e.map(t=>({repo:t.repo,prUrls:t.prs.map(n=>n.url)}))}function GR(e){let{daily:t,...n}=e;return{...n,daily:t?X$(t):void 0,dashboardUrl:e.dashboardUrl,issueList:e.issueList}}function Y$(e){return{success:!0,data:e,timestamp:new Date().toISOString()}}function Q$(e){return{success:!1,error:e,timestamp:new Date().toISOString()}}function oe(e){console.log(JSON.stringify(Y$(e),null,2))}function Cg(e){console.log(JSON.stringify(Q$(e),null,2))}var Jo=b(()=>{"use strict"});function ew(e,t,n,o){let r=e.summary||{totalActivePRs:0,totalMergedAllTime:0,mergeRate:0,totalNeedingAttention:0},i=t.config.minStars??50,s=n!==void 0?Math.max(n,r.totalMergedAllTime):r.totalMergedAllTime,a=Object.values(t.repoScores||{}).reduce((u,l)=>u+(Wt(l.stargazersCount,i)?0:l.closedWithoutMergeCount||0),0),c=o!==void 0?Math.max(o,a):a;return{activePRs:r.totalActivePRs,shelvedPRs:(e.shelvedPRs||[]).length,mergedPRs:s,closedPRs:c,mergeRate:`${(r.mergeRate??0).toFixed(1)}%`}}function Ig(e,t){let n={...e};for(let[o,r]of Object.entries(t))n[o]=r;return n}function Ag(e,t,n,o,r){let i=K(),s=i.getState();try{Object.keys(t).length>0&&i.setMonthlyMergedCounts(Ig(s.monthlyMergedCounts||{},t))}catch(a){v(Ae,`Failed to store monthly merged counts: ${P(a)}`)}try{Object.keys(n).length>0&&i.setMonthlyClosedCounts(Ig(s.monthlyClosedCounts||{},n))}catch(a){v(Ae,`Failed to store monthly closed counts: ${P(a)}`)}try{let a={...o};for(let[c,u]of Object.entries(r))a[c]=(a[c]||0)+u;for(let c of e)if(c.createdAt){let u=c.createdAt.slice(0,7);a[u]=(a[u]||0)+1}Object.keys(a).length>0&&i.setMonthlyOpenedCounts(Ig(s.monthlyOpenedCounts||{},a))}catch(a){v(Ae,`Failed to store monthly opened counts: ${P(a)}`)}}async function Dg(e){let t=K(),n=new Gr(e),o=new Lr(e),r=je(e),i=t.getState().config,s=Ra(t.getState()),a=t.getMergedPRWatermark(),c=t.getClosedPRWatermark(),[{prs:u,failures:l},d,p,g,y,S,U,T]=await Promise.all([n.fetchUserOpenPRs(),n.fetchRecentlyClosedPRs().catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch recently closed PRs: ${P(R)}`),[]}),n.fetchRecentlyMergedPRs().catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch recently merged PRs: ${P(R)}`),[]}),n.fetchUserMergedPRCounts(s).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch merged PR counts: ${P(R)}`),zr()}),n.fetchUserClosedPRCounts(s).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch closed PR counts: ${P(R)}`),zr()}),o.fetchCommentedIssues().catch(R=>{if(De(R))throw R;let G=P(R);return G.includes("No GitHub username configured")?v(Ae,`Issue conversation tracking requires setup: ${G}`):v(Ae,`Issue conversation fetch failed: ${G}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${G}`}]}}),f$(r,i,a).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch merged PRs for storage: ${P(R)}`),[]}),h$(r,i,c).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch closed PRs for storage: ${P(R)}`),[]})]),L=S.issues;S.failures.length>0&&v(Ae,`${S.failures.length} issue conversation check(s) failed`),l.length>0&&v(Ae,`${l.length} PR fetch(es) failed`);try{t.batch(()=>{try{t.addMergedPRs(U)}catch(be){v(Ae,`Failed to store merged PRs: ${P(be)}`)}try{t.addClosedPRs(T)}catch(be){v(Ae,`Failed to store closed PRs: ${P(be)}`)}let{monthlyCounts:R,monthlyOpenedCounts:G}=g,{monthlyCounts:ee,monthlyOpenedCounts:q}=y;Ag(u,R,ee,G,q);let ae=n.generateDigest(u,d,p),Ge=new Set(t.getState().config.shelvedPRUrls||[]),ve=u.filter(be=>Ge.has(be.url)||be.stalenessTier==="dormant"&&be.status!=="needs_addressing");ae.shelvedPRs=ve.map(Yt),ae.autoUnshelvedPRs=[],ae.summary.totalActivePRs=u.length-ve.length,t.setLastDigest(ae)})}catch(R){v(Ae,`Failed to persist dashboard state: ${P(R)}`)}v(Ae,`Refreshed: ${u.length} PRs fetched`);let Z=Ug(t.getMergedPRs()),N=jg(t.getClosedPRs()),z=t.getState().lastDigest;if(!z)throw new Error("Dashboard data fetch failed: digest was not generated");return{digest:z,commentedIssues:L,allMergedPRs:Z,allClosedPRs:N}}function Ug(e){let t=[],n=0;for(let o of e){let r=Pe(o.url);if(!r){n++;continue}t.push({url:o.url,repo:`${r.owner}/${r.repo}`,number:r.number,title:o.title,mergedAt:o.mergedAt})}return n>0&&v(Ae,`Skipped ${n} stored merged PR(s) with unparseable URLs`),t}function jg(e){let t=[],n=0;for(let o of e){let r=Pe(o.url);if(!r){n++;continue}t.push({url:o.url,repo:`${r.owner}/${r.repo}`,number:r.number,title:o.title,closedAt:o.closedAt})}return n>0&&v(Ae,`Skipped ${n} stored closed PR(s) with unparseable URLs`),t}function tw(e,t){let n={};for(let r of e.openPRs||[])n[r.repo]||(n[r.repo]={active:0,merged:0,closed:0}),n[r.repo].active++;let o=t.config.minStars??50;for(let[r,i]of Object.entries(t.repoScores||{}))Wt(i.stargazersCount,o)||(n[r]||(n[r]={active:0,merged:0,closed:0}),n[r].merged=i.mergedPRCount,n[r].closed=i.closedWithoutMergeCount);return n}function rw(e,t=10){return Object.entries(e).sort((n,o)=>o[1].merged+o[1].active+o[1].closed-(n[1].merged+n[1].active+n[1].closed)).slice(0,t)}function nw(e){return{monthlyMerged:e.monthlyMergedCounts||{},monthlyClosed:e.monthlyClosedCounts||{},monthlyOpened:e.monthlyOpenedCounts||{}}}var Ae,zg=b(()=>{"use strict";Se();he();$e();ba();Ue();Dt();Ko();Ae="dashboard-data"});var Gg={};ne(Gg,{CRITICAL_STATUSES:()=>jn,applyStatusOverrides:()=>Nr,assessCapacity:()=>Vo,buildStarFilter:()=>Ra,collectActionableIssues:()=>Ho,computeActionMenu:()=>qo,computeRepoSignals:()=>Zo,executeDailyCheck:()=>Pa,formatBriefSummary:()=>Bo,formatSummary:()=>Wo,groupPRsByRepo:()=>Mo,printDigest:()=>yg,runDaily:()=>VR,runDailyForDisplay:()=>HR,toShelvedPRRef:()=>Yt});function Ra(e){let t=e.config.minStars??50,n=new Map;for(let[o,r]of Object.entries(e.repoScores))r.stargazersCount!==void 0&&n.set(o,r.stargazersCount);if(n.size!==0)return{minStars:t,knownStarCounts:n}}async function FR(e,t){let{prs:n,failures:o}=await e.fetchUserOpenPRs();o.length>0&&v(le,`${o.length} PR fetch(es) failed`);let r=K().getState(),i=Ra(r),s=new Lr(t),[a,c,u,l,d]=await Promise.all([e.fetchUserMergedPRCounts(i).catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch merged PR counts: ${P(Z)}`),zr()}),e.fetchUserClosedPRCounts(i).catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch closed PR counts: ${P(Z)}`),zr()}),e.fetchRecentlyClosedPRs().catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch recently closed PRs: ${P(Z)}`),[]}),e.fetchRecentlyMergedPRs().catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch recently merged PRs: ${P(Z)}`),[]}),s.fetchCommentedIssues().catch(Z=>{if(De(Z))throw Z;let N=P(Z);return N.includes("No GitHub username configured")?v(le,`Issue conversation tracking requires setup: ${N}`):v(le,`Issue conversation fetch failed: ${N}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${N}`}]}})]),p=d.issues;d.failures.length>0&&v(le,`${d.failures.length} issue conversation check(s) failed`);let{repos:g,monthlyCounts:y,monthlyOpenedCounts:S}=a,{repos:U,monthlyCounts:T,monthlyOpenedCounts:L}=c;return{prs:n,failures:o,mergedCounts:g,closedCounts:U,monthlyCounts:y,monthlyClosedCounts:T,openedFromMerged:S,openedFromClosed:L,recentlyClosedPRs:u,recentlyMergedPRs:l,commentedIssues:p}}async function LR(e,t,n,o){let r=K();try{r.batch(()=>{let a=Object.values(r.getState().repoScores).filter(g=>g.mergedPRCount>0);if(n.size===0&&a.length>0)v(le,`Skipping stale repo reset: API returned 0 merged PR results but state has ${a.length} repo(s) with merges. Possible API issue.`);else for(let g of Object.values(r.getState().repoScores))n.has(g.repo)||r.updateRepoScore(g.repo,{mergedPRCount:0});let c=0;for(let[g,{count:y,lastMergedAt:S}]of n)try{r.updateRepoScore(g,{mergedPRCount:y,lastMergedAt:S||void 0})}catch(U){c++,v(le,`Failed to update merged count for ${g}: ${P(U)}`)}c===n.size&&n.size>0&&v(le,`[ALL_MERGED_COUNT_UPDATES_FAILED] All ${n.size} merged count update(s) failed.`);let u=Object.values(r.getState().repoScores).filter(g=>(g.closedWithoutMergeCount||0)>0);o.size===0&&u.length>0&&v(le,`API returned 0 closed PR results but state has ${u.length} repo(s) with closed PRs. Possible transient API issue.`);let l=0;for(let[g,y]of o)try{r.updateRepoScore(g,{closedWithoutMergeCount:y})}catch(S){l++,v(le,`Failed to update closed count for ${g}: ${P(S)}`)}l===o.size&&o.size>0&&v(le,`[ALL_CLOSED_COUNT_UPDATES_FAILED] All ${o.size} closed count update(s) failed.`);let d=Zo(t),p=0;for(let[g,y]of d)try{r.updateRepoScore(g,{signals:y})}catch(S){p++,v(le,`Failed to update signals for ${g}: ${P(S)}`)}p===d.size&&d.size>0&&v(le,`[ALL_SIGNAL_UPDATES_FAILED] All ${d.size} signal update(s) failed. This may indicate corrupted state.`)})}catch(a){v(le,`Failed to persist repo score updates: ${P(a)}`)}let i=Object.keys(r.getState().repoScores),s;try{s=await e.fetchRepoMetadata(i)}catch(a){if(De(a))throw a;v(le,`Failed to fetch repo metadata: ${P(a)}`),v(le,"Repos without cached metadata will be excluded from dashboard stats and metadata badges until fetched on the next successful run."),s=new Map}try{r.batch(()=>{let a=0;for(let[u,{stars:l,language:d}]of s)try{r.updateRepoScore(u,{stargazersCount:l,language:d})}catch(p){a++,v(le,`Failed to update metadata for ${u}: ${P(p)}`)}a===s.size&&s.size>0&&v(le,`[ALL_METADATA_UPDATES_FAILED] All ${s.size} metadata update(s) failed.`);let c=0;for(let[u]of n)try{r.addTrustedProject(u)}catch(l){c++,v(le,`Failed to sync trusted project ${u}: ${P(l)}`)}c===n.size&&n.size>0&&v(le,`[ALL_TRUST_SYNCS_FAILED] All ${n.size} trusted project sync(s) failed. This may indicate corrupted state.`)})}catch(a){v(le,`Failed to persist metadata/trust updates: ${P(a)}`)}}function NR(e,t,n,o){let r=K(),i=Nr(t,r.getState()),s=[],a=[],c=[];try{r.batch(()=>{for(let d of i)r.isPRShelved(d.url)?jn.has(d.status)?(r.unshelvePR(d.url),a.push(Yt(d)),c.push(d)):s.push(Yt(d)):d.stalenessTier==="dormant"&&!jn.has(d.status)?s.push(Yt(d)):c.push(d);let l=e.generateDigest(i,n,o);l.shelvedPRs=s,l.autoUnshelvedPRs=a,l.summary.totalActivePRs=c.length,r.setLastDigest(l)})}catch(l){v(le,`Failed to persist partition state: ${P(l)}`)}let u=r.getState().lastDigest;return{activePRs:c,shelvedPRs:s,autoUnshelvedPRs:a,digest:u}}function MR(e,t,n,o,r,i){let s=K(),a=Vo(t,s.getState().config.maxActivePRs,n.length),c=[];try{s.batch(()=>{c=o.filter(S=>{let U=s.getIssueDismissedAt(S.url);if(!U)return!0;if(S.status==="new_response"){let T=new Date(S.lastResponseAt).getTime(),L=new Date(U).getTime();if(isNaN(T)||isNaN(L))return v(le,`Invalid timestamp in dismiss check for ${S.url}, including issue`),!0;if(T>L){v(le,`Auto-undismissing issue ${S.url}: new response at ${S.lastResponseAt} after dismiss at ${U}`);try{s.undismissIssue(S.url)}catch(Z){v(le,`Failed to persist auto-undismiss for ${S.url}: ${P(Z)}`)}return!0}}return!1})})}catch(S){v(le,`Failed to persist auto-undismiss state: ${P(S)}`)}let u=c.filter(S=>S.status==="new_response"),l=Wo(e,a,u),d=Ho(t,i);e.summary.totalNeedingAttention=d.length;let p=Bo(e,d.length,u.length),g=qo(d,a,c),y=Mo(t);return{digest:e,capacity:a,summary:l,briefSummary:p,actionableIssues:d,actionMenu:g,commentedIssues:c,repoGroups:y,failures:r}}function ZR(e){return{digest:xg(e.digest),capacity:e.capacity,summary:e.summary,briefSummary:e.briefSummary,actionableIssues:Rg(e.actionableIssues),actionMenu:e.actionMenu,commentedIssues:e.commentedIssues,repoGroups:Pg(e.repoGroups),failures:e.failures}}async function Pa(e){let t=await ow(e);return ZR(t)}async function ow(e){let t=new Gr(e),{prs:n,failures:o,mergedCounts:r,closedCounts:i,monthlyCounts:s,monthlyClosedCounts:a,openedFromMerged:c,openedFromClosed:u,recentlyClosedPRs:l,recentlyMergedPRs:d,commentedIssues:p}=await FR(t,e);await LR(t,n,r,i);try{K().batch(()=>{Ag(n,s,a,c,u)})}catch(T){v(le,`Failed to persist monthly analytics: ${P(T)}`)}let g=K().getState().lastDigestAt,{activePRs:y,shelvedPRs:S,digest:U}=NR(t,n,l,d);return MR(U,y,S,p,o,g)}async function VR(){let e=Ie();return Pa(e)}async function HR(){let e=Ie();return ow(e)}var le,Ko=b(()=>{"use strict";Se();he();$e();ba();zg();Jo();Se();le="daily"});var iw={};ne(iw,{runStatus:()=>qR});async function qR(e){let t=K(),n=t.getStats(),o=t.getState(),r=o.lastDigestAt||o.lastRunAt,{totalTracked:i,...s}=n,a={stats:s,lastRunAt:o.lastRunAt};return e.offline&&(a.offline=!0,a.lastUpdated=r),a}var sw=b(()=>{"use strict";Se()});var aw={};ne(aw,{runSearch:()=>BR});async function BR(e){let t=Ie(),n=new Kt(t),o=await n.searchIssues({maxResults:e.maxResults}),r=K(),{config:i}=r.getState(),s=i.excludeRepos||[],a=i.aiPolicyBlocklist??Rn.aiPolicyBlocklist??[],c={candidates:o.map(u=>{let l=r.getRepoScore(u.issue.repo);return{issue:{repo:u.issue.repo,repoUrl:`https://github.com/${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:l?{score:l.score,mergedPRCount:l.mergedPRCount,closedWithoutMergeCount:l.closedWithoutMergeCount,isResponsive:l.signals?.isResponsive??!1,lastMergedAt:l.lastMergedAt}:void 0}}),excludedRepos:s,aiPolicyBlocklist:a};return n.rateLimitWarning&&(c.rateLimitWarning=n.rateLimitWarning),c}var cw=b(()=>{"use strict";Se()});function qe(e,t,n){if(t.test(e))return;let o={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 fe(`Invalid ${n} URL: ${e}. Expected format: ${o[n]}`)}function ze(e){if(e.length>uw)throw new fe(`URL exceeds maximum length of ${uw} characters`);return e}function Fg(e){if(e.length>lw)throw new fe(`Message exceeds maximum length of ${lw} characters`);return e}function zn(e){if(!e||e.trim().length===0)throw new fe("GitHub username cannot be empty.");let t=e.trim();if(t.length>dw)throw new fe(`GitHub username must be at most ${dw} characters (got ${t.length}).`);if(!WR.test(t))throw new fe("GitHub username can only contain alphanumeric characters and hyphens.");if(t.startsWith("-"))throw new fe("GitHub username cannot start with a hyphen.");if(t.endsWith("-"))throw new fe("GitHub username cannot end with a hyphen.");if(JR.test(t))throw new fe("GitHub username cannot contain consecutive hyphens.");return t}var Qt,er,pw,uw,lw,dw,WR,JR,St=b(()=>{"use strict";he();Qt=/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+$/,er=/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/,pw=/^https:\/\/github\.com\/[^/]+\/[^/]+\/(issues|pull)\/\d+$/,uw=2048,lw=1e3;dw=39,WR=/^[a-zA-Z0-9-]+$/,JR=/--/});var mw={};ne(mw,{runVet:()=>KR});async function KR(e){ze(e.issueUrl),qe(e.issueUrl,er,"issue");let t=Ie(),o=await new Kt(t).vetIssue(e.issueUrl);return{issue:{repo:o.issue.repo,number:o.issue.number,title:o.issue.title,url:o.issue.url,labels:o.issue.labels},recommendation:o.recommendation,reasonsToApprove:o.reasonsToApprove,reasonsToSkip:o.reasonsToSkip,projectHealth:o.projectHealth,vettingResult:o.vettingResult}}var gw=b(()=>{"use strict";Se();St()});function Xo(){return hw.join(vt(),"dashboard-server.pid")}function Oa(e){Gn.writeFileSync(Xo(),JSON.stringify(e),{mode:384})}function Fn(){try{let e=Gn.readFileSync(Xo(),"utf-8"),t=JSON.parse(e);return typeof t!="object"||t===null||typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0||typeof t.port!="number"||typeof t.startedAt!="string"?(v(Ca,"PID file has invalid structure, ignoring"),null):t}catch(e){return e.code!=="ENOENT"&&v(Ca,`Failed to read PID file: ${e.message}`),null}}function fr(){try{Gn.unlinkSync(Xo())}catch(e){e.code!=="ENOENT"&&v(Ca,`Failed to remove PID file: ${e.message}`)}}function Yo(e){return new Promise(t=>{let n=fw.get(`http://127.0.0.1:${e}/api/data`,{timeout:2e3},o=>{o.resume(),t(o.statusCode===200)});n.on("error",()=>t(!1)),n.on("timeout",()=>{n.destroy(),t(!1)})})}async function Ia(){let e=Fn();if(!e)return null;try{process.kill(e.pid,0)}catch(t){let n=t.code;return n!=="ESRCH"&&n!=="EPERM"&&v(Ca,`Unexpected error checking PID ${e.pid}: ${t.message}`),fr(),null}return await Yo(e.port)?{port:e.port,url:`http://oss.localhost:${e.port}`}:(fr(),null)}var fw,Gn,hw,Ca,Aa=b(()=>{"use strict";fw=re(require("http"),1),Gn=re(require("fs"),1),hw=re(require("path"),1);Se();$e();Ca="dashboard-server"});var Ln,vw=b(()=>{"use strict";Ln=class{maxRequests;windowMs;timestamps=[];constructor(t){this.maxRequests=t.maxRequests,this.windowMs=t.windowMs}check(){let t=Date.now(),n=t-this.windowMs;if(this.timestamps=this.timestamps.filter(o=>o>n),this.timestamps.length>=this.maxRequests){let r=this.timestamps[0]+this.windowMs-t;return{allowed:!1,retryAfterSeconds:Math.ceil(r/1e3)}}return this.timestamps.push(t),{allowed:!0}}}});var Zr={};ne(Zr,{VALID_TARGETS:()=>Lg,runMove:()=>XR});async function XR(e){ze(e.prUrl),qe(e.prUrl,Qt,"PR");let t=e.target;if(!Lg.includes(t))throw new Error(`Invalid target "${e.target}". Must be one of: ${Lg.join(", ")}`);let n=K();switch(t){case"attention":case"waiting":{let o=t==="attention"?"needs_addressing":"waiting_on_maintainer",r=t==="attention"?"Need Attention":"Waiting on Maintainer",i=new Date().toISOString();return n.batch(()=>{n.setStatusOverride(e.prUrl,o,i),n.unshelvePR(e.prUrl)}),{url:e.prUrl,target:t,description:`Moved to ${r}`}}case"shelved":return n.batch(()=>{n.shelvePR(e.prUrl),n.clearStatusOverride(e.prUrl)}),{url:e.prUrl,target:t,description:"Shelved \u2014 excluded from capacity and actionable items"};case"auto":return n.batch(()=>{n.clearStatusOverride(e.prUrl),n.unshelvePR(e.prUrl)}),{url:e.prUrl,target:t,description:"Reset to computed status"};default:{let o=t;throw new Error(`Unhandled move target: ${o}`)}}}var Lg,Vr=b(()=>{"use strict";Se();St();Lg=["attention","waiting","shelved","auto"]});var ww={};ne(ww,{findRunningDashboardServer:()=>Ia,getDashboardPidPath:()=>Xo,isDashboardServerRunning:()=>Yo,readDashboardServerInfo:()=>Fn,removeDashboardServerInfo:()=>fr,startDashboardServer:()=>rP,writeDashboardServerInfo:()=>Oa});function Qo(e,t,n,o,r){let i=tw(e,t),s=rw(i),{monthlyMerged:a,monthlyOpened:c,monthlyClosed:u}=nw(t),l=o??Ug(K().getMergedPRs()),d=r??jg(K().getClosedPRs()),p=t.config.minStars??50,g=t.repoScores||{},y=z=>!Wt(g[z.repo]?.stargazersCount,p),S=l.filter(y),U=d.filter(y),T=ew(e,t,S.length,U.length),L=t.config.dismissedIssues||{},Z=n.filter(z=>z.status==="new_response"&&!(z.url in L)),N={};for(let[z,R]of Object.entries(g))(R.stargazersCount!==void 0||R.language!==void 0)&&(N[z]={stars:R.stargazersCount,language:R.language});return{stats:T,prsByRepo:i,topRepos:s.map(([z,R])=>({repo:z,...R})),monthlyMerged:a,monthlyOpened:c,monthlyClosed:u,activePRs:Nr(e.openPRs||[],t),shelvedPRUrls:t.config.shelvedPRUrls||[],recentlyMergedPRs:e.recentlyMergedPRs||[],recentlyClosedPRs:e.recentlyClosedPRs||[],autoUnshelvedPRs:e.autoUnshelvedPRs||[],commentedIssues:n,issueResponses:Z,allMergedPRs:S,allClosedPRs:U,repoMetadata:N}}function tP(e,t=YR){return new Promise((n,o)=>{let r=[],i=0,s=!1;e.on("data",a=>{if(!s){if(i+=a.length,i>t){s=!0,e.destroy(),o(new Error("Body too large"));return}r.push(a)}}),e.on("end",()=>{s||n(Buffer.concat(r).toString("utf-8"))}),e.on("error",a=>{s||o(a)})})}function $w(e){e.setHeader("X-Content-Type-Options","nosniff"),e.setHeader("X-Frame-Options","DENY"),e.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'"),e.setHeader("Referrer-Policy","strict-origin-when-cross-origin")}function yw(e,t){let n=e.headers.origin;return n?[`http://localhost:${t}`,`http://127.0.0.1:${t}`,`http://oss.localhost:${t}`].includes(n):!0}function Da(e,t,n){$w(e),e.setHeader("Cache-Control","no-store");let o=JSON.stringify(n);e.writeHead(t,{"Content-Type":"application/json","Content-Length":Buffer.byteLength(o)}),e.end(o)}function xe(e,t,n){Da(e,t,{error:n})}async function rP(e){let{port:t,assetsDir:n,token:o,open:r}=e,i=K(),s=jt.resolve(n),a=i.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=Qo(a,i.getState(),c)}catch(z){throw new Error(`Failed to build dashboard data: ${P(z)}. State data may be corrupted \u2014 try running: daily --json`,{cause:z})}let l=new Ln({maxRequests:30,windowMs:6e4}),d=new Ln({maxRequests:10,windowMs:6e4}),p=new Ln({maxRequests:6,windowMs:6e4}),g=_w.createServer(async(z,R)=>{let G=z.method||"GET",ee=z.url||"/";try{if(ee==="/api/data"&&G==="GET"){let q=l.check();if(!q.allowed){R.setHeader("Retry-After",String(q.retryAfterSeconds)),xe(R,429,"Too many requests");return}if(i.reloadIfChanged())try{u=Qo(a,i.getState(),c)}catch(ae){v(rt,`Failed to rebuild dashboard data after state reload: ${P(ae)}`)}Da(R,200,u);return}if(ee==="/api/action"&&G==="POST"){if(!yw(z,L)){xe(R,403,"Invalid origin");return}let q=d.check();if(!q.allowed){R.setHeader("Retry-After",String(q.retryAfterSeconds)),xe(R,429,"Too many requests");return}await y(z,R);return}if(ee==="/api/refresh"&&G==="POST"){if(!yw(z,L)){xe(R,403,"Invalid origin");return}let q=p.check();if(!q.allowed){R.setHeader("Retry-After",String(q.retryAfterSeconds)),xe(R,429,"Too many requests");return}await S(z,R);return}if(G==="GET"){U(ee,R);return}xe(R,405,"Method not allowed")}catch(q){v(rt,`Unhandled request error: ${G} ${ee} ${P(q)}`),R.headersSent||xe(R,500,"Internal server error")}});g.requestTimeout=QR;async function y(z,R){i.reloadIfChanged();let G;try{let q=await tP(z);G=JSON.parse(q)}catch(q){let ae=q instanceof Error&&q.message==="Body too large";xe(R,ae?413:400,ae?"Request body too large":"Invalid JSON body");return}if(!G.action||!bw.has(G.action)){xe(R,400,`Invalid action. Must be one of: ${[...bw].join(", ")}`);return}if(!G.url||typeof G.url!="string"){xe(R,400,'Missing or invalid "url" field');return}let ee=G.action==="dismiss_issue_response";try{ze(G.url),qe(G.url,ee?er:Qt,ee?"issue":"PR")}catch(q){q instanceof fe?xe(R,400,q.message):(v(rt,`Unexpected error during URL validation: ${P(q)}`),xe(R,400,"Invalid URL"));return}try{if(G.action==="move"){let{VALID_TARGETS:q,runMove:ae}=await Promise.resolve().then(()=>(Vr(),Zr));if(!G.target||!q.includes(G.target)){xe(R,400,`move requires a valid "target" field (${q.join(", ")})`);return}await ae({prUrl:G.url,target:G.target})}else i.dismissIssue(G.url,new Date().toISOString())}catch(q){v(rt,`Action failed: ${G.action} ${G.url} ${P(q)}`),xe(R,500,"Action failed");return}u=Qo(a,i.getState(),c),Da(R,200,u)}async function S(z,R){let G=o||Bt();if(!G){xe(R,401,"No GitHub token available. Cannot refresh data.");return}try{i.reloadIfChanged(),v(rt,"Refreshing dashboard data from GitHub...");let ee=await Dg(G);a=ee.digest,c=ee.commentedIssues,u=Qo(a,i.getState(),c,ee.allMergedPRs,ee.allClosedPRs),Da(R,200,u)}catch(ee){v(rt,`Dashboard refresh failed: ${P(ee)}`),xe(R,500,"Refresh failed")}}function U(z,R){let G;try{G=decodeURIComponent(z.split("?")[0])}catch{v(rt,`Malformed URL received: ${z}`),xe(R,400,"Malformed URL");return}if(G.includes("..")){xe(R,403,"Forbidden");return}let ee=G==="/"?"index.html":G.replace(/^\/+/,""),q=jt.join(s,ee);if(!q.startsWith(s+jt.sep)&&q!==s){xe(R,403,"Forbidden");return}try{Ua.statSync(q).isDirectory()&&(q=jt.join(s,"index.html"))}catch(ve){if(ve.code==="ENOENT")q=jt.join(s,"index.html");else{v(rt,`Failed to stat file: ${q}`),xe(R,500,"Internal server error");return}}let ae=jt.extname(q).toLowerCase(),Ge=eP[ae]||"application/octet-stream";try{let ve=Ua.readFileSync(q);$w(R),R.writeHead(200,{"Content-Type":Ge,"Content-Length":ve.length,"Cache-Control":"public, max-age=3600"}),R.end(ve)}catch(ve){ve.code==="ENOENT"?xe(R,404,"Not found"):(v(rt,`Failed to serve static file: ${q}`),xe(R,500,"Failed to read file"))}}let T=10,L=t;for(let z=0;z<T;z++)try{await new Promise((R,G)=>{g.once("error",G),g.listen(L,"127.0.0.1",()=>R())});break}catch(R){let G=R;if(G.code==="EADDRINUSE"&&z<T-1){v(rt,`Port ${L} is in use, trying ${L+1}...`),L++;continue}throw new Error(`Failed to start server: ${G.message}`,{cause:R})}Oa({pid:process.pid,port:L,startedAt:new Date().toISOString(),version:At()});let Z=`http://oss.localhost:${L}`;v(rt,`Dashboard server running at ${Z} (also: http://localhost:${L})`),o&&Dg(o).then(z=>{i.reloadIfChanged(),a=z.digest,c=z.commentedIssues,u=Qo(a,i.getState(),c,z.allMergedPRs,z.allClosedPRs),v(rt,"Background data refresh complete")}).catch(z=>{v(rt,`Background data refresh failed (serving cached data): ${P(z)}`)}),r&&ja(Z);let N=()=>{v(rt,"Shutting down dashboard server..."),fr(),g.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),3e3).unref()};process.on("SIGINT",N),process.on("SIGTERM",N)}var _w,Ua,jt,bw,rt,YR,QR,eP,Sw=b(()=>{"use strict";_w=re(require("http"),1),Ua=re(require("fs"),1),jt=re(require("path"),1);Se();he();$e();St();zg();za();Aa();vw();Dt();Aa();bw=new Set(["move","dismiss_issue_response"]),rt="dashboard-server",YR=10240,QR=3e4,eP={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".json":"application/json",".png":"image/png",".ico":"image/x-icon"}});var kw={};ne(kw,{resolveAssetsDir:()=>Fa,serveDashboard:()=>nP});function Fa(){let e=kt.resolve(__dirname,"../../dashboard/dist");if(Ga.existsSync(kt.join(e,"index.html")))return e;let t=kt.resolve(kt.dirname(process.argv[1]),"../../dashboard/dist");if(Ga.existsSync(kt.join(t,"index.html")))return t;try{let n=require.resolve("@oss-autopilot/dashboard/package.json"),o=kt.join(kt.dirname(n),"dist");if(Ga.existsSync(kt.join(o,"index.html")))return o}catch(n){n.code!=="MODULE_NOT_FOUND"&&console.error("Error resolving dashboard package:",n)}return null}async function nP(e){let t=Fa();t||(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 n=Bt(),{startDashboardServer:o}=await Promise.resolve().then(()=>(Sw(),ww));await o({port:e.port,assetsDir:t,token:n,open:e.open})}var Ga,kt,Ng=b(()=>{"use strict";Ga=re(require("fs"),1),kt=re(require("path"),1);Se()});function aP(e){return new Promise(t=>setTimeout(t,e))}async function Ew(e){if(!Fa())return null;let n=await Ia();if(n){let c=Fn(),u=At();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 l=!1;try{process.kill(c.pid,"SIGTERM"),l=!0}catch(d){d.code==="ESRCH"?l=!0:console.error(`[STARTUP] Could not kill outdated dashboard (PID ${c.pid}): ${d.message}`)}if(l)fr();else return{url:n.url,port:n.port,alreadyRunning:!0}}else return{url:n.url,port:n.port,alreadyRunning:!0}}let o=e?.port??oP,r=process.argv[1],i=(0,Tw.spawn)("node",[r,"dashboard","serve","--port",String(o),"--no-open"],{detached:!0,stdio:"ignore"}),s=!1,a=!1;i.on("error",c=>{s=!0,console.error(`[STARTUP] Failed to spawn dashboard server: ${c.message}`)}),i.on("exit",c=>{a=!0,c!==0&&c!==null&&console.error(`[STARTUP] Dashboard server exited prematurely (code ${c})`)}),i.unref();for(let c=0;c<sP;c++){if(await aP(iP),s||a)return null;let u=Fn();if(u&&await Yo(u.port))return{url:`http://oss.localhost:${u.port}`,port:u.port,alreadyRunning:!1}}if(console.error("[STARTUP] Dashboard server failed to start within 5 seconds"),i.pid)try{process.kill(i.pid,"SIGTERM")}catch(c){c.code!=="ESRCH"&&console.error(`[STARTUP] Failed to kill orphan dashboard process (PID ${i.pid}): ${c.message}`)}return null}var Tw,oP,iP,sP,xw=b(()=>{"use strict";Tw=require("child_process");Aa();Ng();Se();oP=3e3,iP=200,sP=25});var Ow={};ne(Ow,{countIssueListItems:()=>Cw,detectIssueList:()=>La,openInBrowser:()=>ja,parseIssueListPathFromConfig:()=>Pw,runStartup:()=>cP});function Pw(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return;let o=t[1].match(/issueListPath:\s*["']?([^"'\n]+)["']?/);return o?o[1].trim():void 0}function Cw(e){let t=0,n=0,o=e.split(`
|
|
133
|
-
`);for(let r of o)/^\s*- (?:~~)?\[/.test(r)&&(/~~|\*\*Done\*\*/.test(r)?n++:t++);return{availableCount:t,completedCount:n}}function La(){let e="",t="auto-detected";try{let o=K().getState().config.issueListPath;o&&hr.existsSync(o)&&(e=o,t="configured")}catch(n){v("startup",`Could not read issueListPath from state: ${P(n)}`)}if(!e){let n=".claude/oss-autopilot/config.md";if(hr.existsSync(n))try{let o=hr.readFileSync(n,"utf-8"),r=Pw(o);r&&hr.existsSync(r)&&(e=r,t="configured")}catch(o){console.error("[STARTUP] Failed to read config:",P(o))}}if(!e){let n=["open-source/potential-issue-list.md","oss/issue-list.md","issues.md"];for(let o of n)if(hr.existsSync(o)){e=o,t="auto-detected";break}}if(e)try{let n=hr.readFileSync(e,"utf-8"),{availableCount:o,completedCount:r}=Cw(n);return{path:e,source:t,availableCount:o,completedCount:r}}catch(n){return console.error(`[STARTUP] Failed to read issue list at ${e}:`,P(n)),{path:e,source:t,availableCount:0,completedCount:0}}}function ja(e){let t,n;switch(process.platform){case"darwin":t="open",n=[e];break;case"win32":t="cmd",n=["/c","start","",e];break;default:t="xdg-open",n=[e];break}(0,Rw.execFile)(t,n,o=>{o&&console.error(`[STARTUP] Failed to open dashboard in browser: ${o.message}`)})}async function
|
|
134
|
-
`),n=[],o=[],r="Uncategorized";for(let i of t){let s=i.match(/^#{1,3}\s+(.+)/);if(s){r=s[1].trim();continue}if(!i.trim()||!/^\s*[-*+]|\s*\d+\.|\s*\[[ xX]\]/.test(i))continue;let a=uP(i);if(!a)continue;let c=lP(i),u={repo:a.repo,number:a.number,title:c||`#${a.number}`,tier:r,url:a.url};dP(i)?o.push(u):n.push(u)}return{available:n,completed:o,availableCount:n.length,completedCount:o.length}}async function pP(e){let t=Iw.resolve(e.filePath);if(!Na.existsSync(t))throw new Error(`File not found: ${t}`);let n;try{n=Na.readFileSync(t,"utf-8")}catch(o){let r=P(o);throw new Error(`Failed to read file: ${r}`,{cause:o})}return Aw(n)}var Na,Iw,Zg=b(()=>{"use strict";Na=re(require("fs"),1),Iw=re(require("path"),1);he()});var Uw={};ne(Uw,{classifyListStatus:()=>Dw,runVetList:()=>mP});function Dw(e){let t=e.reasonsToSkip.map(n=>n.toLowerCase());return t.some(n=>n.includes("closed"))?"closed":t.some(n=>n.includes("claimed")||n.includes("assigned"))?"claimed":t.some(n=>n.includes("existing pr")||n.includes("linked pr")||n.includes("pull request"))?"has_pr":(e.recommendation==="approve"||e.recommendation==="needs_review","still_available")}async function mP(e={}){let t=Ie(),n=e.concurrency??5,o=e.issueListPath;if(!o){let g=La();if(!g)throw new Error("No issue list found. Provide a path with --path or configure issueListPath in settings.");o=g.path}let{runParseList:r}=await Promise.resolve().then(()=>(Zg(),Mg)),i=await r({filePath:o});if(i.available.length===0)return{results:[],summary:{total:0,stillAvailable:0,claimed:0,closed:0,hasPR:0,errors:0}};let s=new Kt(t),a=[],c=i.available,u=0;async function l(){for(;u<c.length;){let g=c[u++];try{let y=await s.vetIssue(g.url),S={issue:{repo:y.issue.repo,number:y.issue.number,title:y.issue.title,url:y.issue.url,labels:y.issue.labels},recommendation:y.recommendation,reasonsToApprove:y.reasonsToApprove,reasonsToSkip:y.reasonsToSkip,projectHealth:y.projectHealth,vettingResult:y.vettingResult};a.push({...S,listStatus:Dw(S)})}catch(y){a.push({issue:{repo:g.repo,number:g.number,title:g.title,url:g.url,labels:[]},recommendation:"skip",reasonsToApprove:[],reasonsToSkip:[`Error: ${y instanceof Error?y.message:String(y)}`],projectHealth:{},vettingResult:{},listStatus:"error",errorMessage:y instanceof Error?y.message:String(y)})}}}let d=Array.from({length:Math.min(n,c.length)},()=>l());await Promise.all(d);let p={total:a.length,stillAvailable:a.filter(g=>g.listStatus==="still_available").length,claimed:a.filter(g=>g.listStatus==="claimed").length,closed:a.filter(g=>g.listStatus==="closed").length,hasPR:a.filter(g=>g.listStatus==="has_pr").length,errors:a.filter(g=>g.listStatus==="error").length};return{results:a,summary:p}}var jw=b(()=>{"use strict";Se();za()});var Vg={};ne(Vg,{runTrack:()=>gP,runUntrack:()=>fP});async function gP(e){ze(e.prUrl),qe(e.prUrl,Qt,"PR");let t=Ie(),n=je(t),o=Pe(e.prUrl);if(!o||o.type!=="pull")throw new Error(`Invalid PR URL: ${e.prUrl}`);let{owner:r,repo:i,number:s}=o,{data:a}=await n.pulls.get({owner:r,repo:i,pull_number:s});return{pr:{repo:`${r}/${i}`,number:s,title:a.title,url:e.prUrl}}}async function fP(e){return ze(e.prUrl),qe(e.prUrl,Qt,"PR"),{removed:!1,url:e.prUrl,message:"In v2, PRs are fetched fresh on each daily run \u2014 there is no local tracking list to remove from."}}var Hg=b(()=>{"use strict";Se();St();Ue()});var zw={};ne(zw,{runRead:()=>hP});async function hP(e){if(!e.all&&!e.prUrl)throw new Error("PR URL or --all flag required");return e.prUrl&&ze(e.prUrl),e.all?{markedAsRead:0,all:!0,message:"In v2, PR read state is not tracked locally."}:{marked:!1,url:e.prUrl,message:"In v2, PR read state is not tracked locally."}}var Gw=b(()=>{"use strict";St()});var Ma={};ne(Ma,{runClaim:()=>yP,runComments:()=>vP,runPost:()=>bP});async function vP(e){ze(e.prUrl),qe(e.prUrl,Qt,"PR");let t=Ie(),n=K(),o=je(t),r=Pe(e.prUrl);if(!r||r.type!=="pull")throw new Error("Invalid PR URL format");let{owner:i,repo:s,number:a}=r,{data:c}=await o.pulls.get({owner:i,repo:s,pull_number:a}),[u,l,d]=await Promise.all([$t(T=>o.pulls.listReviewComments({owner:i,repo:s,pull_number:a,per_page:100,page:T})),$t(T=>o.issues.listComments({owner:i,repo:s,issue_number:a,per_page:100,page:T})),$t(T=>o.pulls.listReviews({owner:i,repo:s,pull_number:a,per_page:100,page:T}))]),p=n.getState().config.githubUsername,g=T=>!(!T.user||T.user.login===p||T.user.type==="Bot"&&!e.showBots),y=u.filter(g).sort((T,L)=>new Date(L.created_at).getTime()-new Date(T.created_at).getTime()),S=l.filter(g).sort((T,L)=>new Date(L.created_at).getTime()-new Date(T.created_at).getTime()),U=d.filter(T=>g(T)&&T.body&&T.body.trim()).sort((T,L)=>new Date(L.submitted_at||0).getTime()-new Date(T.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:U.map(T=>({user:T.user?.login,state:T.state,body:T.body??null,submittedAt:T.submitted_at??null})),reviewComments:y.map(T=>({user:T.user?.login,body:T.body,path:T.path,createdAt:T.created_at})),issueComments:S.map(T=>({user:T.user?.login,body:T.body,createdAt:T.created_at})),summary:{reviewCount:U.length,inlineCommentCount:y.length,discussionCommentCount:S.length}}}async function bP(e){if(ze(e.url),qe(e.url,pw,"issue or PR"),!e.message.trim())throw new Error("No message provided");Fg(e.message);let t=Ie(),n=Pe(e.url);if(!n)throw new Error("Invalid GitHub URL format");let{owner:o,repo:r,number:i}=n,s=je(t),{data:a}=await s.issues.createComment({owner:o,repo:r,issue_number:i,body:e.message});return{commentUrl:a.html_url,url:e.url}}async function yP(e){ze(e.issueUrl),qe(e.issueUrl,er,"issue");let t=Ie(),n=e.message||"Hi! I'd like to work on this issue. Could you assign it to me?";Fg(n);let o=Pe(e.issueUrl);if(!o||o.type!=="issues")throw new Error("Invalid issue URL format (must be an issue, not a PR)");let{owner:r,repo:i,number:s}=o,a=je(t),{data:c}=await a.issues.createComment({owner:r,repo:i,issue_number:s,body:n});try{K().addIssue({id:s,url:e.issueUrl,repo:`${r}/${i}`,number:s,title:"(claimed)",status:"claimed",labels:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),vetted:!1})}catch(u){console.error(`Warning: Comment posted on ${e.issueUrl} but failed to save to local state: ${u instanceof Error?u.message:u}`)}return{commentUrl:c.html_url,issueUrl:e.issueUrl}}var Za=b(()=>{"use strict";Se();Go();St()});var Lw={};ne(Lw,{runConfig:()=>_P});function Fw(e){if(!Pn.includes(e))throw new Error(`Invalid scope "${e}". Valid scopes: ${Pn.join(", ")}`);return e}async function _P(e){let t=K(),n=t.getState().config;if(!e.key)return{config:n};if(!e.value)throw new Error("Value required");let o=e.value;switch(e.key){case"username":t.updateConfig({githubUsername:zn(o)});break;case"add-language":n.languages.includes(o)||t.updateConfig({languages:[...n.languages,o]});break;case"add-label":n.labels.includes(o)||t.updateConfig({labels:[...n.labels,o]});break;case"remove-label":if(!n.labels.includes(o))throw new Error(`Label "${o}" is not currently configured. Current labels: ${n.labels.join(", ")}`);t.updateConfig({labels:n.labels.filter(r=>r!==o)});break;case"add-scope":{let r=Fw(o),i=n.scope??[];i.includes(r)||t.updateConfig({scope:[...i,r]});break}case"remove-scope":{let r=Fw(o),i=n.scope??[];if(!i.includes(r))throw new Error(`Scope "${o}" is not currently set`);let s=i.filter(a=>a!==r);if(s.length===0)throw new Error("Cannot remove the last scope. Use setup to clear scopes entirely.");t.updateConfig({scope:s});break}case"exclude-repo":{let r=o.split("/");if(r.length!==2||!r[0]||!r[1])throw new Error(`Invalid repo format "${o}". Use "owner/repo" format. To exclude an entire org, use: config exclude-org ${o}`);let i=o.toLowerCase();n.excludeRepos.some(s=>s.toLowerCase()===i)||t.batch(()=>{t.updateConfig({excludeRepos:[...n.excludeRepos,o]}),t.cleanupExcludedData([o],[])});break}case"exclude-org":{if(o.includes("/"))throw new Error(`Invalid org name "${o}". Use just the org name (e.g., "facebook"), not "owner/repo" format. To exclude a specific repo, use: config exclude-repo ${o}`);let r=n.excludeOrgs??[];r.some(i=>i.toLowerCase()===o.toLowerCase())||t.batch(()=>{t.updateConfig({excludeOrgs:[...r,o]}),t.cleanupExcludedData([],[o])});break}case"issueListPath":t.updateConfig({issueListPath:o||void 0});break;case"scoreThreshold":{let r=Number(o);if(!Number.isInteger(r)||r<1||r>10)throw new fe(`Invalid value for scoreThreshold: "${o}". Must be an integer between 1 and 10.`);t.updateConfig({scoreThreshold:r});break}default:throw new Error(`Unknown config key: ${e.key}`)}return{success:!0,key:e.key,value:o}}var Nw=b(()=>{"use strict";Se();he();Dt();St()});var Mw={};ne(Mw,{runInit:()=>$P});async function $P(e){return zn(e.username),K().updateConfig({githubUsername:e.username}),{username:e.username,message:"Username saved. Run `daily` to fetch your open PRs from GitHub."}}var Zw=b(()=>{"use strict";Se();St()});var Bg={};ne(Bg,{runCheckSetup:()=>kP,runSetup:()=>SP});function qg(e,t){let n=Number(e);if(!Number.isInteger(n)||n<1)throw new fe(`Invalid value for ${t}: "${e}". Must be a positive integer.`);return n}function wP(e,t,n,o){let r=Number(e);if(!Number.isInteger(r)||r<n||r>o)throw new fe(`Invalid value for ${t}: "${e}". Must be an integer between ${n} and ${o}.`);return r}async function SP(e){let t=K(),n=t.getState().config;if(e.set&&e.set.length>0){let o={},r=[];return t.batch(()=>{for(let i of e.set){let[s,...a]=i.split("="),c=a.join("=");switch(s){case"username":zn(c),t.updateConfig({githubUsername:c}),o[s]=c;break;case"maxActivePRs":{let u=qg(c,"maxActivePRs");t.updateConfig({maxActivePRs:u}),o[s]=String(u);break}case"dormantDays":{let u=qg(c,"dormantDays");t.updateConfig({dormantThresholdDays:u}),o[s]=String(u);break}case"approachingDays":{let u=qg(c,"approachingDays");t.updateConfig({approachingDormantDays:u}),o[s]=String(u);break}case"languages":t.updateConfig({languages:c.split(",").map(u=>u.trim())}),o[s]=c;break;case"labels":t.updateConfig({labels:c.split(",").map(u=>u.trim())}),o[s]=c;break;case"showHealthCheck":t.updateConfig({showHealthCheck:c!=="false"}),o[s]=c!=="false"?"true":"false";break;case"squashByDefault":c==="ask"?(t.updateConfig({squashByDefault:"ask"}),o[s]="ask"):(t.updateConfig({squashByDefault:c!=="false"}),o[s]=c!=="false"?"true":"false");break;case"scoreThreshold":{let u=wP(c,"scoreThreshold",1,10);t.updateConfig({scoreThreshold:u}),o[s]=String(u);break}case"minStars":{let u=Number(c);if(!Number.isInteger(u)||u<0)throw new fe(`Invalid value for minStars: "${c}". Must be a non-negative integer.`);t.updateConfig({minStars:u}),o[s]=String(u);break}case"includeDocIssues":t.updateConfig({includeDocIssues:c==="true"}),o[s]=c==="true"?"true":"false";break;case"aiPolicyBlocklist":{let u=c.split(",").map(p=>p.trim()).filter(Boolean),l=[],d=[];for(let p of u){let g=p.replace(/\s+/g,"");/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(g)?l.push(g):d.push(p)}if(d.length>0&&(r.push(`Warning: Skipping invalid entries (expected "owner/repo" format): ${d.join(", ")}`),o.aiPolicyBlocklist_invalidEntries=d.join(", ")),l.length===0&&u.length>0){r.push("Warning: All entries were invalid. Blocklist not updated."),o[s]="(all entries invalid)";break}t.updateConfig({aiPolicyBlocklist:l}),o[s]=l.length>0?l.join(", "):"(empty)";break}case"projectCategories":{let u=c.split(",").map(g=>g.trim()).filter(Boolean),l=[],d=[];for(let g of u)Um.includes(g)?l.push(g):d.push(g);d.length>0&&r.push(`Unknown project categories: ${d.join(", ")}. Valid: ${Um.join(", ")}`);let p=[...new Set(l)];t.updateConfig({projectCategories:p}),o[s]=p.length>0?p.join(", "):"(empty)";break}case"preferredOrgs":{let u=c.split(",").map(p=>p.trim()).filter(Boolean),l=[];for(let p of u)p.includes("/")?r.push(`"${p}" looks like a repo path. Use org name only (e.g., "vercel" not "vercel/next.js").`):/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(p)?l.push(p.toLowerCase()):r.push(`"${p}" is not a valid GitHub organization name. Skipping.`);let d=[...new Set(l)];t.updateConfig({preferredOrgs:d}),o[s]=d.length>0?d.join(", "):"(empty)";break}case"scope":{let u=c.split(",").map(g=>g.trim()).filter(Boolean),l=[],d=[];for(let g of u)Pn.includes(g)?l.push(g):d.push(g);d.length>0&&r.push(`Unknown issue scopes: ${d.join(", ")}. Valid: ${Pn.join(", ")}`);let p=[...new Set(l)];t.updateConfig({scope:p.length>0?p:void 0}),o[s]=p.length>0?p.join(", "):"(empty \u2014 using labels only)";break}case"issueListPath":t.updateConfig({issueListPath:c||void 0}),o[s]=c||"(cleared)";break;case"complete":c==="true"&&(t.markSetupComplete(),o[s]="true");break;default:r.push(`Unknown setting: ${s}`)}}}),{success:!0,settings:o,warnings:r.length>0?r:void 0}}return n.setupComplete&&!e.reset?{setupComplete:!0,config:{githubUsername:n.githubUsername,maxActivePRs:n.maxActivePRs,dormantThresholdDays:n.dormantThresholdDays,approachingDormantDays:n.approachingDormantDays,languages:n.languages,labels:n.labels,projectCategories:n.projectCategories??[],preferredOrgs:n.preferredOrgs??[],scope:n.scope??[],scoreThreshold:n.scoreThreshold}}:{setupRequired:!0,prompts:[{setting:"username",prompt:"What is your GitHub username?",current:n.githubUsername||null,required:!0,type:"string"},{setting:"maxActivePRs",prompt:"How many PRs do you want to work on at once?",current:n.maxActivePRs,default:10,type:"number"},{setting:"dormantDays",prompt:"After how many days of inactivity should a PR be considered dormant?",current:n.dormantThresholdDays,default:30,type:"number"},{setting:"approachingDays",prompt:"At how many days should we warn about approaching dormancy?",current:n.approachingDormantDays,default:25,type:"number"},{setting:"languages",prompt:"What programming languages do you want to contribute to?",current:n.languages,default:["typescript","javascript"],type:"list"},{setting:"labels",prompt:"What issue labels should we search for?",current:n.labels,default:["good first issue","help wanted"],type:"list"},{setting:"scope",prompt:"What scope of issues do you want to discover? (beginner, intermediate, advanced \u2014 leave empty for default labels only)",current:n.scope??[],default:[],type:"list"},{setting:"scoreThreshold",prompt:"Minimum vet score (1-10) for issues to keep after vetting? Issues below this are auto-filtered.",current:n.scoreThreshold,default:6,type:"number"},{setting:"aiPolicyBlocklist",prompt:"Repos with anti-AI contribution policies to block (owner/repo, comma-separated)?",current:n.aiPolicyBlocklist??Rn.aiPolicyBlocklist??null,default:["matplotlib/matplotlib"],type:"list"},{setting:"projectCategories",prompt:"What types of projects interest you? (nonprofit, devtools, infrastructure, web-frameworks, data-ml, education)",current:n.projectCategories??[],default:[],type:"list"},{setting:"preferredOrgs",prompt:"Any GitHub organizations to prioritize? (org names, comma-separated)",current:n.preferredOrgs??[],default:[],type:"list"}]}}async function kP(){let e=K();return{setupComplete:e.isSetupComplete(),username:e.getState().config.githubUsername}}var Wg=b(()=>{"use strict";Se();he();St();Dt()});var Vw={};ne(Vw,{runCheckIntegration:()=>PP});function xP(e){let t=at.extname(e),n=at.basename(e,t);return n==="index"?at.basename(at.dirname(e)):n}function RP(e,t){let n=at.dirname(e),o=[];for(let i of[".ts",".tsx",".js",".jsx"]){let s=at.join(n,`index${i}`);t.includes(s)&&o.push(s)}let r=at.dirname(n);for(let i of[".ts",".tsx",".js",".jsx"]){let s=at.join(r,`index${i}`);t.includes(s)&&o.push(s)}return[...new Set(o)]}async function PP(e){let t=e.base,n;try{let a=(0,Va.execFileSync)("git",["diff","--name-only","--diff-filter=A",`${t}...HEAD`],{encoding:"utf-8",timeout:1e4}).trim();n=a?a.split(`
|
|
135
|
-
`).filter(Boolean):[]}catch(a){let c=P(a);throw new Error(`Failed to run git diff: ${c}`,{cause:a})}let o=n.filter(a=>{let c=at.extname(a);return
|
|
136
|
-
`).filter(Boolean)}catch(a){E("check-integration","git ls-files failed, reference checking will be skipped",a),r=[]}let i=[];for(let a of o){let c=
|
|
137
|
-
`).filter(T=>T!==a);l.push(...U)}}catch(S){let U=S&&typeof S=="object"&&"status"in S?S.status:void 0;if(U!==void 0&&U!==1){let T=P(S);E("check-integration",`git grep failed for "${y}": ${T}`)}}l=[...new Set(l)];let p=l.length>0,g={path:a,referencedBy:l,isIntegrated:p};p||(g.suggestedEntryPoints=
|
|
138
|
-
`).filter(Boolean):[]}catch(r){E("local-repos",`find failed for scan path ${n}`,r);continue}for(let r of o){let i=Tt.dirname(r),s=
|
|
139
|
-
`)}function
|
|
132
|
+
`),e.needsAddressingPRs.length>0){console.log("\u274C Needs Addressing:");for(let r of e.needsAddressingPRs)console.log(` - ${r.repo}#${r.number}: ${r.title}`),console.log(` ${r.displayLabel} ${r.displayDescription}`);console.log("")}if(e.waitingOnMaintainerPRs.length>0){console.log("\u23F3 Waiting on Maintainer:");for(let r of e.waitingOnMaintainerPRs)console.log(` - ${r.repo}#${r.number}: ${r.title}`),console.log(` ${r.displayDescription}`);console.log("")}if(e.recentlyMergedPRs.length>0){console.log("\u{1F389} Recently Merged:");for(let r of e.recentlyMergedPRs){let i=r.mergedAt?new Date(r.mergedAt).toLocaleDateString():"";console.log(` - ${r.repo}#${r.number}: ${r.title}${i?` (merged ${i})`:""}`)}console.log("")}if(e.recentlyClosedPRs.length>0){console.log("\u{1F6AB} Recently Closed:");for(let r of e.recentlyClosedPRs){let i=r.closedAt?new Date(r.closedAt).toLocaleDateString():"";console.log(` - ${r.repo}#${r.number}: ${r.title}${i?` (closed ${i})`:""}`)}console.log("")}if(e.autoUnshelvedPRs.length>0){console.log("\u{1F514} Auto-Unshelved:");for(let r of e.autoUnshelvedPRs)console.log(` - ${r.repo}#${r.number}: ${r.title} (${r.status.replace(/_/g," ")})`);console.log("")}if(e.shelvedPRs.length>0){console.log("\u{1F4E6} Shelved:");for(let r of e.shelvedPRs)console.log(` - ${r.repo}#${r.number}: ${r.title}`);console.log("")}let o=n.filter(r=>r.status==="new_response");if(o.length>0){console.log("\u{1F4AC} Issue Replies:");for(let r of o)console.log(` - ${r.repo}#${r.number}: ${r.title}`),console.log(` @${r.lastResponseAuthor}: ${r.lastResponseBody.slice(0,80)}${r.lastResponseBody.length>80?"...":""}`);console.log("")}console.log("Run with --json for structured output"),console.log('Run "dashboard serve" for browser view')}var jn,xR,B$,RR,J$=b(()=>{"use strict";Ue();$e();he();On();jn=new Set(["needs_addressing"]),xR=new Set(["needs_response","needs_changes","failing_ci","merge_conflict"]),B$=new Set(["dormant","approaching_dormant"]),RR=new Set(["needs_addressing","waiting_on_maintainer"])});function _g(e){let{repoScores:t,activePRCount:n}=e,o=0,r=0,i=[];for(let c of Object.values(t))o+=c.mergedPRCount,r+=c.closedWithoutMergeCount,c.mergedPRCount>0&&i.push({repo:c.repo,mergedCount:c.mergedPRCount});let s=o+r,a=s>0?o/s:0;return i.sort((c,u)=>u.mergedCount-c.mergedCount),{totalMerged:o,totalClosed:r,mergeRate:a,activePRs:n,reposContributed:i.length,topRepos:i.slice(0,10)}}var $g=b(()=>{"use strict"});async function wg(e,t,n){for(let o of PR)try{E(Mr,`Checking ${t}/${n} for template at ${o}`);let{data:r}=await e.repos.getContent({owner:t,repo:n,path:o});if(Array.isArray(r)){E(Mr,`${o} is a directory (multiple templates?), skipping`);continue}if(r.type!=="file"){E(Mr,`${o} is type "${r.type}", skipping`);continue}if(!r.content){E(Mr,`${o} has no content, skipping`);continue}let i=Buffer.from(r.content,"base64").toString("utf-8");return E(Mr,`Found PR template at ${o} (${i.length} chars)`),{template:i,source:o}}catch(r){if(He(r)===404)continue;if(De(r))throw r;let i=P(r);return v(Mr,`Error checking ${t}/${n}/${o}: ${i}`),{template:null,source:null,error:i}}return E(Mr,`No PR template found for ${t}/${n}`),{template:null,source:null}}var Mr,PR,Sg=b(()=>{"use strict";$e();he();Mr="pr-template",PR=[".github/PULL_REQUEST_TEMPLATE.md",".github/pull_request_template.md","docs/pull_request_template.md","pull_request_template.md"]});function DR(e){try{let t=tt.readFileSync(e,"utf-8");return JSON.parse(t)}catch(t){E(Ea,`Failed to parse ${e}: ${t instanceof Error?t.message:String(t)}`);return}}function UR(e){try{return tt.readFileSync(e,"utf-8")}catch(t){E(Ea,`Failed to read ${e}: ${t instanceof Error?t.message:String(t)}`);return}}function kg(e,t){for(let n of t)if(tt.existsSync(Ut.join(e,n)))return n}function jR(e){return DR(Ut.join(e,"package.json"))}function zR(e){if(!e?.scripts)return[];let t=[];for(let n of IR){let o=e.scripts[n];o&&t.push({name:n,command:o})}return t}function GR(e){return e?!!(e.devDependencies?.prettier||e.dependencies?.prettier):!1}function K$(e,t,n){let o=UR(Ut.join(e,t));return o?o.includes(n):!1}function xa(e){if(!tt.existsSync(e)||!tt.statSync(e).isDirectory())throw new Error(`Repository path does not exist or is not a directory: ${e}`);let t=[],n=jR(e),o=kg(e,["biome.json","biome.jsonc"]);o&&t.push({name:"biome",configPath:o,fixCommand:"npx @biomejs/biome check --write",checkCommand:"npx @biomejs/biome check",supportsFileArgs:!0});let r=kg(e,CR);r?t.push({name:"prettier",configPath:r,fixCommand:"npx prettier --write .",checkCommand:"npx prettier --check .",supportsFileArgs:!0}):GR(n)&&t.push({name:"prettier",configPath:"package.json",fixCommand:"npx prettier --write .",checkCommand:"npx prettier --check .",supportsFileArgs:!0});let i=kg(e,OR);i&&t.push({name:"eslint",configPath:i,fixCommand:"npx eslint --fix .",checkCommand:"npx eslint .",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,"Cargo.toml"))&&t.push({name:"rustfmt",configPath:"Cargo.toml",fixCommand:"cargo fmt",checkCommand:"cargo fmt --check",supportsFileArgs:!1});let s=tt.existsSync(Ut.join(e,"pyproject.toml"));s&&K$(e,"pyproject.toml","[tool.ruff]")?t.push({name:"ruff",configPath:"pyproject.toml",fixCommand:"ruff format .",checkCommand:"ruff format --check .",supportsFileArgs:!0}):s&&K$(e,"pyproject.toml","[tool.black]")?t.push({name:"black",configPath:"pyproject.toml",fixCommand:"black .",checkCommand:"black --check .",supportsFileArgs:!0}):tt.existsSync(Ut.join(e,"ruff.toml"))&&t.push({name:"ruff",configPath:"ruff.toml",fixCommand:"ruff format .",checkCommand:"ruff format --check .",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,"go.mod"))&&t.push({name:"gofmt",configPath:"go.mod",fixCommand:"gofmt -w .",checkCommand:"gofmt -d .",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,".clang-format"))&&t.push({name:"clang-format",configPath:".clang-format",fixCommand:"clang-format -i",checkCommand:"clang-format --dry-run --Werror",supportsFileArgs:!0}),tt.existsSync(Ut.join(e,".rubocop.yml"))&&t.push({name:"rubocop",configPath:".rubocop.yml",fixCommand:"rubocop -a",checkCommand:"rubocop",supportsFileArgs:!0});let a=zR(n);return E(Ea,`Detected ${t.length} formatters in ${e}`),{formatters:t,packageJsonScripts:a,repoPath:e}}function Tg(e,t){if(!e.trim())return{isFormattingFailure:!1,evidence:[]};let n=[],o;for(let{formatter:i,patterns:s}of AR)for(let a of s){let c=e.match(a);c&&(n.push(c[0]),o||(o=i))}if(!o)return{isFormattingFailure:!1,evidence:[]};let r;if(t)try{let s=xa(t).formatters.find(a=>a.name===o);s&&(r=s.fixCommand)}catch(i){E(Ea,`Cross-reference failed for ${t}: ${i instanceof Error?i.message:String(i)}`)}return r||(r={prettier:"npx prettier --write .",eslint:"npx eslint --fix .",biome:"npx @biomejs/biome check --write",black:"black .",ruff:"ruff format .",rustfmt:"cargo fmt",gofmt:"gofmt -w .","clang-format":"clang-format -i",rubocop:"rubocop -a"}[o]),{isFormattingFailure:!0,formatter:o,fixCommand:r,evidence:n}}var tt,Ut,Ea,CR,OR,IR,AR,Eg=b(()=>{"use strict";tt=re(require("fs"),1),Ut=re(require("path"),1);$e();Ea="formatter-detection",CR=[".prettierrc",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml",".prettierrc.json5",".prettierrc.js",".prettierrc.cjs",".prettierrc.mjs",".prettierrc.toml","prettier.config.js","prettier.config.cjs","prettier.config.mjs"],OR=[".eslintrc",".eslintrc.js",".eslintrc.cjs",".eslintrc.yml",".eslintrc.yaml",".eslintrc.json","eslint.config.js","eslint.config.cjs","eslint.config.mjs","eslint.config.ts"],IR=["lint:fix","format","fmt","lint","format:check","format:fix"],AR=[{formatter:"prettier",patterns:[/Code style issues found/i,/Forgot to run Prettier/i,/prettier --check/i]},{formatter:"ruff",patterns:[/ruff format.*--check/i,/ruff format.*would reformat/i]},{formatter:"black",patterns:[/Oh no! .* files? would be reformatted/i,/black --check/i]},{formatter:"rustfmt",patterns:[/Diff in .*\.rs/i,/rustfmt --check/i,/cargo fmt.*--check/i]},{formatter:"biome",patterns:[/biome check/i,/biome ci/i,/Found \d+ fixable diagnostics?/i]},{formatter:"eslint",patterns:[/eslint.*--fix/i,/eslint.*\d+ problems?/i]},{formatter:"gofmt",patterns:[/gofmt -d/i,/goimports/i]},{formatter:"clang-format",patterns:[/clang-format/i]},{formatter:"rubocop",patterns:[/rubocop.*offense/i,/rubocop -a/i]}]});var Se=b(()=>{"use strict";On();v$();V$();_a();q$();ha();Dn();Ue();he();$e();Ur();J$();$g();Sg();Eg();Dt()});var Og={};ne(Og,{compactActionableIssues:()=>Rg,compactRepoGroups:()=>Pg,deduplicateDigest:()=>xg,jsonError:()=>Q$,jsonSuccess:()=>Y$,outputJson:()=>oe,outputJsonError:()=>Cg,toCompactDailyOutput:()=>X$,toCompactStartupOutput:()=>FR});function X$(e){return{digest:e.digest,capacity:e.capacity,briefSummary:e.briefSummary,actionableIssues:e.actionableIssues,actionMenu:e.actionMenu,commentedIssues:e.commentedIssues,failureCount:e.failures.length}}function xg(e){let t=n=>n.map(o=>o.url);return{generatedAt:e.generatedAt,openPRs:e.openPRs,needsAddressingPRs:t(e.needsAddressingPRs),waitingOnMaintainerPRs:t(e.waitingOnMaintainerPRs),recentlyClosedPRs:e.recentlyClosedPRs,recentlyMergedPRs:e.recentlyMergedPRs,shelvedPRs:e.shelvedPRs,autoUnshelvedPRs:e.autoUnshelvedPRs,summary:e.summary}}function Rg(e){return e.map(t=>({type:t.type,prUrl:t.pr.url,label:t.label,isNewContribution:t.isNewContribution}))}function Pg(e){return e.map(t=>({repo:t.repo,prUrls:t.prs.map(n=>n.url)}))}function FR(e){let{daily:t,...n}=e;return{...n,daily:t?X$(t):void 0,dashboardUrl:e.dashboardUrl,issueList:e.issueList}}function Y$(e){return{success:!0,data:e,timestamp:new Date().toISOString()}}function Q$(e){return{success:!1,error:e,timestamp:new Date().toISOString()}}function oe(e){console.log(JSON.stringify(Y$(e),null,2))}function Cg(e){console.log(JSON.stringify(Q$(e),null,2))}var Jo=b(()=>{"use strict"});function ew(e,t,n,o){let r=e.summary||{totalActivePRs:0,totalMergedAllTime:0,mergeRate:0,totalNeedingAttention:0},i=t.config.minStars??50,s=n!==void 0?Math.max(n,r.totalMergedAllTime):r.totalMergedAllTime,a=Object.values(t.repoScores||{}).reduce((u,l)=>u+(Wt(l.stargazersCount,i)?0:l.closedWithoutMergeCount||0),0),c=o!==void 0?Math.max(o,a):a;return{activePRs:r.totalActivePRs,shelvedPRs:(e.shelvedPRs||[]).length,mergedPRs:s,closedPRs:c,mergeRate:`${(r.mergeRate??0).toFixed(1)}%`}}function Ig(e,t){let n={...e};for(let[o,r]of Object.entries(t))n[o]=r;return n}function Ag(e,t,n,o,r){let i=K(),s=i.getState();try{Object.keys(t).length>0&&i.setMonthlyMergedCounts(Ig(s.monthlyMergedCounts||{},t))}catch(a){v(Ae,`Failed to store monthly merged counts: ${P(a)}`)}try{Object.keys(n).length>0&&i.setMonthlyClosedCounts(Ig(s.monthlyClosedCounts||{},n))}catch(a){v(Ae,`Failed to store monthly closed counts: ${P(a)}`)}try{let a={...o};for(let[c,u]of Object.entries(r))a[c]=(a[c]||0)+u;for(let c of e)if(c.createdAt){let u=c.createdAt.slice(0,7);a[u]=(a[u]||0)+1}Object.keys(a).length>0&&i.setMonthlyOpenedCounts(Ig(s.monthlyOpenedCounts||{},a))}catch(a){v(Ae,`Failed to store monthly opened counts: ${P(a)}`)}}async function Dg(e){let t=K(),n=new Gr(e),o=new Lr(e),r=je(e),i=t.getState().config,s=Ra(t.getState()),a=t.getMergedPRWatermark(),c=t.getClosedPRWatermark(),[{prs:u,failures:l},d,p,g,y,S,U,T]=await Promise.all([n.fetchUserOpenPRs(),n.fetchRecentlyClosedPRs().catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch recently closed PRs: ${P(R)}`),[]}),n.fetchRecentlyMergedPRs().catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch recently merged PRs: ${P(R)}`),[]}),n.fetchUserMergedPRCounts(s).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch merged PR counts: ${P(R)}`),zr()}),n.fetchUserClosedPRCounts(s).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch closed PR counts: ${P(R)}`),zr()}),o.fetchCommentedIssues().catch(R=>{if(De(R))throw R;let G=P(R);return G.includes("No GitHub username configured")?v(Ae,`Issue conversation tracking requires setup: ${G}`):v(Ae,`Issue conversation fetch failed: ${G}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${G}`}]}}),f$(r,i,a).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch merged PRs for storage: ${P(R)}`),[]}),h$(r,i,c).catch(R=>{if(De(R))throw R;return v(Ae,`Failed to fetch closed PRs for storage: ${P(R)}`),[]})]),L=S.issues;S.failures.length>0&&v(Ae,`${S.failures.length} issue conversation check(s) failed`),l.length>0&&v(Ae,`${l.length} PR fetch(es) failed`);try{t.batch(()=>{try{t.addMergedPRs(U)}catch(be){v(Ae,`Failed to store merged PRs: ${P(be)}`)}try{t.addClosedPRs(T)}catch(be){v(Ae,`Failed to store closed PRs: ${P(be)}`)}let{monthlyCounts:R,monthlyOpenedCounts:G}=g,{monthlyCounts:ee,monthlyOpenedCounts:q}=y;Ag(u,R,ee,G,q);let ae=n.generateDigest(u,d,p),Ge=new Set(t.getState().config.shelvedPRUrls||[]),ve=u.filter(be=>Ge.has(be.url)||be.stalenessTier==="dormant"&&be.status!=="needs_addressing");ae.shelvedPRs=ve.map(Yt),ae.autoUnshelvedPRs=[],ae.summary.totalActivePRs=u.length-ve.length,t.setLastDigest(ae)})}catch(R){v(Ae,`Failed to persist dashboard state: ${P(R)}`)}v(Ae,`Refreshed: ${u.length} PRs fetched`);let Z=Ug(t.getMergedPRs()),N=jg(t.getClosedPRs()),z=t.getState().lastDigest;if(!z)throw new Error("Dashboard data fetch failed: digest was not generated");return{digest:z,commentedIssues:L,allMergedPRs:Z,allClosedPRs:N}}function Ug(e){let t=[],n=0;for(let o of e){let r=Pe(o.url);if(!r){n++;continue}t.push({url:o.url,repo:`${r.owner}/${r.repo}`,number:r.number,title:o.title,mergedAt:o.mergedAt})}return n>0&&v(Ae,`Skipped ${n} stored merged PR(s) with unparseable URLs`),t}function jg(e){let t=[],n=0;for(let o of e){let r=Pe(o.url);if(!r){n++;continue}t.push({url:o.url,repo:`${r.owner}/${r.repo}`,number:r.number,title:o.title,closedAt:o.closedAt})}return n>0&&v(Ae,`Skipped ${n} stored closed PR(s) with unparseable URLs`),t}function tw(e,t){let n={};for(let r of e.openPRs||[])n[r.repo]||(n[r.repo]={active:0,merged:0,closed:0}),n[r.repo].active++;let o=t.config.minStars??50;for(let[r,i]of Object.entries(t.repoScores||{}))Wt(i.stargazersCount,o)||(n[r]||(n[r]={active:0,merged:0,closed:0}),n[r].merged=i.mergedPRCount,n[r].closed=i.closedWithoutMergeCount);return n}function rw(e,t=10){return Object.entries(e).sort((n,o)=>o[1].merged+o[1].active+o[1].closed-(n[1].merged+n[1].active+n[1].closed)).slice(0,t)}function nw(e){return{monthlyMerged:e.monthlyMergedCounts||{},monthlyClosed:e.monthlyClosedCounts||{},monthlyOpened:e.monthlyOpenedCounts||{}}}var Ae,zg=b(()=>{"use strict";Se();he();$e();ba();Ue();Dt();Ko();Ae="dashboard-data"});var Gg={};ne(Gg,{CRITICAL_STATUSES:()=>jn,applyStatusOverrides:()=>Nr,assessCapacity:()=>Vo,buildStarFilter:()=>Ra,collectActionableIssues:()=>Ho,computeActionMenu:()=>qo,computeRepoSignals:()=>Zo,executeDailyCheck:()=>Pa,formatBriefSummary:()=>Bo,formatSummary:()=>Wo,groupPRsByRepo:()=>Mo,printDigest:()=>yg,runDaily:()=>HR,runDailyForDisplay:()=>qR,toShelvedPRRef:()=>Yt});function Ra(e){let t=e.config.minStars??50,n=new Map;for(let[o,r]of Object.entries(e.repoScores))r.stargazersCount!==void 0&&n.set(o,r.stargazersCount);if(n.size!==0)return{minStars:t,knownStarCounts:n}}async function LR(e,t){let{prs:n,failures:o}=await e.fetchUserOpenPRs();o.length>0&&v(le,`${o.length} PR fetch(es) failed`);let r=K().getState(),i=Ra(r),s=new Lr(t),[a,c,u,l,d]=await Promise.all([e.fetchUserMergedPRCounts(i).catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch merged PR counts: ${P(Z)}`),zr()}),e.fetchUserClosedPRCounts(i).catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch closed PR counts: ${P(Z)}`),zr()}),e.fetchRecentlyClosedPRs().catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch recently closed PRs: ${P(Z)}`),[]}),e.fetchRecentlyMergedPRs().catch(Z=>{if(De(Z))throw Z;return v(le,`Failed to fetch recently merged PRs: ${P(Z)}`),[]}),s.fetchCommentedIssues().catch(Z=>{if(De(Z))throw Z;let N=P(Z);return N.includes("No GitHub username configured")?v(le,`Issue conversation tracking requires setup: ${N}`):v(le,`Issue conversation fetch failed: ${N}`),{issues:[],failures:[{issueUrl:"N/A",error:`Issue conversation fetch failed: ${N}`}]}})]),p=d.issues;d.failures.length>0&&v(le,`${d.failures.length} issue conversation check(s) failed`);let{repos:g,monthlyCounts:y,monthlyOpenedCounts:S}=a,{repos:U,monthlyCounts:T,monthlyOpenedCounts:L}=c;return{prs:n,failures:o,mergedCounts:g,closedCounts:U,monthlyCounts:y,monthlyClosedCounts:T,openedFromMerged:S,openedFromClosed:L,recentlyClosedPRs:u,recentlyMergedPRs:l,commentedIssues:p}}async function NR(e,t,n,o){let r=K();try{r.batch(()=>{let a=Object.values(r.getState().repoScores).filter(g=>g.mergedPRCount>0);if(n.size===0&&a.length>0)v(le,`Skipping stale repo reset: API returned 0 merged PR results but state has ${a.length} repo(s) with merges. Possible API issue.`);else for(let g of Object.values(r.getState().repoScores))n.has(g.repo)||r.updateRepoScore(g.repo,{mergedPRCount:0});let c=0;for(let[g,{count:y,lastMergedAt:S}]of n)try{r.updateRepoScore(g,{mergedPRCount:y,lastMergedAt:S||void 0})}catch(U){c++,v(le,`Failed to update merged count for ${g}: ${P(U)}`)}c===n.size&&n.size>0&&v(le,`[ALL_MERGED_COUNT_UPDATES_FAILED] All ${n.size} merged count update(s) failed.`);let u=Object.values(r.getState().repoScores).filter(g=>(g.closedWithoutMergeCount||0)>0);o.size===0&&u.length>0&&v(le,`API returned 0 closed PR results but state has ${u.length} repo(s) with closed PRs. Possible transient API issue.`);let l=0;for(let[g,y]of o)try{r.updateRepoScore(g,{closedWithoutMergeCount:y})}catch(S){l++,v(le,`Failed to update closed count for ${g}: ${P(S)}`)}l===o.size&&o.size>0&&v(le,`[ALL_CLOSED_COUNT_UPDATES_FAILED] All ${o.size} closed count update(s) failed.`);let d=Zo(t),p=0;for(let[g,y]of d)try{r.updateRepoScore(g,{signals:y})}catch(S){p++,v(le,`Failed to update signals for ${g}: ${P(S)}`)}p===d.size&&d.size>0&&v(le,`[ALL_SIGNAL_UPDATES_FAILED] All ${d.size} signal update(s) failed. This may indicate corrupted state.`)})}catch(a){v(le,`Failed to persist repo score updates: ${P(a)}`)}let i=Object.keys(r.getState().repoScores),s;try{s=await e.fetchRepoMetadata(i)}catch(a){if(De(a))throw a;v(le,`Failed to fetch repo metadata: ${P(a)}`),v(le,"Repos without cached metadata will be excluded from dashboard stats and metadata badges until fetched on the next successful run."),s=new Map}try{r.batch(()=>{let a=0;for(let[u,{stars:l,language:d}]of s)try{r.updateRepoScore(u,{stargazersCount:l,language:d})}catch(p){a++,v(le,`Failed to update metadata for ${u}: ${P(p)}`)}a===s.size&&s.size>0&&v(le,`[ALL_METADATA_UPDATES_FAILED] All ${s.size} metadata update(s) failed.`);let c=0;for(let[u]of n)try{r.addTrustedProject(u)}catch(l){c++,v(le,`Failed to sync trusted project ${u}: ${P(l)}`)}c===n.size&&n.size>0&&v(le,`[ALL_TRUST_SYNCS_FAILED] All ${n.size} trusted project sync(s) failed. This may indicate corrupted state.`)})}catch(a){v(le,`Failed to persist metadata/trust updates: ${P(a)}`)}}function MR(e,t,n,o){let r=K(),i=Nr(t,r.getState()),s=[],a=[],c=[];try{r.batch(()=>{for(let d of i)r.isPRShelved(d.url)?jn.has(d.status)?(r.unshelvePR(d.url),a.push(Yt(d)),c.push(d)):s.push(Yt(d)):d.stalenessTier==="dormant"&&!jn.has(d.status)?s.push(Yt(d)):c.push(d);let l=e.generateDigest(i,n,o);l.shelvedPRs=s,l.autoUnshelvedPRs=a,l.summary.totalActivePRs=c.length,r.setLastDigest(l)})}catch(l){v(le,`Failed to persist partition state: ${P(l)}`)}let u=r.getState().lastDigest;return{activePRs:c,shelvedPRs:s,autoUnshelvedPRs:a,digest:u}}function ZR(e,t,n,o,r,i){let s=K(),a=Vo(t,s.getState().config.maxActivePRs,n.length),c=[];try{s.batch(()=>{c=o.filter(S=>{let U=s.getIssueDismissedAt(S.url);if(!U)return!0;if(S.status==="new_response"){let T=new Date(S.lastResponseAt).getTime(),L=new Date(U).getTime();if(isNaN(T)||isNaN(L))return v(le,`Invalid timestamp in dismiss check for ${S.url}, including issue`),!0;if(T>L){v(le,`Auto-undismissing issue ${S.url}: new response at ${S.lastResponseAt} after dismiss at ${U}`);try{s.undismissIssue(S.url)}catch(Z){v(le,`Failed to persist auto-undismiss for ${S.url}: ${P(Z)}`)}return!0}}return!1})})}catch(S){v(le,`Failed to persist auto-undismiss state: ${P(S)}`)}let u=c.filter(S=>S.status==="new_response"),l=Wo(e,a,u),d=Ho(t,i);e.summary.totalNeedingAttention=d.length;let p=Bo(e,d.length,u.length),g=qo(d,a,c),y=Mo(t);return{digest:e,capacity:a,summary:l,briefSummary:p,actionableIssues:d,actionMenu:g,commentedIssues:c,repoGroups:y,failures:r}}function VR(e){return{digest:xg(e.digest),capacity:e.capacity,summary:e.summary,briefSummary:e.briefSummary,actionableIssues:Rg(e.actionableIssues),actionMenu:e.actionMenu,commentedIssues:e.commentedIssues,repoGroups:Pg(e.repoGroups),failures:e.failures}}async function Pa(e){let t=await ow(e);return VR(t)}async function ow(e){let t=new Gr(e),{prs:n,failures:o,mergedCounts:r,closedCounts:i,monthlyCounts:s,monthlyClosedCounts:a,openedFromMerged:c,openedFromClosed:u,recentlyClosedPRs:l,recentlyMergedPRs:d,commentedIssues:p}=await LR(t,e);await NR(t,n,r,i);try{K().batch(()=>{Ag(n,s,a,c,u)})}catch(T){v(le,`Failed to persist monthly analytics: ${P(T)}`)}let g=K().getState().lastDigestAt,{activePRs:y,shelvedPRs:S,digest:U}=MR(t,n,l,d);return ZR(U,y,S,p,o,g)}async function HR(){let e=Ie();return Pa(e)}async function qR(){let e=Ie();return ow(e)}var le,Ko=b(()=>{"use strict";Se();he();$e();ba();zg();Jo();Se();le="daily"});var iw={};ne(iw,{runStatus:()=>BR});async function BR(e){let t=K(),n=t.getStats(),o=t.getState(),r=o.lastDigestAt||o.lastRunAt,{totalTracked:i,...s}=n,a={stats:s,lastRunAt:o.lastRunAt};return e.offline&&(a.offline=!0,a.lastUpdated=r),a}var sw=b(()=>{"use strict";Se()});var aw={};ne(aw,{runSearch:()=>WR});async function WR(e){let t=Ie(),n=new Kt(t),o=await n.searchIssues({maxResults:e.maxResults}),r=K(),{config:i}=r.getState(),s=i.excludeRepos||[],a=i.aiPolicyBlocklist??Rn.aiPolicyBlocklist??[],c={candidates:o.map(u=>{let l=r.getRepoScore(u.issue.repo);return{issue:{repo:u.issue.repo,repoUrl:`https://github.com/${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:l?{score:l.score,mergedPRCount:l.mergedPRCount,closedWithoutMergeCount:l.closedWithoutMergeCount,isResponsive:l.signals?.isResponsive??!1,lastMergedAt:l.lastMergedAt}:void 0}}),excludedRepos:s,aiPolicyBlocklist:a};return n.rateLimitWarning&&(c.rateLimitWarning=n.rateLimitWarning),c}var cw=b(()=>{"use strict";Se()});function qe(e,t,n){if(t.test(e))return;let o={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 fe(`Invalid ${n} URL: ${e}. Expected format: ${o[n]}`)}function ze(e){if(e.length>uw)throw new fe(`URL exceeds maximum length of ${uw} characters`);return e}function Fg(e){if(e.length>lw)throw new fe(`Message exceeds maximum length of ${lw} characters`);return e}function zn(e){if(!e||e.trim().length===0)throw new fe("GitHub username cannot be empty.");let t=e.trim();if(t.length>dw)throw new fe(`GitHub username must be at most ${dw} characters (got ${t.length}).`);if(!JR.test(t))throw new fe("GitHub username can only contain alphanumeric characters and hyphens.");if(t.startsWith("-"))throw new fe("GitHub username cannot start with a hyphen.");if(t.endsWith("-"))throw new fe("GitHub username cannot end with a hyphen.");if(KR.test(t))throw new fe("GitHub username cannot contain consecutive hyphens.");return t}var Qt,er,pw,uw,lw,dw,JR,KR,St=b(()=>{"use strict";he();Qt=/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+$/,er=/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/,pw=/^https:\/\/github\.com\/[^/]+\/[^/]+\/(issues|pull)\/\d+$/,uw=2048,lw=1e3;dw=39,JR=/^[a-zA-Z0-9-]+$/,KR=/--/});var mw={};ne(mw,{runVet:()=>XR});async function XR(e){ze(e.issueUrl),qe(e.issueUrl,er,"issue");let t=Ie(),o=await new Kt(t).vetIssue(e.issueUrl);return{issue:{repo:o.issue.repo,number:o.issue.number,title:o.issue.title,url:o.issue.url,labels:o.issue.labels},recommendation:o.recommendation,reasonsToApprove:o.reasonsToApprove,reasonsToSkip:o.reasonsToSkip,projectHealth:o.projectHealth,vettingResult:o.vettingResult}}var gw=b(()=>{"use strict";Se();St()});function Xo(){return hw.join(vt(),"dashboard-server.pid")}function Oa(e){Gn.writeFileSync(Xo(),JSON.stringify(e),{mode:384})}function Fn(){try{let e=Gn.readFileSync(Xo(),"utf-8"),t=JSON.parse(e);return typeof t!="object"||t===null||typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0||typeof t.port!="number"||typeof t.startedAt!="string"?(v(Ca,"PID file has invalid structure, ignoring"),null):t}catch(e){return e.code!=="ENOENT"&&v(Ca,`Failed to read PID file: ${e.message}`),null}}function fr(){try{Gn.unlinkSync(Xo())}catch(e){e.code!=="ENOENT"&&v(Ca,`Failed to remove PID file: ${e.message}`)}}function Yo(e){return new Promise(t=>{let n=fw.get(`http://127.0.0.1:${e}/api/data`,{timeout:2e3},o=>{o.resume(),t(o.statusCode===200)});n.on("error",()=>t(!1)),n.on("timeout",()=>{n.destroy(),t(!1)})})}async function Ia(){let e=Fn();if(!e)return null;try{process.kill(e.pid,0)}catch(t){let n=t.code;return n!=="ESRCH"&&n!=="EPERM"&&v(Ca,`Unexpected error checking PID ${e.pid}: ${t.message}`),fr(),null}return await Yo(e.port)?{port:e.port,url:`http://oss.localhost:${e.port}`}:(fr(),null)}var fw,Gn,hw,Ca,Aa=b(()=>{"use strict";fw=re(require("http"),1),Gn=re(require("fs"),1),hw=re(require("path"),1);Se();$e();Ca="dashboard-server"});var Ln,vw=b(()=>{"use strict";Ln=class{maxRequests;windowMs;timestamps=[];constructor(t){this.maxRequests=t.maxRequests,this.windowMs=t.windowMs}check(){let t=Date.now(),n=t-this.windowMs;if(this.timestamps=this.timestamps.filter(o=>o>n),this.timestamps.length>=this.maxRequests){let r=this.timestamps[0]+this.windowMs-t;return{allowed:!1,retryAfterSeconds:Math.ceil(r/1e3)}}return this.timestamps.push(t),{allowed:!0}}}});var Zr={};ne(Zr,{VALID_TARGETS:()=>Lg,runMove:()=>YR});async function YR(e){ze(e.prUrl),qe(e.prUrl,Qt,"PR");let t=e.target;if(!Lg.includes(t))throw new Error(`Invalid target "${e.target}". Must be one of: ${Lg.join(", ")}`);let n=K();switch(t){case"attention":case"waiting":{let o=t==="attention"?"needs_addressing":"waiting_on_maintainer",r=t==="attention"?"Need Attention":"Waiting on Maintainer",i=new Date().toISOString();return n.batch(()=>{n.setStatusOverride(e.prUrl,o,i),n.unshelvePR(e.prUrl)}),{url:e.prUrl,target:t,description:`Moved to ${r}`}}case"shelved":return n.batch(()=>{n.shelvePR(e.prUrl),n.clearStatusOverride(e.prUrl)}),{url:e.prUrl,target:t,description:"Shelved \u2014 excluded from capacity and actionable items"};case"auto":return n.batch(()=>{n.clearStatusOverride(e.prUrl),n.unshelvePR(e.prUrl)}),{url:e.prUrl,target:t,description:"Reset to computed status"};default:{let o=t;throw new Error(`Unhandled move target: ${o}`)}}}var Lg,Vr=b(()=>{"use strict";Se();St();Lg=["attention","waiting","shelved","auto"]});var ww={};ne(ww,{findRunningDashboardServer:()=>Ia,getDashboardPidPath:()=>Xo,isDashboardServerRunning:()=>Yo,readDashboardServerInfo:()=>Fn,removeDashboardServerInfo:()=>fr,startDashboardServer:()=>nP,writeDashboardServerInfo:()=>Oa});function Qo(e,t,n,o,r){let i=tw(e,t),s=rw(i),{monthlyMerged:a,monthlyOpened:c,monthlyClosed:u}=nw(t),l=o??Ug(K().getMergedPRs()),d=r??jg(K().getClosedPRs()),p=t.config.minStars??50,g=t.repoScores||{},y=z=>!Wt(g[z.repo]?.stargazersCount,p),S=l.filter(y),U=d.filter(y),T=ew(e,t,S.length,U.length),L=t.config.dismissedIssues||{},Z=n.filter(z=>z.status==="new_response"&&!(z.url in L)),N={};for(let[z,R]of Object.entries(g))(R.stargazersCount!==void 0||R.language!==void 0)&&(N[z]={stars:R.stargazersCount,language:R.language});return{stats:T,prsByRepo:i,topRepos:s.map(([z,R])=>({repo:z,...R})),monthlyMerged:a,monthlyOpened:c,monthlyClosed:u,activePRs:Nr(e.openPRs||[],t),shelvedPRUrls:t.config.shelvedPRUrls||[],recentlyMergedPRs:e.recentlyMergedPRs||[],recentlyClosedPRs:e.recentlyClosedPRs||[],autoUnshelvedPRs:e.autoUnshelvedPRs||[],commentedIssues:n,issueResponses:Z,allMergedPRs:S,allClosedPRs:U,repoMetadata:N}}function rP(e,t=QR){return new Promise((n,o)=>{let r=[],i=0,s=!1;e.on("data",a=>{if(!s){if(i+=a.length,i>t){s=!0,e.destroy(),o(new Error("Body too large"));return}r.push(a)}}),e.on("end",()=>{s||n(Buffer.concat(r).toString("utf-8"))}),e.on("error",a=>{s||o(a)})})}function $w(e){e.setHeader("X-Content-Type-Options","nosniff"),e.setHeader("X-Frame-Options","DENY"),e.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'"),e.setHeader("Referrer-Policy","strict-origin-when-cross-origin")}function yw(e,t){let n=e.headers.origin;return n?[`http://localhost:${t}`,`http://127.0.0.1:${t}`,`http://oss.localhost:${t}`].includes(n):!0}function Da(e,t,n){$w(e),e.setHeader("Cache-Control","no-store");let o=JSON.stringify(n);e.writeHead(t,{"Content-Type":"application/json","Content-Length":Buffer.byteLength(o)}),e.end(o)}function xe(e,t,n){Da(e,t,{error:n})}async function nP(e){let{port:t,assetsDir:n,token:o,open:r}=e,i=K(),s=jt.resolve(n),a=i.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=Qo(a,i.getState(),c)}catch(z){throw new Error(`Failed to build dashboard data: ${P(z)}. State data may be corrupted \u2014 try running: daily --json`,{cause:z})}let l=new Ln({maxRequests:30,windowMs:6e4}),d=new Ln({maxRequests:10,windowMs:6e4}),p=new Ln({maxRequests:6,windowMs:6e4}),g=_w.createServer(async(z,R)=>{let G=z.method||"GET",ee=z.url||"/";try{if(ee==="/api/data"&&G==="GET"){let q=l.check();if(!q.allowed){R.setHeader("Retry-After",String(q.retryAfterSeconds)),xe(R,429,"Too many requests");return}if(i.reloadIfChanged())try{u=Qo(a,i.getState(),c)}catch(ae){v(rt,`Failed to rebuild dashboard data after state reload: ${P(ae)}`)}Da(R,200,u);return}if(ee==="/api/action"&&G==="POST"){if(!yw(z,L)){xe(R,403,"Invalid origin");return}let q=d.check();if(!q.allowed){R.setHeader("Retry-After",String(q.retryAfterSeconds)),xe(R,429,"Too many requests");return}await y(z,R);return}if(ee==="/api/refresh"&&G==="POST"){if(!yw(z,L)){xe(R,403,"Invalid origin");return}let q=p.check();if(!q.allowed){R.setHeader("Retry-After",String(q.retryAfterSeconds)),xe(R,429,"Too many requests");return}await S(z,R);return}if(G==="GET"){U(ee,R);return}xe(R,405,"Method not allowed")}catch(q){v(rt,`Unhandled request error: ${G} ${ee} ${P(q)}`),R.headersSent||xe(R,500,"Internal server error")}});g.requestTimeout=eP;async function y(z,R){i.reloadIfChanged();let G;try{let q=await rP(z);G=JSON.parse(q)}catch(q){let ae=q instanceof Error&&q.message==="Body too large";xe(R,ae?413:400,ae?"Request body too large":"Invalid JSON body");return}if(!G.action||!bw.has(G.action)){xe(R,400,`Invalid action. Must be one of: ${[...bw].join(", ")}`);return}if(!G.url||typeof G.url!="string"){xe(R,400,'Missing or invalid "url" field');return}let ee=G.action==="dismiss_issue_response";try{ze(G.url),qe(G.url,ee?er:Qt,ee?"issue":"PR")}catch(q){q instanceof fe?xe(R,400,q.message):(v(rt,`Unexpected error during URL validation: ${P(q)}`),xe(R,400,"Invalid URL"));return}try{if(G.action==="move"){let{VALID_TARGETS:q,runMove:ae}=await Promise.resolve().then(()=>(Vr(),Zr));if(!G.target||!q.includes(G.target)){xe(R,400,`move requires a valid "target" field (${q.join(", ")})`);return}await ae({prUrl:G.url,target:G.target})}else i.dismissIssue(G.url,new Date().toISOString())}catch(q){v(rt,`Action failed: ${G.action} ${G.url} ${P(q)}`),xe(R,500,"Action failed");return}u=Qo(a,i.getState(),c),Da(R,200,u)}async function S(z,R){let G=o||Bt();if(!G){xe(R,401,"No GitHub token available. Cannot refresh data.");return}try{i.reloadIfChanged(),v(rt,"Refreshing dashboard data from GitHub...");let ee=await Dg(G);a=ee.digest,c=ee.commentedIssues,u=Qo(a,i.getState(),c,ee.allMergedPRs,ee.allClosedPRs),Da(R,200,u)}catch(ee){v(rt,`Dashboard refresh failed: ${P(ee)}`),xe(R,500,"Refresh failed")}}function U(z,R){let G;try{G=decodeURIComponent(z.split("?")[0])}catch{v(rt,`Malformed URL received: ${z}`),xe(R,400,"Malformed URL");return}if(G.includes("..")){xe(R,403,"Forbidden");return}let ee=G==="/"?"index.html":G.replace(/^\/+/,""),q=jt.join(s,ee);if(!q.startsWith(s+jt.sep)&&q!==s){xe(R,403,"Forbidden");return}try{Ua.statSync(q).isDirectory()&&(q=jt.join(s,"index.html"))}catch(ve){if(ve.code==="ENOENT")q=jt.join(s,"index.html");else{v(rt,`Failed to stat file: ${q}`),xe(R,500,"Internal server error");return}}let ae=jt.extname(q).toLowerCase(),Ge=tP[ae]||"application/octet-stream";try{let ve=Ua.readFileSync(q);$w(R),R.writeHead(200,{"Content-Type":Ge,"Content-Length":ve.length,"Cache-Control":"public, max-age=3600"}),R.end(ve)}catch(ve){ve.code==="ENOENT"?xe(R,404,"Not found"):(v(rt,`Failed to serve static file: ${q}`),xe(R,500,"Failed to read file"))}}let T=10,L=t;for(let z=0;z<T;z++)try{await new Promise((R,G)=>{g.once("error",G),g.listen(L,"127.0.0.1",()=>R())});break}catch(R){let G=R;if(G.code==="EADDRINUSE"&&z<T-1){v(rt,`Port ${L} is in use, trying ${L+1}...`),L++;continue}throw new Error(`Failed to start server: ${G.message}`,{cause:R})}Oa({pid:process.pid,port:L,startedAt:new Date().toISOString(),version:At()});let Z=`http://oss.localhost:${L}`;v(rt,`Dashboard server running at ${Z} (also: http://localhost:${L})`),o&&Dg(o).then(z=>{i.reloadIfChanged(),a=z.digest,c=z.commentedIssues,u=Qo(a,i.getState(),c,z.allMergedPRs,z.allClosedPRs),v(rt,"Background data refresh complete")}).catch(z=>{v(rt,`Background data refresh failed (serving cached data): ${P(z)}`)}),r&&ja(Z);let N=()=>{v(rt,"Shutting down dashboard server..."),fr(),g.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),3e3).unref()};process.on("SIGINT",N),process.on("SIGTERM",N)}var _w,Ua,jt,bw,rt,QR,eP,tP,Sw=b(()=>{"use strict";_w=re(require("http"),1),Ua=re(require("fs"),1),jt=re(require("path"),1);Se();he();$e();St();zg();za();Aa();vw();Dt();Aa();bw=new Set(["move","dismiss_issue_response"]),rt="dashboard-server",QR=10240,eP=3e4,tP={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".json":"application/json",".png":"image/png",".ico":"image/x-icon"}});var kw={};ne(kw,{resolveAssetsDir:()=>Fa,serveDashboard:()=>oP});function Fa(){let e=kt.resolve(__dirname,"../../dashboard/dist");if(Ga.existsSync(kt.join(e,"index.html")))return e;let t=kt.resolve(kt.dirname(process.argv[1]),"../../dashboard/dist");if(Ga.existsSync(kt.join(t,"index.html")))return t;try{let n=require.resolve("@oss-autopilot/dashboard/package.json"),o=kt.join(kt.dirname(n),"dist");if(Ga.existsSync(kt.join(o,"index.html")))return o}catch(n){n.code!=="MODULE_NOT_FOUND"&&console.error("Error resolving dashboard package:",n)}return null}async function oP(e){let t=Fa();t||(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 n=Bt(),{startDashboardServer:o}=await Promise.resolve().then(()=>(Sw(),ww));await o({port:e.port,assetsDir:t,token:n,open:e.open})}var Ga,kt,Ng=b(()=>{"use strict";Ga=re(require("fs"),1),kt=re(require("path"),1);Se()});function cP(e){return new Promise(t=>setTimeout(t,e))}async function Ew(e){if(!Fa())return null;let n=await Ia();if(n){let c=Fn(),u=At();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 l=!1;try{process.kill(c.pid,"SIGTERM"),l=!0}catch(d){d.code==="ESRCH"?l=!0:console.error(`[STARTUP] Could not kill outdated dashboard (PID ${c.pid}): ${d.message}`)}if(l)fr();else return{url:n.url,port:n.port,alreadyRunning:!0}}else return{url:n.url,port:n.port,alreadyRunning:!0}}let o=e?.port??iP,r=process.argv[1],i=(0,Tw.spawn)("node",[r,"dashboard","serve","--port",String(o),"--no-open"],{detached:!0,stdio:"ignore"}),s=!1,a=!1;i.on("error",c=>{s=!0,console.error(`[STARTUP] Failed to spawn dashboard server: ${c.message}`)}),i.on("exit",c=>{a=!0,c!==0&&c!==null&&console.error(`[STARTUP] Dashboard server exited prematurely (code ${c})`)}),i.unref();for(let c=0;c<aP;c++){if(await cP(sP),s||a)return null;let u=Fn();if(u&&await Yo(u.port))return{url:`http://oss.localhost:${u.port}`,port:u.port,alreadyRunning:!1}}if(console.error("[STARTUP] Dashboard server failed to start within 5 seconds"),i.pid)try{process.kill(i.pid,"SIGTERM")}catch(c){c.code!=="ESRCH"&&console.error(`[STARTUP] Failed to kill orphan dashboard process (PID ${i.pid}): ${c.message}`)}return null}var Tw,iP,sP,aP,xw=b(()=>{"use strict";Tw=require("child_process");Aa();Ng();Se();iP=3e3,sP=200,aP=25});var Ow={};ne(Ow,{countIssueListItems:()=>Cw,detectIssueList:()=>La,openInBrowser:()=>ja,parseIssueListPathFromConfig:()=>Pw,runStartup:()=>lP});function Pw(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return;let o=t[1].match(/issueListPath:\s*["']?([^"'\n]+)["']?/);return o?o[1].trim():void 0}function Cw(e){let t=0,n=0,o=e.split(`
|
|
133
|
+
`);for(let r of o)/^\s*- (?:~~)?\[/.test(r)&&(/~~|\*\*Done\*\*/.test(r)?n++:t++);return{availableCount:t,completedCount:n}}function La(){let e="",t="auto-detected";try{let o=K().getState().config.issueListPath;o&&hr.existsSync(o)&&(e=o,t="configured")}catch(n){v("startup",`Could not read issueListPath from state: ${P(n)}`)}if(!e){let n=".claude/oss-autopilot/config.md";if(hr.existsSync(n))try{let o=hr.readFileSync(n,"utf-8"),r=Pw(o);r&&hr.existsSync(r)&&(e=r,t="configured")}catch(o){console.error("[STARTUP] Failed to read config:",P(o))}}if(!e){let n=["open-source/potential-issue-list.md","oss/issue-list.md","issues.md"];for(let o of n)if(hr.existsSync(o)){e=o,t="auto-detected";break}}if(e)try{let n=hr.readFileSync(e,"utf-8"),{availableCount:o,completedCount:r}=Cw(n);return{path:e,source:t,availableCount:o,completedCount:r}}catch(n){return console.error(`[STARTUP] Failed to read issue list at ${e}:`,P(n)),{path:e,source:t,availableCount:0,completedCount:0}}}function ja(e){let t,n;switch(process.platform){case"darwin":t="open",n=[e];break;case"win32":t="cmd",n=["/c","start","",e];break;default:t="xdg-open",n=[e];break}(0,Rw.execFile)(t,n,o=>{o&&console.error(`[STARTUP] Failed to open dashboard in browser: ${o.message}`)})}async function uP(e){try{let t=await fetch(`http://127.0.0.1:${e}/api/refresh`,{method:"POST",headers:{Origin:`http://oss.localhost:${e}`},signal:AbortSignal.timeout(5e3)});if(!t.ok){let n=await t.text().catch(()=>"");return console.error(`[STARTUP] Dashboard refresh returned ${t.status}: ${n}`),!1}return await t.text().catch(()=>{}),!0}catch(t){return console.error(`[STARTUP] Could not trigger dashboard refresh: ${P(t)}`),!1}}async function lP(){let e=At(),t=K(),n=!1;if(!t.isSetupComplete()){let c=await Xs();if(c)try{t.initializeWithDefaults(c),n=!0}catch(u){return console.error(`[STARTUP] Auto-detected username "${c}" but failed to save config:`,P(u)),{version:e,setupComplete:!1}}else return{version:e,setupComplete:!1}}let o=Bt();if(!o)return{version:e,setupComplete:!0,authError:'GitHub authentication required. Install GitHub CLI (https://cli.github.com/) and run "gh auth login", or set GITHUB_TOKEN.'};let r=await Pa(o),i,s;if(r.digest.summary.totalActivePRs>0)try{let c=await Ew();c?(i=c.url,c.alreadyRunning?s=await uP(c.port)?"refreshed":"running":(ja(c.url),s="opened")):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:",P(c))}s==="opened"?r.briefSummary+=" | Dashboard opened in browser":s==="refreshed"?r.briefSummary+=" | Dashboard refreshed":s==="running"&&(r.briefSummary+=" | Dashboard running");let a=La();return{version:e,setupComplete:!0,autoDetected:n,daily:r,dashboardUrl:i,issueList:a}}var hr,Rw,za=b(()=>{"use strict";hr=re(require("fs"),1),Rw=require("child_process");Se();he();$e();Ko();xw()});var Mg={};ne(Mg,{parseIssueList:()=>Aw,runParseList:()=>gP});function dP(e){let t=e.match(/https:\/\/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);if(t)return{repo:t[1],number:parseInt(t[2],10),url:t[0]};let n=e.match(/https:\/\/github\.com\/([^/]+\/[^/]+)\/pull\/(\d+)/);return n?{repo:n[1],number:parseInt(n[2],10),url:n[0]}:null}function pP(e){let t=e.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1");return t=t.replace(/https?:\/\/\S+/g,""),t=t.replace(/^\s*[-*+]\s*/,"").replace(/^\s*\d+\.\s*/,""),t=t.replace(/\[[ xX]\]\s*/,""),t=t.replace(/~~/g,""),t=t.replace(/\b(Done|DONE|done)\b/g,""),t=t.replace(/^[\s\-\u2013\u2014:]+/,"").replace(/[\s\-\u2013\u2014:]+$/,""),t.trim()}function mP(e){return!!(/~~.+~~/.test(e)||/\[[xX]\]/.test(e)||/\bdone\b/i.test(e))}function Aw(e){let t=e.split(`
|
|
134
|
+
`),n=[],o=[],r="Uncategorized";for(let i of t){let s=i.match(/^#{1,3}\s+(.+)/);if(s){r=s[1].trim();continue}if(!i.trim()||!/^\s*[-*+]|\s*\d+\.|\s*\[[ xX]\]/.test(i))continue;let a=dP(i);if(!a)continue;let c=pP(i),u={repo:a.repo,number:a.number,title:c||`#${a.number}`,tier:r,url:a.url};mP(i)?o.push(u):n.push(u)}return{available:n,completed:o,availableCount:n.length,completedCount:o.length}}async function gP(e){let t=Iw.resolve(e.filePath);if(!Na.existsSync(t))throw new Error(`File not found: ${t}`);let n;try{n=Na.readFileSync(t,"utf-8")}catch(o){let r=P(o);throw new Error(`Failed to read file: ${r}`,{cause:o})}return Aw(n)}var Na,Iw,Zg=b(()=>{"use strict";Na=re(require("fs"),1),Iw=re(require("path"),1);he()});var Uw={};ne(Uw,{classifyListStatus:()=>Dw,runVetList:()=>fP});function Dw(e){let t=e.reasonsToSkip.map(n=>n.toLowerCase());return t.some(n=>n.includes("closed"))?"closed":t.some(n=>n.includes("claimed")||n.includes("assigned"))?"claimed":t.some(n=>n.includes("existing pr")||n.includes("linked pr")||n.includes("pull request"))?"has_pr":(e.recommendation==="approve"||e.recommendation==="needs_review","still_available")}async function fP(e={}){let t=Ie(),n=e.concurrency??5,o=e.issueListPath;if(!o){let g=La();if(!g)throw new Error("No issue list found. Provide a path with --path or configure issueListPath in settings.");o=g.path}let{runParseList:r}=await Promise.resolve().then(()=>(Zg(),Mg)),i=await r({filePath:o});if(i.available.length===0)return{results:[],summary:{total:0,stillAvailable:0,claimed:0,closed:0,hasPR:0,errors:0}};let s=new Kt(t),a=[],c=i.available,u=0;async function l(){for(;u<c.length;){let g=c[u++];try{let y=await s.vetIssue(g.url),S={issue:{repo:y.issue.repo,number:y.issue.number,title:y.issue.title,url:y.issue.url,labels:y.issue.labels},recommendation:y.recommendation,reasonsToApprove:y.reasonsToApprove,reasonsToSkip:y.reasonsToSkip,projectHealth:y.projectHealth,vettingResult:y.vettingResult};a.push({...S,listStatus:Dw(S)})}catch(y){a.push({issue:{repo:g.repo,number:g.number,title:g.title,url:g.url,labels:[]},recommendation:"skip",reasonsToApprove:[],reasonsToSkip:[`Error: ${y instanceof Error?y.message:String(y)}`],projectHealth:{},vettingResult:{},listStatus:"error",errorMessage:y instanceof Error?y.message:String(y)})}}}let d=Array.from({length:Math.min(n,c.length)},()=>l());await Promise.all(d);let p={total:a.length,stillAvailable:a.filter(g=>g.listStatus==="still_available").length,claimed:a.filter(g=>g.listStatus==="claimed").length,closed:a.filter(g=>g.listStatus==="closed").length,hasPR:a.filter(g=>g.listStatus==="has_pr").length,errors:a.filter(g=>g.listStatus==="error").length};return{results:a,summary:p}}var jw=b(()=>{"use strict";Se();za()});var Vg={};ne(Vg,{runTrack:()=>hP,runUntrack:()=>vP});async function hP(e){ze(e.prUrl),qe(e.prUrl,Qt,"PR");let t=Ie(),n=je(t),o=Pe(e.prUrl);if(!o||o.type!=="pull")throw new Error(`Invalid PR URL: ${e.prUrl}`);let{owner:r,repo:i,number:s}=o,{data:a}=await n.pulls.get({owner:r,repo:i,pull_number:s});return{pr:{repo:`${r}/${i}`,number:s,title:a.title,url:e.prUrl}}}async function vP(e){return ze(e.prUrl),qe(e.prUrl,Qt,"PR"),{removed:!1,url:e.prUrl,message:"In v2, PRs are fetched fresh on each daily run \u2014 there is no local tracking list to remove from."}}var Hg=b(()=>{"use strict";Se();St();Ue()});var zw={};ne(zw,{runRead:()=>bP});async function bP(e){if(!e.all&&!e.prUrl)throw new Error("PR URL or --all flag required");return e.prUrl&&ze(e.prUrl),e.all?{markedAsRead:0,all:!0,message:"In v2, PR read state is not tracked locally."}:{marked:!1,url:e.prUrl,message:"In v2, PR read state is not tracked locally."}}var Gw=b(()=>{"use strict";St()});var Ma={};ne(Ma,{runClaim:()=>$P,runComments:()=>yP,runPost:()=>_P});async function yP(e){ze(e.prUrl),qe(e.prUrl,Qt,"PR");let t=Ie(),n=K(),o=je(t),r=Pe(e.prUrl);if(!r||r.type!=="pull")throw new Error("Invalid PR URL format");let{owner:i,repo:s,number:a}=r,{data:c}=await o.pulls.get({owner:i,repo:s,pull_number:a}),[u,l,d]=await Promise.all([$t(T=>o.pulls.listReviewComments({owner:i,repo:s,pull_number:a,per_page:100,page:T})),$t(T=>o.issues.listComments({owner:i,repo:s,issue_number:a,per_page:100,page:T})),$t(T=>o.pulls.listReviews({owner:i,repo:s,pull_number:a,per_page:100,page:T}))]),p=n.getState().config.githubUsername,g=T=>!(!T.user||T.user.login===p||T.user.type==="Bot"&&!e.showBots),y=u.filter(g).sort((T,L)=>new Date(L.created_at).getTime()-new Date(T.created_at).getTime()),S=l.filter(g).sort((T,L)=>new Date(L.created_at).getTime()-new Date(T.created_at).getTime()),U=d.filter(T=>g(T)&&T.body&&T.body.trim()).sort((T,L)=>new Date(L.submitted_at||0).getTime()-new Date(T.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:U.map(T=>({user:T.user?.login,state:T.state,body:T.body??null,submittedAt:T.submitted_at??null})),reviewComments:y.map(T=>({user:T.user?.login,body:T.body,path:T.path,createdAt:T.created_at})),issueComments:S.map(T=>({user:T.user?.login,body:T.body,createdAt:T.created_at})),summary:{reviewCount:U.length,inlineCommentCount:y.length,discussionCommentCount:S.length}}}async function _P(e){if(ze(e.url),qe(e.url,pw,"issue or PR"),!e.message.trim())throw new Error("No message provided");Fg(e.message);let t=Ie(),n=Pe(e.url);if(!n)throw new Error("Invalid GitHub URL format");let{owner:o,repo:r,number:i}=n,s=je(t),{data:a}=await s.issues.createComment({owner:o,repo:r,issue_number:i,body:e.message});return{commentUrl:a.html_url,url:e.url}}async function $P(e){ze(e.issueUrl),qe(e.issueUrl,er,"issue");let t=Ie(),n=e.message||"Hi! I'd like to work on this issue. Could you assign it to me?";Fg(n);let o=Pe(e.issueUrl);if(!o||o.type!=="issues")throw new Error("Invalid issue URL format (must be an issue, not a PR)");let{owner:r,repo:i,number:s}=o,a=je(t),{data:c}=await a.issues.createComment({owner:r,repo:i,issue_number:s,body:n});try{K().addIssue({id:s,url:e.issueUrl,repo:`${r}/${i}`,number:s,title:"(claimed)",status:"claimed",labels:[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),vetted:!1})}catch(u){console.error(`Warning: Comment posted on ${e.issueUrl} but failed to save to local state: ${u instanceof Error?u.message:u}`)}return{commentUrl:c.html_url,issueUrl:e.issueUrl}}var Za=b(()=>{"use strict";Se();Go();St()});var Lw={};ne(Lw,{runConfig:()=>wP});function Fw(e){if(!Pn.includes(e))throw new Error(`Invalid scope "${e}". Valid scopes: ${Pn.join(", ")}`);return e}async function wP(e){let t=K(),n=t.getState().config;if(!e.key)return{config:n};if(!e.value)throw new Error("Value required");let o=e.value;switch(e.key){case"username":t.updateConfig({githubUsername:zn(o)});break;case"add-language":n.languages.includes(o)||t.updateConfig({languages:[...n.languages,o]});break;case"add-label":n.labels.includes(o)||t.updateConfig({labels:[...n.labels,o]});break;case"remove-label":if(!n.labels.includes(o))throw new Error(`Label "${o}" is not currently configured. Current labels: ${n.labels.join(", ")}`);t.updateConfig({labels:n.labels.filter(r=>r!==o)});break;case"add-scope":{let r=Fw(o),i=n.scope??[];i.includes(r)||t.updateConfig({scope:[...i,r]});break}case"remove-scope":{let r=Fw(o),i=n.scope??[];if(!i.includes(r))throw new Error(`Scope "${o}" is not currently set`);let s=i.filter(a=>a!==r);if(s.length===0)throw new Error("Cannot remove the last scope. Use setup to clear scopes entirely.");t.updateConfig({scope:s});break}case"exclude-repo":{let r=o.split("/");if(r.length!==2||!r[0]||!r[1])throw new Error(`Invalid repo format "${o}". Use "owner/repo" format. To exclude an entire org, use: config exclude-org ${o}`);let i=o.toLowerCase();n.excludeRepos.some(s=>s.toLowerCase()===i)||t.batch(()=>{t.updateConfig({excludeRepos:[...n.excludeRepos,o]}),t.cleanupExcludedData([o],[])});break}case"exclude-org":{if(o.includes("/"))throw new Error(`Invalid org name "${o}". Use just the org name (e.g., "facebook"), not "owner/repo" format. To exclude a specific repo, use: config exclude-repo ${o}`);let r=n.excludeOrgs??[];r.some(i=>i.toLowerCase()===o.toLowerCase())||t.batch(()=>{t.updateConfig({excludeOrgs:[...r,o]}),t.cleanupExcludedData([],[o])});break}case"issueListPath":t.updateConfig({issueListPath:o||void 0});break;case"scoreThreshold":{let r=Number(o);if(!Number.isInteger(r)||r<1||r>10)throw new fe(`Invalid value for scoreThreshold: "${o}". Must be an integer between 1 and 10.`);t.updateConfig({scoreThreshold:r});break}default:throw new Error(`Unknown config key: ${e.key}`)}return{success:!0,key:e.key,value:o}}var Nw=b(()=>{"use strict";Se();he();Dt();St()});var Mw={};ne(Mw,{runInit:()=>SP});async function SP(e){return zn(e.username),K().updateConfig({githubUsername:e.username}),{username:e.username,message:"Username saved. Run `daily` to fetch your open PRs from GitHub."}}var Zw=b(()=>{"use strict";Se();St()});var Bg={};ne(Bg,{runCheckSetup:()=>EP,runSetup:()=>TP});function qg(e,t){let n=Number(e);if(!Number.isInteger(n)||n<1)throw new fe(`Invalid value for ${t}: "${e}". Must be a positive integer.`);return n}function kP(e,t,n,o){let r=Number(e);if(!Number.isInteger(r)||r<n||r>o)throw new fe(`Invalid value for ${t}: "${e}". Must be an integer between ${n} and ${o}.`);return r}async function TP(e){let t=K(),n=t.getState().config;if(e.set&&e.set.length>0){let o={},r=[];return t.batch(()=>{for(let i of e.set){let[s,...a]=i.split("="),c=a.join("=");switch(s){case"username":zn(c),t.updateConfig({githubUsername:c}),o[s]=c;break;case"maxActivePRs":{let u=qg(c,"maxActivePRs");t.updateConfig({maxActivePRs:u}),o[s]=String(u);break}case"dormantDays":{let u=qg(c,"dormantDays");t.updateConfig({dormantThresholdDays:u}),o[s]=String(u);break}case"approachingDays":{let u=qg(c,"approachingDays");t.updateConfig({approachingDormantDays:u}),o[s]=String(u);break}case"languages":t.updateConfig({languages:c.split(",").map(u=>u.trim())}),o[s]=c;break;case"labels":t.updateConfig({labels:c.split(",").map(u=>u.trim())}),o[s]=c;break;case"showHealthCheck":t.updateConfig({showHealthCheck:c!=="false"}),o[s]=c!=="false"?"true":"false";break;case"squashByDefault":c==="ask"?(t.updateConfig({squashByDefault:"ask"}),o[s]="ask"):(t.updateConfig({squashByDefault:c!=="false"}),o[s]=c!=="false"?"true":"false");break;case"scoreThreshold":{let u=kP(c,"scoreThreshold",1,10);t.updateConfig({scoreThreshold:u}),o[s]=String(u);break}case"minStars":{let u=Number(c);if(!Number.isInteger(u)||u<0)throw new fe(`Invalid value for minStars: "${c}". Must be a non-negative integer.`);t.updateConfig({minStars:u}),o[s]=String(u);break}case"includeDocIssues":t.updateConfig({includeDocIssues:c==="true"}),o[s]=c==="true"?"true":"false";break;case"aiPolicyBlocklist":{let u=c.split(",").map(p=>p.trim()).filter(Boolean),l=[],d=[];for(let p of u){let g=p.replace(/\s+/g,"");/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(g)?l.push(g):d.push(p)}if(d.length>0&&(r.push(`Warning: Skipping invalid entries (expected "owner/repo" format): ${d.join(", ")}`),o.aiPolicyBlocklist_invalidEntries=d.join(", ")),l.length===0&&u.length>0){r.push("Warning: All entries were invalid. Blocklist not updated."),o[s]="(all entries invalid)";break}t.updateConfig({aiPolicyBlocklist:l}),o[s]=l.length>0?l.join(", "):"(empty)";break}case"projectCategories":{let u=c.split(",").map(g=>g.trim()).filter(Boolean),l=[],d=[];for(let g of u)Um.includes(g)?l.push(g):d.push(g);d.length>0&&r.push(`Unknown project categories: ${d.join(", ")}. Valid: ${Um.join(", ")}`);let p=[...new Set(l)];t.updateConfig({projectCategories:p}),o[s]=p.length>0?p.join(", "):"(empty)";break}case"preferredOrgs":{let u=c.split(",").map(p=>p.trim()).filter(Boolean),l=[];for(let p of u)p.includes("/")?r.push(`"${p}" looks like a repo path. Use org name only (e.g., "vercel" not "vercel/next.js").`):/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(p)?l.push(p.toLowerCase()):r.push(`"${p}" is not a valid GitHub organization name. Skipping.`);let d=[...new Set(l)];t.updateConfig({preferredOrgs:d}),o[s]=d.length>0?d.join(", "):"(empty)";break}case"scope":{let u=c.split(",").map(g=>g.trim()).filter(Boolean),l=[],d=[];for(let g of u)Pn.includes(g)?l.push(g):d.push(g);d.length>0&&r.push(`Unknown issue scopes: ${d.join(", ")}. Valid: ${Pn.join(", ")}`);let p=[...new Set(l)];t.updateConfig({scope:p.length>0?p:void 0}),o[s]=p.length>0?p.join(", "):"(empty \u2014 using labels only)";break}case"issueListPath":t.updateConfig({issueListPath:c||void 0}),o[s]=c||"(cleared)";break;case"complete":c==="true"&&(t.markSetupComplete(),o[s]="true");break;default:r.push(`Unknown setting: ${s}`)}}}),{success:!0,settings:o,warnings:r.length>0?r:void 0}}return n.setupComplete&&!e.reset?{setupComplete:!0,config:{githubUsername:n.githubUsername,maxActivePRs:n.maxActivePRs,dormantThresholdDays:n.dormantThresholdDays,approachingDormantDays:n.approachingDormantDays,languages:n.languages,labels:n.labels,projectCategories:n.projectCategories??[],preferredOrgs:n.preferredOrgs??[],scope:n.scope??[],scoreThreshold:n.scoreThreshold}}:{setupRequired:!0,prompts:[{setting:"username",prompt:"What is your GitHub username?",current:n.githubUsername||null,required:!0,type:"string"},{setting:"maxActivePRs",prompt:"How many PRs do you want to work on at once?",current:n.maxActivePRs,default:10,type:"number"},{setting:"dormantDays",prompt:"After how many days of inactivity should a PR be considered dormant?",current:n.dormantThresholdDays,default:30,type:"number"},{setting:"approachingDays",prompt:"At how many days should we warn about approaching dormancy?",current:n.approachingDormantDays,default:25,type:"number"},{setting:"languages",prompt:"What programming languages do you want to contribute to?",current:n.languages,default:["typescript","javascript"],type:"list"},{setting:"labels",prompt:"What issue labels should we search for?",current:n.labels,default:["good first issue","help wanted"],type:"list"},{setting:"scope",prompt:"What scope of issues do you want to discover? (beginner, intermediate, advanced \u2014 leave empty for default labels only)",current:n.scope??[],default:[],type:"list"},{setting:"scoreThreshold",prompt:"Minimum vet score (1-10) for issues to keep after vetting? Issues below this are auto-filtered.",current:n.scoreThreshold,default:6,type:"number"},{setting:"aiPolicyBlocklist",prompt:"Repos with anti-AI contribution policies to block (owner/repo, comma-separated)?",current:n.aiPolicyBlocklist??Rn.aiPolicyBlocklist??null,default:["matplotlib/matplotlib"],type:"list"},{setting:"projectCategories",prompt:"What types of projects interest you? (nonprofit, devtools, infrastructure, web-frameworks, data-ml, education)",current:n.projectCategories??[],default:[],type:"list"},{setting:"preferredOrgs",prompt:"Any GitHub organizations to prioritize? (org names, comma-separated)",current:n.preferredOrgs??[],default:[],type:"list"}]}}async function EP(){let e=K();return{setupComplete:e.isSetupComplete(),username:e.getState().config.githubUsername}}var Wg=b(()=>{"use strict";Se();he();St();Dt()});var Vw={};ne(Vw,{runCheckIntegration:()=>OP});function PP(e){let t=at.extname(e),n=at.basename(e,t);return n==="index"?at.basename(at.dirname(e)):n}function CP(e,t){let n=at.dirname(e),o=[];for(let i of[".ts",".tsx",".js",".jsx"]){let s=at.join(n,`index${i}`);t.includes(s)&&o.push(s)}let r=at.dirname(n);for(let i of[".ts",".tsx",".js",".jsx"]){let s=at.join(r,`index${i}`);t.includes(s)&&o.push(s)}return[...new Set(o)]}async function OP(e){let t=e.base,n;try{let a=(0,Va.execFileSync)("git",["diff","--name-only","--diff-filter=A",`${t}...HEAD`],{encoding:"utf-8",timeout:1e4}).trim();n=a?a.split(`
|
|
135
|
+
`).filter(Boolean):[]}catch(a){let c=P(a);throw new Error(`Failed to run git diff: ${c}`,{cause:a})}let o=n.filter(a=>{let c=at.extname(a);return xP.has(c)?!RP.some(u=>u.test(a)):!1});if(o.length===0)return{newFiles:[],unreferencedCount:0};let r;try{r=(0,Va.execFileSync)("git",["ls-files"],{encoding:"utf-8",timeout:1e4}).trim().split(`
|
|
136
|
+
`).filter(Boolean)}catch(a){E("check-integration","git ls-files failed, reference checking will be skipped",a),r=[]}let i=[];for(let a of o){let c=PP(a),u=a.replace(/\.[^.]+$/,""),l=[],d=[c];u.includes("/")&&d.push(u);for(let y of d)try{let S=(0,Va.execFileSync)("git",["grep","-l","--",y],{encoding:"utf-8",timeout:1e4}).trim();if(S){let U=S.split(`
|
|
137
|
+
`).filter(T=>T!==a);l.push(...U)}}catch(S){let U=S&&typeof S=="object"&&"status"in S?S.status:void 0;if(U!==void 0&&U!==1){let T=P(S);E("check-integration",`git grep failed for "${y}": ${T}`)}}l=[...new Set(l)];let p=l.length>0,g={path:a,referencedBy:l,isIntegrated:p};p||(g.suggestedEntryPoints=CP(a,r)),i.push(g)}let s=i.filter(a=>!a.isIntegrated).length;return{newFiles:i,unreferencedCount:s}}var at,Va,xP,RP,Hw=b(()=>{"use strict";at=re(require("path"),1),Va=require("child_process");Se();he();xP=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".rb",".go",".rs",".java",".kt",".vue",".svelte"]),RP=[/^\./,/\.(test|spec|e2e)\.[^.]+$/,/\.(config|rc)\.[^.]+$/,/__tests__\//,/\.d\.ts$/,/\.md$/,/\.json$/,/\.ya?ml$/]});var Bw={};ne(Bw,{runLocalRepos:()=>UP,scanForRepos:()=>qw});function AP(e){try{let t=(0,Ha.execFileSync)("git",["-C",e,"remote","get-url","origin"],{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim(),n=t.match(/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/);if(n)return n[1];let o=t.match(/github\.com[:/]([^/]+\/[^/]+?)(?:\.git)?$/);return o?o[1]:null}catch(t){return E("local-repos",`Failed to get GitHub remote for ${e}`,t),null}}function DP(e){try{return(0,Ha.execFileSync)("git",["-C",e,"branch","--show-current"],{encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}).trim()||null}catch(t){return E("local-repos",`Failed to get current branch for ${e}`,t),null}}function qw(e){let t={};for(let n of e){if(!Jg.existsSync(n))continue;let o;try{let r=(0,Ha.execFileSync)("find",[n,"-maxdepth","4","-name",".git","-type","d"],{encoding:"utf-8",timeout:3e4,stdio:["pipe","pipe","pipe"]}).trim();o=r?r.split(`
|
|
138
|
+
`).filter(Boolean):[]}catch(r){E("local-repos",`find failed for scan path ${n}`,r);continue}for(let r of o){let i=Tt.dirname(r),s=AP(i);if(!s)continue;let a=DP(i);t[s]={path:i,exists:!0,currentBranch:a}}}return t}async function UP(e){let t=K(),n=t.getState(),o=e.paths?.map(s=>Tt.resolve(s))??n.config.localRepoScanPaths??IP.filter(s=>Jg.existsSync(s));if(!e.scan&&n.localRepoCache){let s=n.localRepoCache;return{repos:s.repos,scanPaths:s.scanPaths,cachedAt:s.cachedAt,fromCache:!0}}let r=qw(o),i=new Date().toISOString();try{t.setLocalRepoCache({repos:r,scanPaths:o,cachedAt:i})}catch(s){let a=P(s);console.error(`Warning: Failed to cache scan results to disk: ${a}`)}return{repos:r,scanPaths:o,cachedAt:i,fromCache:!1}}var Jg,Tt,Hr,Ha,IP,Ww=b(()=>{"use strict";Jg=re(require("fs"),1),Tt=re(require("path"),1),Hr=re(require("os"),1),Ha=require("child_process");Se();he();IP=[Tt.join(Hr.homedir(),"Documents","oss"),Tt.join(Hr.homedir(),"dev"),Tt.join(Hr.homedir(),"projects"),Tt.join(Hr.homedir(),"src"),Tt.join(Hr.homedir(),"code"),Tt.join(Hr.homedir(),"repos")]});var Kg={};ne(Kg,{runDismiss:()=>jP,runUndismiss:()=>zP});async function jP(e){return ze(e.url),qe(e.url,er,"issue"),{dismissed:K().dismissIssue(e.url,new Date().toISOString()),url:e.url}}async function zP(e){return ze(e.url),qe(e.url,er,"issue"),{undismissed:K().undismissIssue(e.url),url:e.url}}var Xg=b(()=>{"use strict";Se();St()});var Jw={};ne(Jw,{runPRTemplate:()=>GP});async function GP(e){let{owner:t,repo:n}=xn(e.repo),o=Ie(),r=je(o);return wg(r,t,n)}var Kw=b(()=>{"use strict";Dn();Ue();Sg()});var Yw={};ne(Yw,{runDetectFormatters:()=>FP});async function FP(e){let t=Yg.resolve(e.repoPath??process.cwd()),n={...xa(t)};if(e.ciLog){let o;try{o=Xw.readFileSync(Yg.resolve(e.ciLog),"utf-8")}catch(r){throw new Error(`Failed to read CI log file: ${P(r)}`,{cause:r})}n.ciDiagnosis=Tg(o,t)}return n}var Xw,Yg,Qw=b(()=>{"use strict";Xw=re(require("fs"),1),Yg=re(require("path"),1);Eg();he()});var eS={};ne(eS,{formatStatsBadge:()=>ZP,formatStatsMarkdown:()=>NP,runStats:()=>LP});async function LP(){let t=K().getState(),n=t.lastDigest?.summary?.totalActivePRs??0,o=_g({repoScores:t.repoScores??{},activePRCount:n});return{...o,mergeRateFormatted:`${(o.mergeRate*100).toFixed(1)}%`,username:t.config.githubUsername}}function NP(e){let t=[`# OSS Contribution Stats for @${e.username}`,"","| Metric | Value |","|--------|-------|",`| Merged PRs | ${e.totalMerged} |`,`| Merge Rate | ${e.mergeRateFormatted} |`,`| Active PRs | ${e.activePRs} |`,`| Repos Contributed | ${e.reposContributed} |`,""];if(e.topRepos.length>0){t.push("## Top Repos","","| Repo | Merged PRs |","|------|-----------|");for(let n of e.topRepos)t.push(`| ${n.repo} | ${n.mergedCount} |`);t.push("")}return t.push("---","*Generated by [OSS Autopilot](https://github.com/costajohnt/oss-autopilot)*"),t.join(`
|
|
139
|
+
`)}function MP(e){return e.totalMerged===0?"blue":e.mergeRate>=.8?"brightgreen":e.mergeRate>=.6?"green":e.mergeRate>=.4?"yellow":"orange"}function ZP(e){return{schemaVersion:1,label:"OSS Contributions",message:e.totalMerged>0?`${e.mergeRateFormatted} merge rate | ${e.totalMerged} merged`:"Getting Started",color:MP(e)}}var tS=b(()=>{"use strict";Se();$g()});var $f=re(_f(),1),{program:rC,createCommand:nC,createArgument:oC,createOption:iC,CommanderError:sC,InvalidArgumentError:aC,InvalidOptionArgumentError:cC,Command:wf,Argument:uC,Option:lC,Help:dC}=$f.default;Se();he();Jo();function de(e,t){let n=P(e);t?Cg(n):console.error(`Error: ${n}`),process.exit(1)}function rS(e){let t=Object.entries(e).sort(([n],[o])=>n.localeCompare(o));for(let[n,o]of t){let r=o.currentBranch?` (${o.currentBranch})`:"";console.log(` ${n}${r}`),console.log(` ${o.path}`)}}var Qg=[{name:"daily",register(e){e.command("daily").description("Run daily check on all tracked PRs").option("--json","Output as JSON").option("--compact","Reduce JSON payload by omitting summary, repoGroups, and full failure details").action(async t=>{try{if(t.json){let{runDaily:n}=await Promise.resolve().then(()=>(Ko(),Gg)),o=await n();if(t.compact){let{toCompactDailyOutput:r}=await Promise.resolve().then(()=>(Jo(),Og));oe(r(o))}else oe(o)}else{let{runDailyForDisplay:n,printDigest:o}=await Promise.resolve().then(()=>(Ko(),Gg)),r=await n();o(r.digest,r.capacity,r.commentedIssues)}}catch(n){de(n,t.json)}})}},{name:"status",localOnly:!0,register(e){e.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 t=>{try{let{runStatus:n}=await Promise.resolve().then(()=>(sw(),iw)),o=await n({offline:t.offline});t.json?oe(o):(console.log(`
|
|
140
140
|
\u{1F4CA} OSS Status
|
|
141
141
|
`),console.log(`Merged PRs: ${o.stats.mergedPRs}`),console.log(`Closed PRs: ${o.stats.closedPRs}`),console.log(`Merge Rate: ${o.stats.mergeRate}`),console.log(`Needs Response: ${o.stats.needsResponse}`),o.offline?(console.log(`
|
|
142
142
|
Last Updated: ${o.lastUpdated||"Never"}`),console.log("(Offline mode: showing cached data)")):console.log(`
|
|
@@ -202,7 +202,7 @@ package.json scripts:`);for(let i of r.packageJsonScripts)console.log(` ${i.nam
|
|
|
202
202
|
OSS Contribution Stats (@${i.username})
|
|
203
203
|
`),console.log(` Merged PRs: ${i.totalMerged}`),console.log(` Closed PRs: ${i.totalClosed}`),console.log(` Merge Rate: ${i.mergeRateFormatted}`),console.log(` Active PRs: ${i.activePRs}`),console.log(` Repos Contributed: ${i.reposContributed}`),i.topRepos.length>0){console.log(`
|
|
204
204
|
Top Repos:`);for(let s of i.topRepos.slice(0,5))console.log(` ${s.repo}: ${s.mergedCount} merged`)}console.log(`
|
|
205
|
-
Use --markdown for a shareable report or --badge for shields.io`)}}catch(n){de(n,t.json)}})}}];var
|
|
205
|
+
Use --markdown for a shareable report or --badge for shields.io`)}}catch(n){de(n,t.json)}})}}];var VP=At(),qa=new wf;qa.name("oss-autopilot").description("AI-powered autopilot for managing open source contributions").version(VP).option("--debug","Enable debug logging");var HP=new Set(Qg.filter(e=>e.localOnly).map(e=>e.name));for(let e of Qg)e.register(qa);qa.hook("preAction",async(e,t)=>{e.opts().debug&&(Pm(),E("cli",`Running command: ${t.name()}`));let o=t.name();HP.has(o)||await Js()||(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))});var nS=process.argv.slice(2),qP=nS.some(e=>!e.startsWith("-")),BP=nS.some(e=>e==="--help"||e==="-h"||e==="--version"||e==="-V");!qP&&!BP&&!Ks()&&(console.log(`
|
|
206
206
|
OSS Autopilot \u2014 AI copilot for open source contributions
|
|
207
207
|
|
|
208
208
|
Looks like this is your first run! Quick start:
|