@r5n/hydra 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +25 -25
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env bun
2
- var zt=Object.create;var{getPrototypeOf:Kt,defineProperty:Wn,getOwnPropertyNames:Jt}=Object;var Yt=Object.prototype.hasOwnProperty;var mn=(t,r,o)=>{o=t!=null?zt(Kt(t)):{};let e=r||!t||!t.__esModule?Wn(o,"default",{value:t,enumerable:!0}):o;for(let s of Jt(t))if(!Yt.call(e,s))Wn(e,s,{get:()=>t[s],enumerable:!0});return e};var zn=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var On=zn((Co,Kn)=>{var Rn={to(t,r){if(!r)return`\x1B[${t+1}G`;return`\x1B[${r+1};${t+1}H`},move(t,r){let o="";if(t<0)o+=`\x1B[${-t}D`;else if(t>0)o+=`\x1B[${t}C`;if(r<0)o+=`\x1B[${-r}A`;else if(r>0)o+=`\x1B[${r}B`;return o},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Qt={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Zt={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let r="";for(let o=0;o<t;o++)r+=this.line+(o<t-1?Rn.up():"");if(t)r+=Rn.left;return r}};Kn.exports={cursor:Rn,scroll:Qt,erase:Zt,beep:"\x07"}});var Tn=zn((No,Sn)=>{var gn=process||{},Jn=gn.argv||[],ln=gn.env||{},Vt=!(!!ln.NO_COLOR||Jn.includes("--no-color"))&&(!!ln.FORCE_COLOR||Jn.includes("--color")||gn.platform==="win32"||(gn.stdout||{}).isTTY&&ln.TERM!=="dumb"||!!ln.CI),Ft=(t,r,o=t)=>(e)=>{let s=""+e,i=s.indexOf(r,t.length);return~i?t+Dt(s,r,o,i)+r:t+s+r},Dt=(t,r,o,e)=>{let s="",i=0;do s+=t.substring(i,e)+o,i=e+r.length,e=t.indexOf(r,i);while(~e);return s+t.substring(i)},Yn=(t=Vt)=>{let r=t?Ft:()=>String;return{isColorSupported:t,reset:r("\x1B[0m","\x1B[0m"),bold:r("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:r("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:r("\x1B[3m","\x1B[23m"),underline:r("\x1B[4m","\x1B[24m"),inverse:r("\x1B[7m","\x1B[27m"),hidden:r("\x1B[8m","\x1B[28m"),strikethrough:r("\x1B[9m","\x1B[29m"),black:r("\x1B[30m","\x1B[39m"),red:r("\x1B[31m","\x1B[39m"),green:r("\x1B[32m","\x1B[39m"),yellow:r("\x1B[33m","\x1B[39m"),blue:r("\x1B[34m","\x1B[39m"),magenta:r("\x1B[35m","\x1B[39m"),cyan:r("\x1B[36m","\x1B[39m"),white:r("\x1B[37m","\x1B[39m"),gray:r("\x1B[90m","\x1B[39m"),bgBlack:r("\x1B[40m","\x1B[49m"),bgRed:r("\x1B[41m","\x1B[49m"),bgGreen:r("\x1B[42m","\x1B[49m"),bgYellow:r("\x1B[43m","\x1B[49m"),bgBlue:r("\x1B[44m","\x1B[49m"),bgMagenta:r("\x1B[45m","\x1B[49m"),bgCyan:r("\x1B[46m","\x1B[49m"),bgWhite:r("\x1B[47m","\x1B[49m"),blackBright:r("\x1B[90m","\x1B[39m"),redBright:r("\x1B[91m","\x1B[39m"),greenBright:r("\x1B[92m","\x1B[39m"),yellowBright:r("\x1B[93m","\x1B[39m"),blueBright:r("\x1B[94m","\x1B[39m"),magentaBright:r("\x1B[95m","\x1B[39m"),cyanBright:r("\x1B[96m","\x1B[39m"),whiteBright:r("\x1B[97m","\x1B[39m"),bgBlackBright:r("\x1B[100m","\x1B[49m"),bgRedBright:r("\x1B[101m","\x1B[49m"),bgGreenBright:r("\x1B[102m","\x1B[49m"),bgYellowBright:r("\x1B[103m","\x1B[49m"),bgBlueBright:r("\x1B[104m","\x1B[49m"),bgMagentaBright:r("\x1B[105m","\x1B[49m"),bgCyanBright:r("\x1B[106m","\x1B[49m"),bgWhiteBright:r("\x1B[107m","\x1B[49m")}};Sn.exports=Yn();Sn.exports.createColors=Yn});var O=mn(On(),1),et=mn(Tn(),1);import{stdin as rt,stdout as ot}from"process";import*as I from"readline";import Qn from"readline";import{Writable as nr}from"stream";function tr({onlyFirst:t=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(r,t?void 0:"g")}var rr=tr();function st(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(rr,"")}function it(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var at={exports:{}};(function(t){var r={};t.exports=r,r.eastAsianWidth=function(e){var s=e.charCodeAt(0),i=e.length==2?e.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},r.characterLength=function(e){var s=this.eastAsianWidth(e);return s=="F"||s=="W"||s=="A"?2:1};function o(e){return e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}r.length=function(e){for(var s=o(e),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},r.slice=function(e,s,i){textLen=r.length(e),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",a=0,c=o(e),l=0;l<c.length;l++){var f=c[l],m=r.length(f);if(a>=s-(m==2?1:0))if(a+m<=i)n+=f;else break;a+=m}return n}})(at);var or=at.exports,er=it(or),sr=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},ir=it(sr);function tn(t,r={}){if(typeof t!="string"||t.length===0||(r={ambiguousIsNarrow:!0,...r},t=st(t),t.length===0))return 0;t=t.replace(ir()," ");let o=r.ambiguousIsNarrow?1:2,e=0;for(let s of t){let i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(er.eastAsianWidth(s)){case"F":case"W":e+=2;break;case"A":e+=o;break;default:e+=1}}return e}var Cn=10,Zn=(t=0)=>(r)=>`\x1B[${r+t}m`,Vn=(t=0)=>(r)=>`\x1B[${38+t};5;${r}m`,Fn=(t=0)=>(r,o,e)=>`\x1B[${38+t};2;${r};${o};${e}m`,x={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(x.modifier);var ar=Object.keys(x.color),cr=Object.keys(x.bgColor);[...ar];function fr(){let t=new Map;for(let[r,o]of Object.entries(x)){for(let[e,s]of Object.entries(o))x[e]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},o[e]=x[e],t.set(s[0],s[1]);Object.defineProperty(x,r,{value:o,enumerable:!1})}return Object.defineProperty(x,"codes",{value:t,enumerable:!1}),x.color.close="\x1B[39m",x.bgColor.close="\x1B[49m",x.color.ansi=Zn(),x.color.ansi256=Vn(),x.color.ansi16m=Fn(),x.bgColor.ansi=Zn(Cn),x.bgColor.ansi256=Vn(Cn),x.bgColor.ansi16m=Fn(Cn),Object.defineProperties(x,{rgbToAnsi256:{value:(r,o,e)=>r===o&&o===e?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(o/255*5)+Math.round(e/255*5),enumerable:!1},hexToRgb:{value:(r)=>{let o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!o)return[0,0,0];let[e]=o;e.length===3&&(e=[...e].map((i)=>i+i).join(""));let s=Number.parseInt(e,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:(r)=>x.rgbToAnsi256(...x.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value:(r)=>{if(r<8)return 30+r;if(r<16)return 90+(r-8);let o,e,s;if(r>=232)o=((r-232)*10+8)/255,e=o,s=o;else{r-=16;let a=r%36;o=Math.floor(r/36)/5,e=Math.floor(a/6)/5,s=a%6/5}let i=Math.max(o,e,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(e)<<1|Math.round(o));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(r,o,e)=>x.ansi256ToAnsi(x.rgbToAnsi256(r,o,e)),enumerable:!1},hexToAnsi:{value:(r)=>x.ansi256ToAnsi(x.hexToAnsi256(r)),enumerable:!1}}),x}var mr=fr(),hn=new Set(["\x1B","\x9B"]),lr=39,kn="\x07",ct="[",gr="]",ft="m",Mn=`${gr}8;;`,Dn=(t)=>`${hn.values().next().value}${ct}${t}${ft}`,nt=(t)=>`${hn.values().next().value}${Mn}${t}${kn}`,pr=(t)=>t.split(" ").map((r)=>tn(r)),Nn=(t,r,o)=>{let e=[...r],s=!1,i=!1,n=tn(st(t[t.length-1]));for(let[a,c]of e.entries()){let l=tn(c);if(n+l<=o?t[t.length-1]+=c:(t.push(c),n=0),hn.has(c)&&(s=!0,i=e.slice(a+1).join("").startsWith(Mn)),s){i?c===kn&&(s=!1,i=!1):c===ft&&(s=!1);continue}n+=l,n===o&&a<e.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},ur=(t)=>{let r=t.split(" "),o=r.length;for(;o>0&&!(tn(r[o-1])>0);)o--;return o===r.length?t:r.slice(0,o).join(" ")+r.slice(o).join("")},hr=(t,r,o={})=>{if(o.trim!==!1&&t.trim()==="")return"";let e="",s,i,n=pr(t),a=[""];for(let[l,f]of t.split(" ").entries()){o.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let m=tn(a[a.length-1]);if(l!==0&&(m>=r&&(o.wordWrap===!1||o.trim===!1)&&(a.push(""),m=0),(m>0||o.trim===!1)&&(a[a.length-1]+=" ",m++)),o.hard&&n[l]>r){let g=r-m,d=1+Math.floor((n[l]-g-1)/r);Math.floor((n[l]-1)/r)<d&&a.push(""),Nn(a,f,r);continue}if(m+n[l]>r&&m>0&&n[l]>0){if(o.wordWrap===!1&&m<r){Nn(a,f,r);continue}a.push("")}if(m+n[l]>r&&o.wordWrap===!1){Nn(a,f,r);continue}a[a.length-1]+=f}o.trim!==!1&&(a=a.map((l)=>ur(l)));let c=[...a.join(`
3
- `)];for(let[l,f]of c.entries()){if(e+=f,hn.has(f)){let{groups:g}=new RegExp(`(?:\\${ct}(?<code>\\d+)m|\\${Mn}(?<uri>.*)${kn})`).exec(c.slice(l).join(""))||{groups:{}};if(g.code!==void 0){let d=Number.parseFloat(g.code);s=d===lr?void 0:d}else g.uri!==void 0&&(i=g.uri.length===0?void 0:g.uri)}let m=mr.codes.get(Number(s));c[l+1]===`
2
+ var Kt=Object.create;var{getPrototypeOf:Jt,defineProperty:Wn,getOwnPropertyNames:Yt}=Object;var Qt=Object.prototype.hasOwnProperty;var mn=(t,r,o)=>{o=t!=null?Kt(Jt(t)):{};let e=r||!t||!t.__esModule?Wn(o,"default",{value:t,enumerable:!0}):o;for(let s of Yt(t))if(!Qt.call(e,s))Wn(e,s,{get:()=>t[s],enumerable:!0});return e};var zn=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var On=zn((No,Kn)=>{var Rn={to(t,r){if(!r)return`\x1B[${t+1}G`;return`\x1B[${r+1};${t+1}H`},move(t,r){let o="";if(t<0)o+=`\x1B[${-t}D`;else if(t>0)o+=`\x1B[${t}C`;if(r<0)o+=`\x1B[${-r}A`;else if(r>0)o+=`\x1B[${r}B`;return o},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Zt={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Vt={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let r="";for(let o=0;o<t;o++)r+=this.line+(o<t-1?Rn.up():"");if(t)r+=Rn.left;return r}};Kn.exports={cursor:Rn,scroll:Zt,erase:Vt,beep:"\x07"}});var Cn=zn((vo,Sn)=>{var gn=process||{},Jn=gn.argv||[],ln=gn.env||{},Ft=!(!!ln.NO_COLOR||Jn.includes("--no-color"))&&(!!ln.FORCE_COLOR||Jn.includes("--color")||gn.platform==="win32"||(gn.stdout||{}).isTTY&&ln.TERM!=="dumb"||!!ln.CI),Dt=(t,r,o=t)=>(e)=>{let s=""+e,i=s.indexOf(r,t.length);return~i?t+nr(s,r,o,i)+r:t+s+r},nr=(t,r,o,e)=>{let s="",i=0;do s+=t.substring(i,e)+o,i=e+r.length,e=t.indexOf(r,i);while(~e);return s+t.substring(i)},Yn=(t=Ft)=>{let r=t?Dt:()=>String;return{isColorSupported:t,reset:r("\x1B[0m","\x1B[0m"),bold:r("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:r("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:r("\x1B[3m","\x1B[23m"),underline:r("\x1B[4m","\x1B[24m"),inverse:r("\x1B[7m","\x1B[27m"),hidden:r("\x1B[8m","\x1B[28m"),strikethrough:r("\x1B[9m","\x1B[29m"),black:r("\x1B[30m","\x1B[39m"),red:r("\x1B[31m","\x1B[39m"),green:r("\x1B[32m","\x1B[39m"),yellow:r("\x1B[33m","\x1B[39m"),blue:r("\x1B[34m","\x1B[39m"),magenta:r("\x1B[35m","\x1B[39m"),cyan:r("\x1B[36m","\x1B[39m"),white:r("\x1B[37m","\x1B[39m"),gray:r("\x1B[90m","\x1B[39m"),bgBlack:r("\x1B[40m","\x1B[49m"),bgRed:r("\x1B[41m","\x1B[49m"),bgGreen:r("\x1B[42m","\x1B[49m"),bgYellow:r("\x1B[43m","\x1B[49m"),bgBlue:r("\x1B[44m","\x1B[49m"),bgMagenta:r("\x1B[45m","\x1B[49m"),bgCyan:r("\x1B[46m","\x1B[49m"),bgWhite:r("\x1B[47m","\x1B[49m"),blackBright:r("\x1B[90m","\x1B[39m"),redBright:r("\x1B[91m","\x1B[39m"),greenBright:r("\x1B[92m","\x1B[39m"),yellowBright:r("\x1B[93m","\x1B[39m"),blueBright:r("\x1B[94m","\x1B[39m"),magentaBright:r("\x1B[95m","\x1B[39m"),cyanBright:r("\x1B[96m","\x1B[39m"),whiteBright:r("\x1B[97m","\x1B[39m"),bgBlackBright:r("\x1B[100m","\x1B[49m"),bgRedBright:r("\x1B[101m","\x1B[49m"),bgGreenBright:r("\x1B[102m","\x1B[49m"),bgYellowBright:r("\x1B[103m","\x1B[49m"),bgBlueBright:r("\x1B[104m","\x1B[49m"),bgMagentaBright:r("\x1B[105m","\x1B[49m"),bgCyanBright:r("\x1B[106m","\x1B[49m"),bgWhiteBright:r("\x1B[107m","\x1B[49m")}};Sn.exports=Yn();Sn.exports.createColors=Yn});var O=mn(On(),1),et=mn(Cn(),1);import{stdin as rt,stdout as ot}from"process";import*as I from"readline";import Qn from"readline";import{Writable as tr}from"stream";function rr({onlyFirst:t=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(r,t?void 0:"g")}var or=rr();function st(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(or,"")}function it(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var at={exports:{}};(function(t){var r={};t.exports=r,r.eastAsianWidth=function(e){var s=e.charCodeAt(0),i=e.length==2?e.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},r.characterLength=function(e){var s=this.eastAsianWidth(e);return s=="F"||s=="W"||s=="A"?2:1};function o(e){return e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}r.length=function(e){for(var s=o(e),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},r.slice=function(e,s,i){textLen=r.length(e),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",a=0,c=o(e),l=0;l<c.length;l++){var f=c[l],m=r.length(f);if(a>=s-(m==2?1:0))if(a+m<=i)n+=f;else break;a+=m}return n}})(at);var er=at.exports,sr=it(er),ir=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},ar=it(ir);function tn(t,r={}){if(typeof t!="string"||t.length===0||(r={ambiguousIsNarrow:!0,...r},t=st(t),t.length===0))return 0;t=t.replace(ar()," ");let o=r.ambiguousIsNarrow?1:2,e=0;for(let s of t){let i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(sr.eastAsianWidth(s)){case"F":case"W":e+=2;break;case"A":e+=o;break;default:e+=1}}return e}var Tn=10,Zn=(t=0)=>(r)=>`\x1B[${r+t}m`,Vn=(t=0)=>(r)=>`\x1B[${38+t};5;${r}m`,Fn=(t=0)=>(r,o,e)=>`\x1B[${38+t};2;${r};${o};${e}m`,x={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(x.modifier);var cr=Object.keys(x.color),fr=Object.keys(x.bgColor);[...cr];function mr(){let t=new Map;for(let[r,o]of Object.entries(x)){for(let[e,s]of Object.entries(o))x[e]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},o[e]=x[e],t.set(s[0],s[1]);Object.defineProperty(x,r,{value:o,enumerable:!1})}return Object.defineProperty(x,"codes",{value:t,enumerable:!1}),x.color.close="\x1B[39m",x.bgColor.close="\x1B[49m",x.color.ansi=Zn(),x.color.ansi256=Vn(),x.color.ansi16m=Fn(),x.bgColor.ansi=Zn(Tn),x.bgColor.ansi256=Vn(Tn),x.bgColor.ansi16m=Fn(Tn),Object.defineProperties(x,{rgbToAnsi256:{value:(r,o,e)=>r===o&&o===e?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(o/255*5)+Math.round(e/255*5),enumerable:!1},hexToRgb:{value:(r)=>{let o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!o)return[0,0,0];let[e]=o;e.length===3&&(e=[...e].map((i)=>i+i).join(""));let s=Number.parseInt(e,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:(r)=>x.rgbToAnsi256(...x.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value:(r)=>{if(r<8)return 30+r;if(r<16)return 90+(r-8);let o,e,s;if(r>=232)o=((r-232)*10+8)/255,e=o,s=o;else{r-=16;let a=r%36;o=Math.floor(r/36)/5,e=Math.floor(a/6)/5,s=a%6/5}let i=Math.max(o,e,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(e)<<1|Math.round(o));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(r,o,e)=>x.ansi256ToAnsi(x.rgbToAnsi256(r,o,e)),enumerable:!1},hexToAnsi:{value:(r)=>x.ansi256ToAnsi(x.hexToAnsi256(r)),enumerable:!1}}),x}var lr=mr(),hn=new Set(["\x1B","\x9B"]),gr=39,vn="\x07",ct="[",pr="]",ft="m",Pn=`${pr}8;;`,Dn=(t)=>`${hn.values().next().value}${ct}${t}${ft}`,nt=(t)=>`${hn.values().next().value}${Pn}${t}${vn}`,ur=(t)=>t.split(" ").map((r)=>tn(r)),kn=(t,r,o)=>{let e=[...r],s=!1,i=!1,n=tn(st(t[t.length-1]));for(let[a,c]of e.entries()){let l=tn(c);if(n+l<=o?t[t.length-1]+=c:(t.push(c),n=0),hn.has(c)&&(s=!0,i=e.slice(a+1).join("").startsWith(Pn)),s){i?c===vn&&(s=!1,i=!1):c===ft&&(s=!1);continue}n+=l,n===o&&a<e.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},hr=(t)=>{let r=t.split(" "),o=r.length;for(;o>0&&!(tn(r[o-1])>0);)o--;return o===r.length?t:r.slice(0,o).join(" ")+r.slice(o).join("")},dr=(t,r,o={})=>{if(o.trim!==!1&&t.trim()==="")return"";let e="",s,i,n=ur(t),a=[""];for(let[l,f]of t.split(" ").entries()){o.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let m=tn(a[a.length-1]);if(l!==0&&(m>=r&&(o.wordWrap===!1||o.trim===!1)&&(a.push(""),m=0),(m>0||o.trim===!1)&&(a[a.length-1]+=" ",m++)),o.hard&&n[l]>r){let g=r-m,d=1+Math.floor((n[l]-g-1)/r);Math.floor((n[l]-1)/r)<d&&a.push(""),kn(a,f,r);continue}if(m+n[l]>r&&m>0&&n[l]>0){if(o.wordWrap===!1&&m<r){kn(a,f,r);continue}a.push("")}if(m+n[l]>r&&o.wordWrap===!1){kn(a,f,r);continue}a[a.length-1]+=f}o.trim!==!1&&(a=a.map((l)=>hr(l)));let c=[...a.join(`
3
+ `)];for(let[l,f]of c.entries()){if(e+=f,hn.has(f)){let{groups:g}=new RegExp(`(?:\\${ct}(?<code>\\d+)m|\\${Pn}(?<uri>.*)${vn})`).exec(c.slice(l).join(""))||{groups:{}};if(g.code!==void 0){let d=Number.parseFloat(g.code);s=d===gr?void 0:d}else g.uri!==void 0&&(i=g.uri.length===0?void 0:g.uri)}let m=lr.codes.get(Number(s));c[l+1]===`
4
4
  `?(i&&(e+=nt("")),s&&m&&(e+=Dn(m))):f===`
5
5
  `&&(s&&m&&(e+=Dn(s)),i&&(e+=nt(i)))}return e};function tt(t,r,o){return String(t).normalize().replace(/\r\n/g,`
6
6
  `).split(`
7
- `).map((e)=>hr(e,r,o)).join(`
8
- `)}var dr=["up","down","left","right","space","enter","cancel"],un={actions:new Set(dr),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function vn(t,r){if(typeof t=="string")return un.aliases.get(t)===r;for(let o of t)if(o!==void 0&&vn(o,r))return!0;return!1}function br(t,r){if(t===r)return;let o=t.split(`
7
+ `).map((e)=>dr(e,r,o)).join(`
8
+ `)}var br=["up","down","left","right","space","enter","cancel"],un={actions:new Set(br),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function Mn(t,r){if(typeof t=="string")return un.aliases.get(t)===r;for(let o of t)if(o!==void 0&&Mn(o,r))return!0;return!1}function yr(t,r){if(t===r)return;let o=t.split(`
9
9
  `),e=r.split(`
10
- `),s=[];for(let i=0;i<Math.max(o.length,e.length);i++)o[i]!==e[i]&&s.push(i);return s}var yr=globalThis.process.platform.startsWith("win"),Pn=Symbol("clack:cancel");function S(t){return t===Pn}function pn(t,r){let o=t;o.isTTY&&o.setRawMode(r)}function mt({input:t=rt,output:r=ot,overwrite:o=!0,hideCursor:e=!0}={}){let s=I.createInterface({input:t,output:r,prompt:"",tabSize:1});I.emitKeypressEvents(t,s),t.isTTY&&t.setRawMode(!0);let i=(n,{name:a,sequence:c})=>{let l=String(n);if(vn([l,a,c],"cancel")){e&&r.write(O.cursor.show),process.exit(0);return}if(!o)return;I.moveCursor(r,a==="return"?0:-1,a==="return"?-1:0,()=>{I.clearLine(r,1,()=>{t.once("keypress",i)})})};return e&&r.write(O.cursor.hide),t.once("keypress",i),()=>{t.off("keypress",i),e&&r.write(O.cursor.show),t.isTTY&&!yr&&t.setRawMode(!1),s.terminal=!1,s.close()}}var xr=Object.defineProperty,$r=(t,r,o)=>(r in t)?xr(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,N=(t,r,o)=>($r(t,typeof r!="symbol"?r+"":r,o),o);class Gn{constructor(t,r=!0){N(this,"input"),N(this,"output"),N(this,"_abortSignal"),N(this,"rl"),N(this,"opts"),N(this,"_render"),N(this,"_track",!1),N(this,"_prevFrame",""),N(this,"_subscribers",new Map),N(this,"_cursor",0),N(this,"state","initial"),N(this,"error",""),N(this,"value");let{input:o=rt,output:e=ot,render:s,signal:i,...n}=t;this.opts=n,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=s.bind(this),this._track=r,this._abortSignal=i,this.input=o,this.output=e}unsubscribe(){this._subscribers.clear()}setSubscriber(t,r){let o=this._subscribers.get(t)??[];o.push(r),this._subscribers.set(t,o)}on(t,r){this.setSubscriber(t,{cb:r})}once(t,r){this.setSubscriber(t,{cb:r,once:!0})}emit(t,...r){let o=this._subscribers.get(t)??[],e=[];for(let s of o)s.cb(...r),s.once&&e.push(()=>o.splice(o.indexOf(s),1));for(let s of e)s()}prompt(){return new Promise((t,r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Pn);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let o=new nr;o._write=(e,s,i)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),i()},this.input.pipe(o),this.rl=Qn.createInterface({input:this.input,output:o,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),Qn.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),pn(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(O.cursor.show),this.output.off("resize",this.render),pn(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(O.cursor.show),this.output.off("resize",this.render),pn(this.input,!1),t(Pn)})})}onKeypress(t,r){if(this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&un.aliases.has(r.name)&&this.emit("cursor",un.aliases.get(r.name)),un.actions.has(r.name)&&this.emit("cursor",r.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),t==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),t&&this.emit("key",t.toLowerCase()),r?.name==="return"){if(this.opts.validate){let o=this.opts.validate(this.value);o&&(this.error=o instanceof Error?o.message:o,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}vn([t,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
10
+ `),s=[];for(let i=0;i<Math.max(o.length,e.length);i++)o[i]!==e[i]&&s.push(i);return s}var xr=globalThis.process.platform.startsWith("win"),Nn=Symbol("clack:cancel");function S(t){return t===Nn}function pn(t,r){let o=t;o.isTTY&&o.setRawMode(r)}function mt({input:t=rt,output:r=ot,overwrite:o=!0,hideCursor:e=!0}={}){let s=I.createInterface({input:t,output:r,prompt:"",tabSize:1});I.emitKeypressEvents(t,s),t.isTTY&&t.setRawMode(!0);let i=(n,{name:a,sequence:c})=>{let l=String(n);if(Mn([l,a,c],"cancel")){e&&r.write(O.cursor.show),process.exit(0);return}if(!o)return;I.moveCursor(r,a==="return"?0:-1,a==="return"?-1:0,()=>{I.clearLine(r,1,()=>{t.once("keypress",i)})})};return e&&r.write(O.cursor.hide),t.once("keypress",i),()=>{t.off("keypress",i),e&&r.write(O.cursor.show),t.isTTY&&!xr&&t.setRawMode(!1),s.terminal=!1,s.close()}}var $r=Object.defineProperty,wr=(t,r,o)=>(r in t)?$r(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,k=(t,r,o)=>(wr(t,typeof r!="symbol"?r+"":r,o),o);class Gn{constructor(t,r=!0){k(this,"input"),k(this,"output"),k(this,"_abortSignal"),k(this,"rl"),k(this,"opts"),k(this,"_render"),k(this,"_track",!1),k(this,"_prevFrame",""),k(this,"_subscribers",new Map),k(this,"_cursor",0),k(this,"state","initial"),k(this,"error",""),k(this,"value");let{input:o=rt,output:e=ot,render:s,signal:i,...n}=t;this.opts=n,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=s.bind(this),this._track=r,this._abortSignal=i,this.input=o,this.output=e}unsubscribe(){this._subscribers.clear()}setSubscriber(t,r){let o=this._subscribers.get(t)??[];o.push(r),this._subscribers.set(t,o)}on(t,r){this.setSubscriber(t,{cb:r})}once(t,r){this.setSubscriber(t,{cb:r,once:!0})}emit(t,...r){let o=this._subscribers.get(t)??[],e=[];for(let s of o)s.cb(...r),s.once&&e.push(()=>o.splice(o.indexOf(s),1));for(let s of e)s()}prompt(){return new Promise((t,r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Nn);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let o=new tr;o._write=(e,s,i)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),i()},this.input.pipe(o),this.rl=Qn.createInterface({input:this.input,output:o,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),Qn.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),pn(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(O.cursor.show),this.output.off("resize",this.render),pn(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(O.cursor.show),this.output.off("resize",this.render),pn(this.input,!1),t(Nn)})})}onKeypress(t,r){if(this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&un.aliases.has(r.name)&&this.emit("cursor",un.aliases.get(r.name)),un.actions.has(r.name)&&this.emit("cursor",r.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),t==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),t&&this.emit("key",t.toLowerCase()),r?.name==="return"){if(this.opts.validate){let o=this.opts.validate(this.value);o&&(this.error=o instanceof Error?o.message:o,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}Mn([t,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
11
11
  `),pn(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=tt(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
12
- `).length-1;this.output.write(O.cursor.move(-999,t*-1))}render(){let t=tt(this._render(this)??"",process.stdout.columns,{hard:!0});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(O.cursor.hide);else{let r=br(this._prevFrame,t);if(this.restoreCursor(),r&&r?.length===1){let o=r[0];this.output.write(O.cursor.move(0,o)),this.output.write(O.erase.lines(1));let e=t.split(`
12
+ `).length-1;this.output.write(O.cursor.move(-999,t*-1))}render(){let t=tt(this._render(this)??"",process.stdout.columns,{hard:!0});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(O.cursor.hide);else{let r=yr(this._prevFrame,t);if(this.restoreCursor(),r&&r?.length===1){let o=r[0];this.output.write(O.cursor.move(0,o)),this.output.write(O.erase.lines(1));let e=t.split(`
13
13
  `);this.output.write(e[o]),this._prevFrame=t,this.output.write(O.cursor.move(0,e.length-o-1));return}if(r&&r?.length>1){let o=r[0];this.output.write(O.cursor.move(0,o)),this.output.write(O.erase.down());let e=t.split(`
14
14
  `).slice(o);this.output.write(e.join(`
15
- `)),this._prevFrame=t;return}this.output.write(O.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}class Xn extends Gn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(r)=>{this.output.write(O.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var wr;wr=new WeakMap;class _n extends Gn{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;let t=this.value.slice(0,this.cursor),[r,...o]=this.value.slice(this.cursor);return`${t}${et.default.inverse(r)}${o.join("")}`}get cursor(){return this._cursor}constructor(t){super(t),this.on("finalize",()=>{this.value||(this.value=t.defaultValue)})}}var u=mn(Tn(),1),dn=mn(On(),1);import G from"process";function Er(){return G.platform!=="win32"?G.env.TERM!=="linux":!!G.env.CI||!!G.env.WT_SESSION||!!G.env.TERMINUS_SUBLIME||G.env.ConEmuTask==="{cmd::Cmder}"||G.env.TERM_PROGRAM==="Terminus-Sublime"||G.env.TERM_PROGRAM==="vscode"||G.env.TERM==="xterm-256color"||G.env.TERM==="alacritty"||G.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var An=Er(),E=(t,r)=>An?t:r,Rr=E("\u25C6","*"),pt=E("\u25A0","x"),ut=E("\u25B2","x"),Un=E("\u25C7","o"),Or=E("\u250C","T"),R=E("\u2502","|"),rn=E("\u2514","\u2014"),lt=E("\u25CF",">"),gt=E("\u25CB"," "),Bo=E("\u25FB","[\u2022]"),Io=E("\u25FC","[+]"),jo=E("\u25FB","[ ]"),Wo=E("\u25AA","\u2022"),zo=E("\u2500","-"),Ko=E("\u256E","+"),Jo=E("\u251C","+"),Yo=E("\u256F","+"),Sr=E("\u25CF","\u2022"),Tr=E("\u25C6","*"),Cr=E("\u25B2","!"),Nr=E("\u25A0","x"),ht=(t)=>{switch(t){case"initial":case"active":return u.default.cyan(Rr);case"cancel":return u.default.red(pt);case"error":return u.default.yellow(ut);case"submit":return u.default.green(Un)}};var P=(t)=>new _n({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){let r=`${u.default.gray(R)}
15
+ `)),this._prevFrame=t;return}this.output.write(O.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}class Xn extends Gn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(r)=>{this.output.write(O.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var Er;Er=new WeakMap;class _n extends Gn{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;let t=this.value.slice(0,this.cursor),[r,...o]=this.value.slice(this.cursor);return`${t}${et.default.inverse(r)}${o.join("")}`}get cursor(){return this._cursor}constructor(t){super(t),this.on("finalize",()=>{this.value||(this.value=t.defaultValue)})}}var u=mn(Cn(),1),dn=mn(On(),1);import G from"process";function Rr(){return G.platform!=="win32"?G.env.TERM!=="linux":!!G.env.CI||!!G.env.WT_SESSION||!!G.env.TERMINUS_SUBLIME||G.env.ConEmuTask==="{cmd::Cmder}"||G.env.TERM_PROGRAM==="Terminus-Sublime"||G.env.TERM_PROGRAM==="vscode"||G.env.TERM==="xterm-256color"||G.env.TERM==="alacritty"||G.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var An=Rr(),E=(t,r)=>An?t:r,Or=E("\u25C6","*"),pt=E("\u25A0","x"),ut=E("\u25B2","x"),Un=E("\u25C7","o"),Sr=E("\u250C","T"),R=E("\u2502","|"),rn=E("\u2514","\u2014"),lt=E("\u25CF",">"),gt=E("\u25CB"," "),jo=E("\u25FB","[\u2022]"),Wo=E("\u25FC","[+]"),zo=E("\u25FB","[ ]"),Ko=E("\u25AA","\u2022"),Jo=E("\u2500","-"),Yo=E("\u256E","+"),Qo=E("\u251C","+"),Zo=E("\u256F","+"),Cr=E("\u25CF","\u2022"),Tr=E("\u25C6","*"),kr=E("\u25B2","!"),Nr=E("\u25A0","x"),ht=(t)=>{switch(t){case"initial":case"active":return u.default.cyan(Or);case"cancel":return u.default.red(pt);case"error":return u.default.yellow(ut);case"submit":return u.default.green(Un)}};var N=(t)=>new _n({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){let r=`${u.default.gray(R)}
16
16
  ${ht(this.state)} ${t.message}
17
17
  `,o=t.placeholder?u.default.inverse(t.placeholder[0])+u.default.dim(t.placeholder.slice(1)):u.default.inverse(u.default.hidden("_")),e=this.value?this.valueWithCursor:o;switch(this.state){case"error":return`${r.trim()}
18
18
  ${u.default.yellow(R)} ${e}
@@ -27,20 +27,20 @@ ${u.default.gray(R)}`;default:return`${e}${u.default.cyan(R)} ${this.value?`${u
27
27
  ${u.default.cyan(rn)}
28
28
  `}}}).prompt()};var qn=(t="")=>{process.stdout.write(`${u.default.gray(rn)} ${u.default.red(t)}
29
29
 
30
- `)},dt=(t="")=>{process.stdout.write(`${u.default.gray(Or)} ${t}
30
+ `)},dt=(t="")=>{process.stdout.write(`${u.default.gray(Sr)} ${t}
31
31
  `)},bt=(t="")=>{process.stdout.write(`${u.default.gray(R)}
32
32
  ${u.default.gray(rn)} ${t}
33
33
 
34
34
  `)},X={message:(t="",{symbol:r=u.default.gray(R)}={})=>{let o=[`${u.default.gray(R)}`];if(t){let[e,...s]=t.split(`
35
35
  `);o.push(`${r} ${e}`,...s.map((i)=>`${u.default.gray(R)} ${i}`))}process.stdout.write(`${o.join(`
36
36
  `)}
37
- `)},info:(t)=>{X.message(t,{symbol:u.default.blue(Sr)})},success:(t)=>{X.message(t,{symbol:u.default.green(Tr)})},step:(t)=>{X.message(t,{symbol:u.default.green(Un)})},warn:(t)=>{X.message(t,{symbol:u.default.yellow(Cr)})},warning:(t)=>{X.warn(t)},error:(t)=>{X.message(t,{symbol:u.default.red(Nr)})}},Qo=`${u.default.gray(R)} `;var yt=({indicator:t="dots"}={})=>{let r=An?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],o=An?80:120,e=process.env.CI==="true",s,i,n=!1,a="",c,l=performance.now(),f=(y)=>{let $=y>1?"Something went wrong":"Canceled";n&&H($,y)},m=()=>f(2),g=()=>f(1),d=()=>{process.on("uncaughtExceptionMonitor",m),process.on("unhandledRejection",m),process.on("SIGINT",g),process.on("SIGTERM",g),process.on("exit",f)},h=()=>{process.removeListener("uncaughtExceptionMonitor",m),process.removeListener("unhandledRejection",m),process.removeListener("SIGINT",g),process.removeListener("SIGTERM",g),process.removeListener("exit",f)},w=()=>{if(c===void 0)return;e&&process.stdout.write(`
37
+ `)},info:(t)=>{X.message(t,{symbol:u.default.blue(Cr)})},success:(t)=>{X.message(t,{symbol:u.default.green(Tr)})},step:(t)=>{X.message(t,{symbol:u.default.green(Un)})},warn:(t)=>{X.message(t,{symbol:u.default.yellow(kr)})},warning:(t)=>{X.warn(t)},error:(t)=>{X.message(t,{symbol:u.default.red(Nr)})}},Vo=`${u.default.gray(R)} `;var yt=({indicator:t="dots"}={})=>{let r=An?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],o=An?80:120,e=process.env.CI==="true",s,i,n=!1,a="",c,l=performance.now(),f=(y)=>{let $=y>1?"Something went wrong":"Canceled";n&&H($,y)},m=()=>f(2),g=()=>f(1),d=()=>{process.on("uncaughtExceptionMonitor",m),process.on("unhandledRejection",m),process.on("SIGINT",g),process.on("SIGTERM",g),process.on("exit",f)},h=()=>{process.removeListener("uncaughtExceptionMonitor",m),process.removeListener("unhandledRejection",m),process.removeListener("SIGINT",g),process.removeListener("SIGTERM",g),process.removeListener("exit",f)},w=()=>{if(c===void 0)return;e&&process.stdout.write(`
38
38
  `);let y=c.split(`
39
- `);process.stdout.write(dn.cursor.move(-999,y.length-1)),process.stdout.write(dn.erase.down(y.length))},T=(y)=>y.replace(/\.+$/,""),A=(y)=>{let $=(performance.now()-y)/1000,C=Math.floor($/60),L=Math.floor($%60);return C>0?`[${C}m ${L}s]`:`[${L}s]`},b=(y="")=>{n=!0,s=mt(),a=T(y),l=performance.now(),process.stdout.write(`${u.default.gray(R)}
40
- `);let $=0,C=0;d(),i=setInterval(()=>{if(e&&a===c)return;w(),c=a;let L=u.default.magenta(r[$]);if(e)process.stdout.write(`${L} ${a}...`);else if(t==="timer")process.stdout.write(`${L} ${a} ${A(l)}`);else{let K=".".repeat(Math.floor(C)).slice(0,3);process.stdout.write(`${L} ${a}${K}`)}$=$+1<r.length?$+1:0,C=C<r.length?C+0.125:0},o)},H=(y="",$=0)=>{n=!1,clearInterval(i),w();let C=$===0?u.default.green(Un):$===1?u.default.red(pt):u.default.red(ut);a=T(y??a),t==="timer"?process.stdout.write(`${C} ${a} ${A(l)}
41
- `):process.stdout.write(`${C} ${a}
42
- `),h(),s()};return{start:b,stop:H,message:(y="")=>{a=T(y??a)}}},xt=async(t,r)=>{let o={},e=Object.keys(t);for(let s of e){let i=t[s],n=await i({results:o})?.catch((a)=>{throw a});if(typeof r?.onCancel=="function"&&S(n)){o[s]="canceled",r.onCancel({results:o});continue}o[s]=n}return o};var Pr=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||process.stdout.isTTY),kr=["blue","cyan","gray","green","magenta","red","white","yellow"],Mr=["bold","dim","italic","underline","reset"],wt={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",reset:"\x1B[0m",underline:"\x1B[4m"},vr={"\x1B[30m":"\x1B[90m","\x1B[31m":"\x1B[91m","\x1B[32m":"\x1B[92m","\x1B[33m":"\x1B[93m","\x1B[34m":"\x1B[94m","\x1B[35m":"\x1B[95m","\x1B[36m":"\x1B[96m","\x1B[37m":"\x1B[97m"};function Hn(t){return(r)=>Pr?`${t}${r}${wt.reset}`:r}function $t({bright:t=!1,color:r}){let o=Bun.color(r,"ansi");if(!o)return"";return t?vr[o]||o:o}var Gr=kr.reduce((t,r)=>{return t[r]=Hn($t({color:r})),t[`${r}Bright`]=Hn($t({bright:!0,color:r})),t},{}),Xr=Mr.reduce((t,r)=>{return t[r]=Hn(wt[r]),t},{}),p={...Gr,...Xr};var _=({prefix:t="",level:r=process.env.DEBUG?0:1}={})=>{function o(...a){if(r<=0){let c=a.join(" ");console.log(bn({level:p.dim("DEBUG"),message:c,prefix:t}))}}function e(...a){if(r<=1){let c=a.join(" ");console.info(bn({level:p.cyan("INFO "),message:c,prefix:t}))}}function s(...a){if(r<=2){let c=a.join(" ");console.warn(bn({level:p.yellow("WARN "),message:c,prefix:t}))}}function i(...a){if(r<=3){let c=a.join(" ");console.error(bn({level:p.red("ERROR"),message:c,prefix:t}))}}function n(a){return _({level:r,prefix:`${t}:${a}`})}return{child:n,debug:o,error:i,info:e,warn:s}},Ln=_();function bn({prefix:t,level:r,message:o}){let e=new Date().toISOString().split("T")[1]?.split(".")[0]||"",s=t?`[${t}] `:"";return`${p.dim(e||"")} ${r} ${s}${o}`}var B=new Uint32Array(65536),_r=(t,r)=>{let o=t.length,e=r.length,s=1<<o-1,i=-1,n=0,a=o,c=o;while(c--)B[t.charCodeAt(c)]|=1<<c;for(c=0;c<e;c++){let l=B[r.charCodeAt(c)],f=l|n;if(l|=(l&i)+i^i,n|=~(l|i),i&=l,n&s)a++;if(i&s)a--;n=n<<1|1,i=i<<1|~(f|n),n&=f}c=o;while(c--)B[t.charCodeAt(c)]=0;return a},Ar=(t,r)=>{let o=r.length,e=t.length,s=[],i=[],n=Math.ceil(o/32),a=Math.ceil(e/32);for(let h=0;h<n;h++)i[h]=-1,s[h]=0;let c=0;for(;c<a-1;c++){let h=0,w=-1,T=c*32,A=Math.min(32,e)+T;for(let b=T;b<A;b++)B[t.charCodeAt(b)]|=1<<b;for(let b=0;b<o;b++){let H=B[r.charCodeAt(b)],y=i[b/32|0]>>>b&1,$=s[b/32|0]>>>b&1,C=H|h,L=((H|$)&w)+w^w|H|$,K=h|~(L|w),fn=w&L;if(K>>>31^y)i[b/32|0]^=1<<b;if(fn>>>31^$)s[b/32|0]^=1<<b;K=K<<1|y,fn=fn<<1|$,w=fn|~(C|K),h=K&C}for(let b=T;b<A;b++)B[t.charCodeAt(b)]=0}let l=0,f=-1,m=c*32,g=Math.min(32,e-m)+m;for(let h=m;h<g;h++)B[t.charCodeAt(h)]|=1<<h;let d=e;for(let h=0;h<o;h++){let w=B[r.charCodeAt(h)],T=i[h/32|0]>>>h&1,A=s[h/32|0]>>>h&1,b=w|l,H=((w|A)&f)+f^f|w|A,y=l|~(H|f),$=f&H;if(d+=y>>>e-1&1,d-=$>>>e-1&1,y>>>31^T)i[h/32|0]^=1<<h;if($>>>31^A)s[h/32|0]^=1<<h;y=y<<1|T,$=$<<1|A,f=$|~(b|y),l=y&b}for(let h=m;h<g;h++)B[t.charCodeAt(h)]=0;return d},Et=(t,r)=>{if(t.length<r.length){let o=r;r=t,t=o}if(r.length===0)return t.length;if(t.length<=32)return _r(t,r);return Ar(t,r)};function Rt(t,r,o=3){return r.map((i)=>({distance:Et(t.toLowerCase(),i.toLowerCase()),option:i})).filter(({distance:i})=>i<=Math.max(3,t.length/2)).sort((i,n)=>i.distance-n.distance).slice(0,o).map(({option:i})=>i)}function Ot(t,r){return r[t.toLowerCase()]||null}async function F(t,r={}){let{fallback:o,logLevel:e="warn",message:s="Operation failed gracefully"}=r;try{return await t()}catch(i){let n=i instanceof Error?i.message:String(i);if(console[e](`${s}: ${n}`),o)try{await o()}catch(a){console.error(`Fallback also failed: ${a instanceof Error?a.message:String(a)}`)}return}}var Ur={backoffMultiplier:2,initialDelay:1000,maxAttempts:3,maxDelay:30000,onRetry:(t,r)=>{Ln.warn(`Retry attempt ${t}: ${r.message}`)},retryableErrors:["ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENOTFOUND","rate limit","429","503","502","504","npm ERR!","EPUBLISHCONFLICT"]};async function on(t,r={}){let o={...Ur,...r},e=new Error("Operation failed");for(let s=1;s<=o.maxAttempts;s++)try{return await t()}catch(i){if(e=i instanceof Error?i:new Error(String(i)),!o.retryableErrors.some((c)=>e.message.toLowerCase().includes(c.toLowerCase()))||s===o.maxAttempts)throw e;o.onRetry(s,e);let a=Math.min(o.initialDelay*o.backoffMultiplier**(s-1),o.maxDelay);await new Promise((c)=>setTimeout(c,a))}throw e}var U=(t)=>{return t.map=(r)=>U((o)=>r(t(o))),t.or=(r)=>U((o)=>{try{return t(o)}catch(e){return r(o)}}),t},yn=()=>"bad banditype"();var St=(t)=>U((r)=>t.includes(r)?r:yn()),xn=(t)=>U((r)=>typeof r===typeof t?r:yn()),en=()=>xn(""),Tt=()=>xn(0),Ct=()=>xn(!0);var Nt=()=>xn();var Pt=(t)=>U((r)=>r instanceof t?r:yn()),Bn=(t)=>Pt(Object).map((r)=>{let o={};for(let e in r){let s=t(r[e]);s!==void 0&&(o[e]=s)}return o}),D=(t)=>Pt(Object).map((r)=>{let o={};for(let e in t){let s=t[e](r[e]);s!==void 0&&(o[e]=s)}return o});function qr(t,r){return U((o)=>{try{return t(o)}catch{try{return r(o)}catch{throw new Error("No matching schema in union")}}})}function J(t,r){return(o)=>{if(o===void 0)return r;return t(o)}}function kt(){return U((t)=>{let r=Tt()(t);if(!Number.isInteger(r)||r<=0)throw new Error("Must be a positive integer");return r})}function Mt(){return U((t)=>{let r=en()(t);try{return new URL(r),r}catch{throw new Error("Must be a valid URL")}})}function vt(t,r){return U((o)=>{let e=en()(o);if(!t.test(e))throw new Error(r||`Must match pattern ${t}`);return e})}function sn(t){return{parse(r){try{return t(r)}catch(o){throw new Error(o instanceof Error?o.message:"Validation failed")}},safeParse(r){try{return{data:t(r),success:!0}}catch(o){return{error:o instanceof Error?o:new Error("Validation failed"),success:!1}}},validator:t}}function Y(){return qr(Nt(),en())}function Q(t){return J(en(),t)}function nn(t){return J(Ct(),t)}function $n(t,r){return J(St(t),r)}import{parseArgs as Zr}from"util";var{$:v}=globalThis.Bun;import{join as At}from"path";var{$:_t}=globalThis.Bun;import{tmpdir as Hr}from"os";var Gt={MACHINES_DIR:"machines",TEMP_DIR:Hr()};var Lr=D({directory:Q("./gh-runners"),labels:Y(),name:Q("runner"),numberOfMachines:J(kt(),1),os:$n(["osx","linux","windows"],"osx"),overwrite:nn(!1),run:nn(!1),runnerGroup:Y(),url:Y()}),Br=sn(Lr),Xt=sn(D({defaultProfile:Y(),profiles:Bn(Br.validator)}));var Ir=["hydra.json",".hydra.json","hydra.toml",".hydra.toml"];async function jr(t=process.cwd()){for(let r of Ir){let o=At(t,r);if(await Bun.file(o).exists())return o}return null}async function W(t){let r=t?.configPath||await jr();if(!r)return null;let o=Bun.file(r);if(!await o.exists())return null;try{let e=await o.text(),s=r.endsWith(".toml")?await Wr(e):JSON.parse(e);return Xt.parse(s)}catch(e){if(e instanceof Error)throw new Error(`Invalid config file: ${e.message}`);throw e}}async function z(t,r){if(!t)return null;let o=r||t.defaultProfile;if(!o)return null;return t.profiles[o]||null}async function Wr(t){let r=At(Gt.TEMP_DIR,`hydra-config-${Date.now()}.toml`);await Bun.write(r,t);try{let o=await import(r);return await _t`rm -f ${r}`.quiet(),o.default}catch(o){throw await _t`rm -f ${r}`.quiet(),new Error(`Failed to parse TOML configuration: ${o}`)}}function an(){let t=import.meta.path,r=t.substring(0,t.lastIndexOf("/"));return r.substring(0,r.lastIndexOf("/"))}var zr=D({directory:Q(`${process.cwd()}/gh-runners`),labels:Y(),name:Q("runner"),numberOfMachines:J(vt(/^\d+$/,"Number of machines must be a positive integer"),"1"),os:$n(["osx","linux","windows"],"osx"),overwrite:nn(!1),run:nn(!1),token:Q(process.env.GITHUB_PERSONAL_ACCESS_TOKEN??""),url:Mt()}),Le=sn(zr);var Z=_({prefix:"WorkerManager"}),k=new Set,Ut=!1;function Kr(){if(Ut)return;Ut=!0;let t=()=>{if(k.size>0)Z.info("Cleaning up workers...");qt()};process.on("exit",t),process.on("SIGINT",t),process.on("SIGTERM",t),process.on("uncaughtException",(r)=>{Z.error("Uncaught exception:",r),t(),process.exit(1)})}function Jr(t){k.add(t),Z.debug(`Worker added. Total workers: ${k.size}`),t.addEventListener("exit",()=>{k.delete(t),Z.debug(`Worker exited. Remaining workers: ${k.size}`)})}function Yr(t){if(k.has(t))t.terminate(),k.delete(t),Z.debug(`Worker removed. Remaining workers: ${k.size}`)}function qt(){if(k.size>0){Z.info(`Terminating ${k.size} workers...`);for(let t of k)try{t.terminate()}catch(r){Z.error("Failed to terminate worker:",r)}k.clear()}}function Qr(){return k.size}Kr();var wn={add:Jr,remove:Yr,get size(){return Qr()},terminateAll:qt};var M=_({prefix:"createMachines"});async function Ht(){let t=await Fr(),{overwrite:r,directory:o,numberOfMachines:e,os:s,run:i,name:n,labels:a,runnerGroup:c}=t,{token:l,url:f}=t;if(!f)throw new Error("URL (-u) parameter is required");if(!l){let d=Vr(f),h=await j({message:`No token provided. Would you like to open GitHub to get a runner token?
43
- ${d}`});if(S(h)||!h)throw new Error("Token is required to create runners");M.info("Opening GitHub runner settings..."),await v`open ${d}`.quiet();let w=await P({message:"Enter the runner registration token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(T)=>{if(!T||T.trim().length===0)return"Token is required";return}});if(S(w))throw new Error("Token is required to create runners");l=w.trim()}if(M.info(`Creating ${e} runners in ${o}`),M.debug(`OS: ${s}, Name: ${n}, Labels: ${a||"none"}`),await Bun.file(o).exists())if(r)M.warn(`Directory ${o} exists, removing...`),await v`rm -rf ${o}`;else throw new Error(`Directory ${o} already exists`);let g=await Dr({directory:o,os:s});if(await no({directory:o,numberOfMachines:e,overwrite:r,runnerBase:g}),!i){M.info("Runners created but not started");return}to({directory:o,labels:a,name:n,numberOfMachines:e,runnerGroup:c,token:l,url:f})}function Vr(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners/new`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners/new`;return t}catch{return t}}async function Fr(){let{values:t}=Zr({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},labels:{short:"l",type:"string"},name:{default:"runner",short:"n",type:"string"},numberOfMachines:{default:"1",short:"m",type:"string"},os:{default:"osx",short:"s",type:"string"},overwrite:{default:!1,short:"f",type:"boolean"},profile:{short:"p",type:"string"},run:{default:!1,short:"r",type:"boolean"},runnerGroup:{short:"g",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,labels:t.labels,name:t.name,numberOfMachines:t.numberOfMachines,os:t.os,overwrite:t.overwrite,run:t.run,runnerGroup:t.runnerGroup,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,labels:e.labels??o.labels,name:e.name??o.name??"runner",numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",os:e.os??o.os??"osx",overwrite:e.overwrite??o.overwrite??!1,run:e.run??o.run??!1,runnerGroup:e.runnerGroup??o.runnerGroup,token:e.token,url:e.url??o.url};return{directory:e.directory,labels:e.labels,name:e.name,numberOfMachines:e.numberOfMachines,os:e.os,overwrite:e.overwrite,run:e.run,runnerGroup:e.runnerGroup,token:e.token,url:e.url}}async function Dr({directory:t,os:r}){let o=M.child("download");o.info(`Fetching latest runner version for ${r}...`);let e=await on(async()=>(await v`curl -Ls -o /dev/null -w "%{url_effective}" https://github.com/actions/runner/releases/latest`).text(),{onRetry:(l,f)=>{o.warn(`Retrying GitHub API call (attempt ${l}): ${f.message}`)}}),i=(await v`basename ${e}`).text().trim().replace("v",""),n=`actions-runner-${r}-x64-${i}.tar.gz`,a=`https://github.com/actions/runner/releases/download/v${i}/${n}`;if(o.debug(`Runner version: ${i}`),o.debug(`Download URL: ${a}`),await v`mkdir -p ${t}`,await v`mkdir -p ${t}/machines`,!await Bun.file(`${t}/${n}`).exists())o.info("Downloading runner image..."),await on(async()=>await v`curl -o ${t}/${n} -L ${a}`,{maxAttempts:5,onRetry:(l,f)=>{o.warn(`Retrying runner download (attempt ${l}): ${f.message}`)}}),o.info("Download complete");else o.info("Runner image already exists, skipping download");return n}async function no({overwrite:t,numberOfMachines:r,directory:o,runnerBase:e}){let s=M.child("extract"),i=Number(r),n=(()=>{try{let f=Bun.spawnSync(["nproc"]);return Number.parseInt(f.stdout.toString().trim(),10)||4}catch{try{let f=Bun.spawnSync(["sysctl","-n","hw.ncpu"]);return Number.parseInt(f.stdout.toString().trim(),10)||4}catch{return 4}}})(),a=Math.min(Math.max(2,Math.floor(n/2)),i,8);s.info(`Extracting ${i} runners with concurrency of ${a}`);let c=Array.from({length:i},(f,m)=>m+1).map((f)=>({execute:async()=>{let m=`${o}/machines/${f}`;if(await Bun.file(m).exists())if(t)s.debug(`Machine ${f} already exists, removing...`),await v`rm -rf ${m}`;else{s.debug(`Machine ${f} already exists, skipping...`);return}await v`mkdir -p ${m}`,await v`tar xzf ${e} -C ${m.replace(`${o}/`,"")}`.cwd(o);let d=`${an()}/src/runner`;await v`cp -R ${d}/hooks ${m}`,await v`cp -R ${d}/.runner-env ${m}/.runner-env`,s.debug(`Machine ${f} extracted successfully`)},runnerIndex:f})),l=[];for(let f=0;f<c.length;f+=a){let m=c.slice(f,f+a),g=await Promise.allSettled(m.map((d)=>d.execute()));for(let[d,h]of g.entries())if(h.status==="rejected")throw s.error(`Failed to extract runner ${m[d]?.runnerIndex}: ${h.reason}`),h.reason;l.push(...g)}s.info(`Successfully extracted ${i} runners`)}function to({directory:t,numberOfMachines:r,token:o,url:e,name:s,labels:i,runnerGroup:n}){M.info(`Starting ${r} runners...`);for(let a=1;a<=Number(r);a++){let c=`${an()}/src/runner-worker.ts`,l=`${s}-${a}`,f=new Worker(c,{name:l,ref:!0});f.addEventListener("open",()=>{M.info(`Worker ${l} started`),f.postMessage({index:a,labels:i,machineCwd:`${t}/machines/${a}`,name:s,runnerGroup:n,token:o,url:e})}),f.addEventListener("message",({data:m})=>{let g=m.type==="error"?"error":"info";M[g](`${l}: ${m.message}`)}),f.addEventListener("error",(m)=>{M.error(`Worker ${l} error:`,m)}),f.addEventListener("exit",(m)=>{M.info(`Worker ${l} exited with code ${m}`)}),wn.add(f)}M.info("All workers started. Press Ctrl+C to stop all machines")}var Lt={create:`
39
+ `);process.stdout.write(dn.cursor.move(-999,y.length-1)),process.stdout.write(dn.erase.down(y.length))},C=(y)=>y.replace(/\.+$/,""),A=(y)=>{let $=(performance.now()-y)/1000,T=Math.floor($/60),L=Math.floor($%60);return T>0?`[${T}m ${L}s]`:`[${L}s]`},b=(y="")=>{n=!0,s=mt(),a=C(y),l=performance.now(),process.stdout.write(`${u.default.gray(R)}
40
+ `);let $=0,T=0;d(),i=setInterval(()=>{if(e&&a===c)return;w(),c=a;let L=u.default.magenta(r[$]);if(e)process.stdout.write(`${L} ${a}...`);else if(t==="timer")process.stdout.write(`${L} ${a} ${A(l)}`);else{let K=".".repeat(Math.floor(T)).slice(0,3);process.stdout.write(`${L} ${a}${K}`)}$=$+1<r.length?$+1:0,T=T<r.length?T+0.125:0},o)},H=(y="",$=0)=>{n=!1,clearInterval(i),w();let T=$===0?u.default.green(Un):$===1?u.default.red(pt):u.default.red(ut);a=C(y??a),t==="timer"?process.stdout.write(`${T} ${a} ${A(l)}
41
+ `):process.stdout.write(`${T} ${a}
42
+ `),h(),s()};return{start:b,stop:H,message:(y="")=>{a=C(y??a)}}},xt=async(t,r)=>{let o={},e=Object.keys(t);for(let s of e){let i=t[s],n=await i({results:o})?.catch((a)=>{throw a});if(typeof r?.onCancel=="function"&&S(n)){o[s]="canceled",r.onCancel({results:o});continue}o[s]=n}return o};var vr=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||process.stdout.isTTY),Pr=["blue","cyan","gray","green","magenta","red","white","yellow"],Mr=["bold","dim","italic","underline","reset"],wt={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",reset:"\x1B[0m",underline:"\x1B[4m"},Gr={"\x1B[30m":"\x1B[90m","\x1B[31m":"\x1B[91m","\x1B[32m":"\x1B[92m","\x1B[33m":"\x1B[93m","\x1B[34m":"\x1B[94m","\x1B[35m":"\x1B[95m","\x1B[36m":"\x1B[96m","\x1B[37m":"\x1B[97m"};function Hn(t){return(r)=>vr?`${t}${r}${wt.reset}`:r}function $t({bright:t=!1,color:r}){let o=Bun.color(r,"ansi");if(!o)return"";return t?Gr[o]||o:o}var Xr=Pr.reduce((t,r)=>{return t[r]=Hn($t({color:r})),t[`${r}Bright`]=Hn($t({bright:!0,color:r})),t},{}),_r=Mr.reduce((t,r)=>{return t[r]=Hn(wt[r]),t},{}),p={...Xr,..._r};var _=({prefix:t="",level:r=process.env.DEBUG?0:1}={})=>{function o(...a){if(r<=0){let c=a.join(" ");console.log(bn({level:p.dim("DEBUG"),message:c,prefix:t}))}}function e(...a){if(r<=1){let c=a.join(" ");console.info(bn({level:p.cyan("INFO "),message:c,prefix:t}))}}function s(...a){if(r<=2){let c=a.join(" ");console.warn(bn({level:p.yellow("WARN "),message:c,prefix:t}))}}function i(...a){if(r<=3){let c=a.join(" ");console.error(bn({level:p.red("ERROR"),message:c,prefix:t}))}}function n(a){return _({level:r,prefix:`${t}:${a}`})}return{child:n,debug:o,error:i,info:e,warn:s}},Ln=_();function bn({prefix:t,level:r,message:o}){let e=new Date().toISOString().split("T")[1]?.split(".")[0]||"",s=t?`[${t}] `:"";return`${p.dim(e||"")} ${r} ${s}${o}`}var B=new Uint32Array(65536),Ar=(t,r)=>{let o=t.length,e=r.length,s=1<<o-1,i=-1,n=0,a=o,c=o;while(c--)B[t.charCodeAt(c)]|=1<<c;for(c=0;c<e;c++){let l=B[r.charCodeAt(c)],f=l|n;if(l|=(l&i)+i^i,n|=~(l|i),i&=l,n&s)a++;if(i&s)a--;n=n<<1|1,i=i<<1|~(f|n),n&=f}c=o;while(c--)B[t.charCodeAt(c)]=0;return a},Ur=(t,r)=>{let o=r.length,e=t.length,s=[],i=[],n=Math.ceil(o/32),a=Math.ceil(e/32);for(let h=0;h<n;h++)i[h]=-1,s[h]=0;let c=0;for(;c<a-1;c++){let h=0,w=-1,C=c*32,A=Math.min(32,e)+C;for(let b=C;b<A;b++)B[t.charCodeAt(b)]|=1<<b;for(let b=0;b<o;b++){let H=B[r.charCodeAt(b)],y=i[b/32|0]>>>b&1,$=s[b/32|0]>>>b&1,T=H|h,L=((H|$)&w)+w^w|H|$,K=h|~(L|w),fn=w&L;if(K>>>31^y)i[b/32|0]^=1<<b;if(fn>>>31^$)s[b/32|0]^=1<<b;K=K<<1|y,fn=fn<<1|$,w=fn|~(T|K),h=K&T}for(let b=C;b<A;b++)B[t.charCodeAt(b)]=0}let l=0,f=-1,m=c*32,g=Math.min(32,e-m)+m;for(let h=m;h<g;h++)B[t.charCodeAt(h)]|=1<<h;let d=e;for(let h=0;h<o;h++){let w=B[r.charCodeAt(h)],C=i[h/32|0]>>>h&1,A=s[h/32|0]>>>h&1,b=w|l,H=((w|A)&f)+f^f|w|A,y=l|~(H|f),$=f&H;if(d+=y>>>e-1&1,d-=$>>>e-1&1,y>>>31^C)i[h/32|0]^=1<<h;if($>>>31^A)s[h/32|0]^=1<<h;y=y<<1|C,$=$<<1|A,f=$|~(b|y),l=y&b}for(let h=m;h<g;h++)B[t.charCodeAt(h)]=0;return d},Et=(t,r)=>{if(t.length<r.length){let o=r;r=t,t=o}if(r.length===0)return t.length;if(t.length<=32)return Ar(t,r);return Ur(t,r)};function Rt(t,r,o=3){return r.map((i)=>({distance:Et(t.toLowerCase(),i.toLowerCase()),option:i})).filter(({distance:i})=>i<=Math.max(3,t.length/2)).sort((i,n)=>i.distance-n.distance).slice(0,o).map(({option:i})=>i)}function Ot(t,r){return r[t.toLowerCase()]||null}async function F(t,r={}){let{fallback:o,logLevel:e="warn",message:s="Operation failed gracefully"}=r;try{return await t()}catch(i){let n=i instanceof Error?i.message:String(i);if(console[e](`${s}: ${n}`),o)try{await o()}catch(a){console.error(`Fallback also failed: ${a instanceof Error?a.message:String(a)}`)}return}}var qr={backoffMultiplier:2,initialDelay:1000,maxAttempts:3,maxDelay:30000,onRetry:(t,r)=>{Ln.warn(`Retry attempt ${t}: ${r.message}`)},retryableErrors:["ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENOTFOUND","rate limit","429","503","502","504","npm ERR!","EPUBLISHCONFLICT"]};async function on(t,r={}){let o={...qr,...r},e=new Error("Operation failed");for(let s=1;s<=o.maxAttempts;s++)try{return await t()}catch(i){if(e=i instanceof Error?i:new Error(String(i)),!o.retryableErrors.some((c)=>e.message.toLowerCase().includes(c.toLowerCase()))||s===o.maxAttempts)throw e;o.onRetry(s,e);let a=Math.min(o.initialDelay*o.backoffMultiplier**(s-1),o.maxDelay);await new Promise((c)=>setTimeout(c,a))}throw e}var U=(t)=>{return t.map=(r)=>U((o)=>r(t(o))),t.or=(r)=>U((o)=>{try{return t(o)}catch(e){return r(o)}}),t},yn=()=>"bad banditype"();var St=(t)=>U((r)=>t.includes(r)?r:yn()),xn=(t)=>U((r)=>typeof r===typeof t?r:yn()),en=()=>xn(""),Ct=()=>xn(0),Tt=()=>xn(!0);var kt=()=>xn();var Nt=(t)=>U((r)=>r instanceof t?r:yn()),Bn=(t)=>Nt(Object).map((r)=>{let o={};for(let e in r){let s=t(r[e]);s!==void 0&&(o[e]=s)}return o}),D=(t)=>Nt(Object).map((r)=>{let o={};for(let e in t){let s=t[e](r[e]);s!==void 0&&(o[e]=s)}return o});function Hr(t,r){return U((o)=>{try{return t(o)}catch{try{return r(o)}catch{throw new Error("No matching schema in union")}}})}function J(t,r){return(o)=>{if(o===void 0)return r;return t(o)}}function vt(){return U((t)=>{let r=Ct()(t);if(!Number.isInteger(r)||r<=0)throw new Error("Must be a positive integer");return r})}function Pt(){return U((t)=>{let r=en()(t);try{return new URL(r),r}catch{throw new Error("Must be a valid URL")}})}function Mt(t,r){return U((o)=>{let e=en()(o);if(!t.test(e))throw new Error(r||`Must match pattern ${t}`);return e})}function sn(t){return{parse(r){try{return t(r)}catch(o){throw new Error(o instanceof Error?o.message:"Validation failed")}},safeParse(r){try{return{data:t(r),success:!0}}catch(o){return{error:o instanceof Error?o:new Error("Validation failed"),success:!1}}},validator:t}}function Y(){return Hr(kt(),en())}function Q(t){return J(en(),t)}function nn(t){return J(Tt(),t)}function $n(t,r){return J(St(t),r)}import{parseArgs as Vr}from"util";var{$:M}=globalThis.Bun;import{join as At}from"path";var{$:_t}=globalThis.Bun;import{tmpdir as Lr}from"os";var Gt={MACHINES_DIR:"machines",TEMP_DIR:Lr()};var Br=D({directory:Q("./gh-runners"),labels:Y(),name:Q("runner"),numberOfMachines:J(vt(),1),os:$n(["osx","linux","windows"],"osx"),overwrite:nn(!1),run:nn(!1),runnerGroup:Y(),url:Y()}),Ir=sn(Br),Xt=sn(D({defaultProfile:Y(),profiles:Bn(Ir.validator)}));var jr=["hydra.json",".hydra.json","hydra.toml",".hydra.toml"];async function Wr(t=process.cwd()){for(let r of jr){let o=At(t,r);if(await Bun.file(o).exists())return o}return null}async function W(t){let r=t?.configPath||await Wr();if(!r)return null;let o=Bun.file(r);if(!await o.exists())return null;try{let e=await o.text(),s=r.endsWith(".toml")?await zr(e):JSON.parse(e);return Xt.parse(s)}catch(e){if(e instanceof Error)throw new Error(`Invalid config file: ${e.message}`);throw e}}async function z(t,r){if(!t)return null;let o=r||t.defaultProfile;if(!o)return null;return t.profiles[o]||null}async function zr(t){let r=At(Gt.TEMP_DIR,`hydra-config-${Date.now()}.toml`);await Bun.write(r,t);try{let o=await import(r);return await _t`rm -f ${r}`.quiet(),o.default}catch(o){throw await _t`rm -f ${r}`.quiet(),new Error(`Failed to parse TOML configuration: ${o}`)}}function an(){let t=import.meta.path,r=t.substring(0,t.lastIndexOf("/"));return r.substring(0,r.lastIndexOf("/"))}var Kr=D({directory:Q(`${process.cwd()}/gh-runners`),labels:Y(),name:Q("runner"),numberOfMachines:J(Mt(/^\d+$/,"Number of machines must be a positive integer"),"1"),os:$n(["osx","linux","windows"],"osx"),overwrite:nn(!1),run:nn(!1),token:Q(process.env.GITHUB_PERSONAL_ACCESS_TOKEN??""),url:Pt()}),Ie=sn(Kr);var Z=_({prefix:"WorkerManager"}),v=new Set,Ut=!1;function Jr(){if(Ut)return;Ut=!0;let t=()=>{if(v.size>0)Z.info("Cleaning up workers...");qt()};process.on("exit",t),process.on("SIGINT",t),process.on("SIGTERM",t),process.on("uncaughtException",(r)=>{Z.error("Uncaught exception:",r),t(),process.exit(1)})}function Yr(t){v.add(t),Z.debug(`Worker added. Total workers: ${v.size}`),t.addEventListener("exit",()=>{v.delete(t),Z.debug(`Worker exited. Remaining workers: ${v.size}`)})}function Qr(t){if(v.has(t))t.terminate(),v.delete(t),Z.debug(`Worker removed. Remaining workers: ${v.size}`)}function qt(){if(v.size>0){Z.info(`Terminating ${v.size} workers...`);for(let t of v)try{t.terminate()}catch(r){Z.error("Failed to terminate worker:",r)}v.clear()}}function Zr(){return v.size}Jr();var wn={add:Yr,remove:Qr,get size(){return Zr()},terminateAll:qt};var P=_({prefix:"createMachines"});async function Ht(){let t=await Dr(),{overwrite:r,directory:o,numberOfMachines:e,os:s,run:i,name:n,labels:a,runnerGroup:c}=t,{token:l,url:f}=t;if(!f)throw new Error("URL (-u) parameter is required");if(!l){let d=Fr(f),h=await j({message:`No token provided. Would you like to open GitHub to get a runner token?
43
+ ${d}`});if(S(h)||!h)throw new Error("Token is required to create runners");P.info("Opening GitHub runner settings..."),await M`open ${d}`.quiet();let w=await N({message:"Enter the runner registration token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(C)=>{if(!C||C.trim().length===0)return"Token is required";return}});if(S(w))throw new Error("Token is required to create runners");l=w.trim()}if(P.info(`Creating ${e} runners in ${o}`),P.debug(`OS: ${s}, Name: ${n}, Labels: ${a||"none"}`),await Bun.file(o).exists())if(r)P.warn(`Directory ${o} exists, removing...`),await M`rm -rf ${o}`;else throw new Error(`Directory ${o} already exists`);let g=await no({directory:o,os:s});if(await to({directory:o,numberOfMachines:e,overwrite:r,runnerBase:g}),!i){P.info("Runners created but not started");return}ro({directory:o,labels:a,name:n,numberOfMachines:e,runnerGroup:c,token:l,url:f})}function Fr(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners/new`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners/new`;return t}catch{return t}}async function Dr(){let{values:t}=Vr({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},labels:{short:"l",type:"string"},name:{default:"runner",short:"n",type:"string"},numberOfMachines:{default:"1",short:"m",type:"string"},os:{default:"osx",short:"s",type:"string"},overwrite:{default:!1,short:"f",type:"boolean"},profile:{short:"p",type:"string"},run:{default:!1,short:"r",type:"boolean"},runnerGroup:{short:"g",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,labels:t.labels,name:t.name,numberOfMachines:t.numberOfMachines,os:t.os,overwrite:t.overwrite,run:t.run,runnerGroup:t.runnerGroup,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,labels:e.labels??o.labels,name:e.name??o.name??"runner",numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",os:e.os??o.os??"osx",overwrite:e.overwrite??o.overwrite??!1,run:e.run??o.run??!1,runnerGroup:e.runnerGroup??o.runnerGroup,token:e.token,url:e.url??o.url};return{directory:e.directory,labels:e.labels,name:e.name,numberOfMachines:e.numberOfMachines,os:e.os,overwrite:e.overwrite,run:e.run,runnerGroup:e.runnerGroup,token:e.token,url:e.url}}async function no({directory:t,os:r}){let o=P.child("download");o.info(`Fetching latest runner version for ${r}...`);let e=await on(async()=>(await M`curl -Ls -o /dev/null -w "%{url_effective}" https://github.com/actions/runner/releases/latest`).text(),{onRetry:(l,f)=>{o.warn(`Retrying GitHub API call (attempt ${l}): ${f.message}`)}}),i=(await M`basename ${e}`).text().trim().replace("v",""),n=`actions-runner-${r}-x64-${i}.tar.gz`,a=`https://github.com/actions/runner/releases/download/v${i}/${n}`;if(o.debug(`Runner version: ${i}`),o.debug(`Download URL: ${a}`),await M`mkdir -p ${t}`,await M`mkdir -p ${t}/machines`,!await Bun.file(`${t}/${n}`).exists())o.info("Downloading runner image..."),await on(async()=>await M`curl -o ${t}/${n} -L ${a}`,{maxAttempts:5,onRetry:(l,f)=>{o.warn(`Retrying runner download (attempt ${l}): ${f.message}`)}}),o.info("Download complete");else o.info("Runner image already exists, skipping download");return n}async function to({overwrite:t,numberOfMachines:r,directory:o,runnerBase:e}){let s=P.child("extract"),i=Number(r),n=(()=>{try{let f=Bun.spawnSync(["nproc"]);return Number.parseInt(f.stdout.toString().trim(),10)||4}catch{try{let f=Bun.spawnSync(["sysctl","-n","hw.ncpu"]);return Number.parseInt(f.stdout.toString().trim(),10)||4}catch{return 4}}})(),a=Math.min(Math.max(2,Math.floor(n/2)),i,8);s.info(`Extracting ${i} runners with concurrency of ${a}`);let c=Array.from({length:i},(f,m)=>m+1).map((f)=>({execute:async()=>{let m=`${o}/machines/${f}`;if(await Bun.file(m).exists())if(t)s.debug(`Machine ${f} already exists, removing...`),await M`rm -rf ${m}`;else{s.debug(`Machine ${f} already exists, skipping...`);return}await M`mkdir -p ${m}`,await M`tar xzf ${e} -C ${m.replace(`${o}/`,"")}`.cwd(o);let d=`${an()}/src/runner`;await M`cp -R ${d}/hooks ${m}`,await M`cp -R ${d}/.runner-env ${m}/.runner-env`,s.debug(`Machine ${f} extracted successfully`)},runnerIndex:f})),l=[];for(let f=0;f<c.length;f+=a){let m=c.slice(f,f+a),g=await Promise.allSettled(m.map((d)=>d.execute()));for(let[d,h]of g.entries())if(h.status==="rejected")throw s.error(`Failed to extract runner ${m[d]?.runnerIndex}: ${h.reason}`),h.reason;l.push(...g)}s.info(`Successfully extracted ${i} runners`)}function ro({directory:t,numberOfMachines:r,token:o,url:e,name:s,labels:i,runnerGroup:n}){P.info(`Starting ${r} runners...`);for(let a=1;a<=Number(r);a++){let c=`${an()}/src/runner-worker.ts`,l=`${s}-${a}`,f=new Worker(c,{name:l,ref:!0});f.addEventListener("open",()=>{P.info(`Worker ${l} started`),f.postMessage({index:a,labels:i,machineCwd:`${t}/machines/${a}`,name:s,runnerGroup:n,token:o,url:e})}),f.addEventListener("message",({data:m})=>{let g=m.type==="error"?"error":"info";P[g](`${l}: ${m.message}`)}),f.addEventListener("error",(m)=>{P.error(`Worker ${l} error:`,m)}),f.addEventListener("exit",(m)=>{P.info(`Worker ${l} exited with code ${m}`)}),wn.add(f)}P.info("All workers started. Press Ctrl+C to stop all machines")}var Lt="0.3.4";var Bt={create:`
44
44
  hydra create - Create and register new GitHub runner machines
45
45
 
46
46
  USAGE
@@ -151,10 +151,10 @@ EXAMPLES
151
151
 
152
152
  # Status using profile
153
153
  hydra status -p production
154
- `};function cn(t){if(t&&Lt[t]){let o=Lt[t].split(`
154
+ `};function cn(t){if(t&&Bt[t]){let o=Bt[t].split(`
155
155
  `).map((e)=>{if(e.startsWith("hydra"))return p.bold(e);if(e==="USAGE"||e==="OPTIONS"||e==="EXAMPLES")return p.bold(e);if(e.startsWith(" -")){let s=e.match(/^(\s+-\w,\s--\w+)\s+(.+)$/);if(s){let[,i="",n=""]=s,a=n.replace("(required)",p.red("(required)")).replace(/\(default: ([^)]+)\)/g,(c,l)=>p.dim(`(default: ${l})`)).replace(/\[boolean\]/g,p.cyan("[boolean]")).replace(/\[string\]/g,p.green("[string]")).replace(/\[number\]/g,p.magenta("[number]"));return` ${p.yellow(i.padEnd(26))} ${a}`}}if(e.startsWith(" # "))return p.dim(e);if(e.startsWith(" hydra"))return` ${p.cyan(e.trim())}`;return e}).join(`
156
156
  `);console.info(o);return}console.info(`
157
- ${p.bold("Hydra - GitHub self-hosted runner manager")}
157
+ ${p.bold(`Hydra@${Lt} - GitHub self-hosted runner manager`)}
158
158
 
159
159
  ${p.bold("USAGE")}
160
160
  hydra <command> [options]
@@ -168,17 +168,17 @@ ${p.bold("COMMANDS")}
168
168
  ${p.green("help")} Show this help message
169
169
 
170
170
  Use ${p.cyan("hydra <command> --help")} for more information about a command.
171
- `)}import{resolve as ro}from"path";import{parseArgs as oo}from"util";var{$:In}=globalThis.Bun;async function Bt(){let{toml:t}=so(),r=t?"hydra.toml":"hydra.json",o=ro(process.cwd(),r);if(await Bun.file(o).exists()){let m=await j({initialValue:!1,message:`Configuration file ${r} already exists. Overwrite?`});if(S(m)||!m)qn("Configuration cancelled"),process.exit(0)}dt(p.cyan("\uD83D\uDE80 Hydra Configuration Setup")),console.info(p.dim("This will create a configuration file with your runner settings.")),console.info(p.dim(`You can always edit the file later or create additional profiles.
172
- `));let s=await xt({profileName:()=>P({message:"Profile name?",placeholder:"default"}),directory:()=>P({defaultValue:"./gh-runners",message:"Directory to store runners?",placeholder:"./gh-runners"}),name:()=>P({defaultValue:"runner",message:"Runner name prefix?",placeholder:"runner"}),labels:({results:m})=>{let g=m.name||"runner";return P({defaultValue:g,message:"Runner labels (comma-separated)?",placeholder:g})},numberOfMachines:()=>P({defaultValue:"1",message:"Number of runner machines?",placeholder:"1",validate:(m)=>{let g=Number.parseInt(m,10);if(Number.isNaN(g)||g<1)return"Please enter a valid number greater than 0";return}}),url:()=>P({message:"GitHub repository or organization URL? (optional)",placeholder:"https://github.com/org/repo"})},{onCancel:()=>{qn("Configuration cancelled"),process.exit(0)}}),{profileName:i,labels:n,numberOfMachines:a,...c}=s,l={defaultProfile:i,profiles:{[i]:{...c,labels:n,numberOfMachines:Number.parseInt(a,10),os:"osx",overwrite:!1,run:!1}}},f=JSON.stringify(l,null,2);if(await Bun.write(o,f),await F(async()=>{await In`chmod 600 ${o}`.quiet()},{logLevel:"warn",message:"Could not set secure file permissions"}),bt(p.green(`\u2713 Configuration saved to ${r}`)),console.info(`
171
+ `)}import{resolve as eo}from"path";import{parseArgs as so}from"util";var{$:In}=globalThis.Bun;async function It(){let{toml:t}=ao(),r=t?"hydra.toml":"hydra.json",o=eo(process.cwd(),r);if(await Bun.file(o).exists()){let m=await j({initialValue:!1,message:`Configuration file ${r} already exists. Overwrite?`});if(S(m)||!m)qn("Configuration cancelled"),process.exit(0)}dt(p.cyan("\uD83D\uDE80 Hydra Configuration Setup")),console.info(p.dim("This will create a configuration file with your runner settings.")),console.info(p.dim(`You can always edit the file later or create additional profiles.
172
+ `));let s=await xt({profileName:()=>N({message:"Profile name?",placeholder:"default"}),directory:()=>N({defaultValue:"./gh-runners",message:"Directory to store runners?",placeholder:"./gh-runners"}),name:()=>N({defaultValue:"runner",message:"Runner name prefix?",placeholder:"runner"}),labels:({results:m})=>{let g=m.name||"runner";return N({defaultValue:g,message:"Runner labels (comma-separated)?",placeholder:g})},numberOfMachines:()=>N({defaultValue:"1",message:"Number of runner machines?",placeholder:"1",validate:(m)=>{let g=Number.parseInt(m,10);if(Number.isNaN(g)||g<1)return"Please enter a valid number greater than 0";return}}),url:()=>N({message:"GitHub repository or organization URL? (optional)",placeholder:"https://github.com/org/repo"})},{onCancel:()=>{qn("Configuration cancelled"),process.exit(0)}}),{profileName:i,labels:n,numberOfMachines:a,...c}=s,l={defaultProfile:i,profiles:{[i]:{...c,labels:n,numberOfMachines:Number.parseInt(a,10),os:"osx",overwrite:!1,run:!1}}},f=JSON.stringify(l,null,2);if(await Bun.write(o,f),await F(async()=>{await In`chmod 600 ${o}`.quiet()},{logLevel:"warn",message:"Could not set secure file permissions"}),bt(p.green(`\u2713 Configuration saved to ${r}`)),console.info(`
173
173
  Example usage:`),console.info(p.cyan(` hydra create -p ${i} --token YOUR_TOKEN${s.url?"":" --url REPO_URL"}`)),console.info(`
174
- You can add more profiles by editing the configuration file.`),s.url)await eo(s.url)}async function eo(t){let r=/github\.com[:/]([^/]+)(?:\/([^/.]+))?/,o=t.match(r);if(!o)return;let[,e,s]=o,n=`https://github.com/${s?`${e}/${s}`:`organizations/${e}`}/settings/actions/runners`;console.info(`
174
+ You can add more profiles by editing the configuration file.`),s.url)await io(s.url)}async function io(t){let r=/github\.com[:/]([^/]+)(?:\/([^/.]+))?/,o=t.match(r);if(!o)return;let[,e,s]=o,n=`https://github.com/${s?`${e}/${s}`:`organizations/${e}`}/settings/actions/runners`;console.info(`
175
175
  Opening GitHub settings: ${p.cyan(n)}`),await F(async()=>{await In`open ${n}`.quiet()},{fallback:async()=>{await F(async()=>{await In`xdg-open ${n}`.quiet()},{fallback:()=>{console.info(`
176
- Please open the URL manually to add a new runner token.`)},logLevel:"info",message:"Alternative browser open method also failed"})},logLevel:"info",message:"Could not open browser automatically"})}function so(){let{values:t}=oo({allowPositionals:!0,args:Bun.argv,options:{toml:{default:!1,short:"t",type:"boolean"}},strict:!0});return t}import{parseArgs as io}from"util";var{$:V}=globalThis.Bun;var jn=_({prefix:"removeMachines"});async function It(){let t=await ao(),{directory:r,numberOfMachines:o,force:e}=t,{token:s,url:i}=t,n=`${r}/machines`;if(!await Bun.file(n).exists())throw new Error(`Machines directory not found at ${n}. Nothing to remove.`);if(!s&&!e){if(!i)throw console.warn(p.yellow("\u26A0\uFE0F No token or URL provided. Runners will not be unregistered from GitHub.")),console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token (-t) and URL (-u) parameters are required or use --force");let c=mo(i),l=await j({message:`No token provided. Would you like to open GitHub to get a runner token for unregistration?
177
- ${c}`});if(S(l)||!l)throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");jn.info("Opening GitHub runner settings..."),await V`open ${c}`.quiet();let f=await P({message:"Enter the runner removal token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(m)=>{if(!m||m.trim().length===0)return"Token is required";return}});if(S(f))throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");s=f.trim()}if(s&&i)console.info(p.cyan("Unregistering runners from GitHub...")),await co({directory:r,numberOfMachines:o,token:s});else if(!e)throw console.warn(p.yellow("\u26A0\uFE0F No token or URL provided. Runners will not be unregistered from GitHub.")),console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token (-t) and URL (-u) parameters are required or use --force");await fo({directory:r,numberOfMachines:o}),console.info(p.green("\u2713 Runners successfully removed"))}async function ao(){let{values:t}=io({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},force:{default:!1,short:"f",type:"boolean"},numberOfMachines:{default:"1",short:"m",type:"string"},profile:{short:"p",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,force:t.force,numberOfMachines:t.numberOfMachines,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,force:e.force,numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",token:e.token,url:e.url??o.url};return e}async function co({directory:t,numberOfMachines:r,token:o}){let e=jn.child("unregister"),s=Number(r),i=(()=>{try{let g=Bun.spawnSync(["nproc"]);return Number.parseInt(g.stdout.toString().trim(),10)||4}catch{try{let g=Bun.spawnSync(["sysctl","-n","hw.ncpu"]);return Number.parseInt(g.stdout.toString().trim(),10)||4}catch{return 4}}})(),n=Math.min(Math.max(2,Math.floor(i/2)),s,8);e.info(`Unregistering ${s} runners with concurrency of ${n}`);let a=Array.from({length:s},(g,d)=>d+1).map((g)=>({execute:async()=>{let d=`${t}/machines/${g}`;if(!await Bun.file(d).exists())return e.debug(`Machine ${g} doesn't exist, skipping...`),{runnerIndex:g,status:"skipped"};try{return e.debug(`Unregistering machine ${g}...`),await V`${d}/config.sh remove --token ${o}`.quiet(),e.info(`Successfully unregistered machine ${g} from GitHub`),{runnerIndex:g,status:"success"}}catch(w){return e.warn(`Unable to unregister machine ${g}: ${w}`),{error:w,runnerIndex:g,status:"failed"}}},runnerIndex:g})),c=[];for(let g=0;g<a.length;g+=n){let d=a.slice(g,g+n),h=await Promise.allSettled(d.map((w)=>w.execute()));c.push(...h)}let l=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="success").length,f=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="failed").length,m=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="skipped").length;e.info(`Unregistration complete: ${l} successful, ${f} failed, ${m} skipped`)}async function fo({directory:t,numberOfMachines:r}){let o=jn.child("removeDirectories"),e=Number(r),s=Array.from({length:e},(c,l)=>l+1).map((c)=>({execute:async()=>{let l=`${t}/machines/${c}`;if(!await Bun.file(l).exists())return{runnerIndex:c,status:"skipped"};try{return await V`rm -rf ${l}`.quiet(),o.debug(`Removed machine ${c} directory`),{runnerIndex:c,status:"success"}}catch(m){return o.error(`Error removing machine ${c} directory: ${m}`),{error:m,runnerIndex:c,status:"failed"}}},runnerIndex:c})),i=await Promise.allSettled(s.map((c)=>c.execute())),n=i.filter((c)=>c.status==="fulfilled"&&c.value?.status==="success").length,a=i.filter((c)=>c.status==="fulfilled"&&c.value?.status==="failed").length;if(o.info(`Directory removal complete: ${n} removed, ${a} failed`),a>0)throw new Error(`Failed to remove ${a} runner directories`);try{let c=`${t}/machines`;if(!(await V`ls -A ${c}`.text()).trim()){if(await V`rm -rf ${c}`.quiet(),!(await V`ls -A ${t}`.text()).trim())await V`rm -rf ${t}`.quiet();console.info(p.green("\u2713 Removed empty directories"))}}catch(c){}}function mo(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners`;return t}catch{return t}}import{parseArgs as lo}from"util";var{$:go}=globalThis.Bun;var q=_({prefix:"runMachines"});async function jt(){let t=await po(),{directory:r,numberOfMachines:o,name:e,labels:s,runnerGroup:i}=t,{token:n,url:a}=t;if(!a)throw new Error("URL (-u) parameter is required");if(!n){let l=ho(a),f=await j({message:`No token provided. Would you like to open GitHub to get a runner token?
178
- ${l}`});if(S(f)||!f)throw new Error("Token is required to run machines");q.info("Opening GitHub runner settings..."),await go`open ${l}`.quiet();let m=await P({message:"Enter the runner registration token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(g)=>{if(!g||g.trim().length===0)return"Token is required";return}});if(S(m))throw new Error("Token is required to run machines");n=m.trim()}if(q.info(`Starting ${o} runners from ${r}`),q.debug(`Name: ${e}, Labels: ${s||"none"}`),!await Bun.file(`${r}/machines`).exists())throw new Error(`Machines directory not found at ${r}/machines. Run 'hydra create' first.`);await uo({directory:r,labels:s,name:e,numberOfMachines:o,runnerGroup:i,token:n,url:a})}async function po(){let{values:t}=lo({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},labels:{short:"l",type:"string"},name:{default:"runner",short:"n",type:"string"},numberOfMachines:{default:"1",short:"m",type:"string"},profile:{short:"p",type:"string"},runnerGroup:{short:"g",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,labels:t.labels,name:t.name,numberOfMachines:t.numberOfMachines,runnerGroup:t.runnerGroup,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,labels:e.labels??o.labels,name:e.name??o.name??"runner",numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",runnerGroup:e.runnerGroup??o.runnerGroup,token:e.token,url:e.url??o.url};return e}async function uo({directory:t,numberOfMachines:r,token:o,url:e,name:s,labels:i,runnerGroup:n}){q.info(`Starting ${r} workers...`);for(let a=1;a<=Number(r);a++){let c=`${t}/machines/${a}`;if(!await Bun.file(c).exists()){q.warn(`Machine ${a} doesn't exist, skipping...`);continue}let f=`${an()}/src/runner-worker.ts`,m=`${s}-${a}`,g=new Worker(f,{name:m,ref:!0});g.addEventListener("message",({data:d})=>{let h=d.type==="error"?"error":"info";q[h](`${m}: ${d.message}`)}),g.addEventListener("error",(d)=>{q.error(`Worker ${m} error:`,d)}),g.addEventListener("exit",(d)=>{q.info(`Worker ${m} exited with code ${d}`)}),g.postMessage({index:a,labels:i,machineCwd:c,name:s,runnerGroup:n,token:o,url:e}),q.info(`Worker ${m} starting...`),wn.add(g)}q.info("All workers started. Press Ctrl+C to stop all machines")}function ho(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners/new`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners/new`;return t}catch{return t}}import{parseArgs as bo}from"util";var{$:yo}=globalThis.Bun;async function Wt(){let t=await xo(),{directory:r,token:o,url:e,json:s}=t;if(!o||!e)throw new Error("Token (-t) and URL (-u) parameters are required");let i=yt();i.start("Fetching runner status...");try{let n=await $o(r),a=await wo(e,o),c=Eo(n,a);if(i.stop("Runner status fetched"),s)console.log(JSON.stringify(c,null,2));else Ro(c)}catch(n){throw i.stop("Failed to fetch runner status"),n}}async function xo(){let{values:t}=bo({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},json:{default:!1,short:"j",type:"boolean"},profile:{short:"p",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile);return{directory:t.directory||o?.directory||`${process.cwd()}/gh-runners`,json:t.json,token:t.token,url:t.url||o?.url}}async function $o(t){let r=`${t}/machines`;return await F(async()=>{return(await yo`ls ${r} 2>/dev/null || true`.quiet()).stdout.toString().trim().split(`
179
- `).filter(Boolean)},{fallback:()=>{},logLevel:"debug",message:"No local runners found"})||[]}async function wo(t,r){let o=t.match(/github\.com[:/]([^/]+)(?:\/([^/.]+))?/);if(!o)throw new Error("Invalid GitHub URL");let[,e,s]=o,i=s?`https://api.github.com/repos/${e}/${s}/actions/runners`:`https://api.github.com/orgs/${e}/actions/runners`;return on(async()=>{let n={Accept:"application/vnd.github.v3+json",Authorization:`Bearer ${r}`},a=await fetch(i,{headers:n});if(!a.ok)throw new Error(`GitHub API error: ${a.status} ${a.statusText}`);return await a.json()},{onRetry:(n,a)=>{X.warn(`Retrying GitHub API call (attempt ${n}): ${a.message}`)}})}function Eo(t,r){let o=[],e=new Map(r.runners.map((s)=>[s.name,s]));for(let s of t){let i=`runner-${s}`,n=e.get(i);if(n)o.push({busy:n.busy,labels:n.labels.map((a)=>a.name),name:i,os:n.os,status:n.busy?"busy":n.status==="online"?"online":"offline"});else o.push({busy:!1,labels:[],name:i,os:"unknown",status:"offline"})}return o}function Ro(t){if(t.length===0){X.info("No runners found");return}console.log(`
176
+ Please open the URL manually to add a new runner token.`)},logLevel:"info",message:"Alternative browser open method also failed"})},logLevel:"info",message:"Could not open browser automatically"})}function ao(){let{values:t}=so({allowPositionals:!0,args:Bun.argv,options:{toml:{default:!1,short:"t",type:"boolean"}},strict:!0});return t}import{parseArgs as co}from"util";var{$:V}=globalThis.Bun;var jn=_({prefix:"removeMachines"});async function jt(){let t=await fo(),{directory:r,numberOfMachines:o,force:e}=t,{token:s,url:i}=t,n=`${r}/machines`;if(!await Bun.file(n).exists())throw new Error(`Machines directory not found at ${n}. Nothing to remove.`);if(!s&&!e){if(!i)throw console.warn(p.yellow("\u26A0\uFE0F No token or URL provided. Runners will not be unregistered from GitHub.")),console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token (-t) and URL (-u) parameters are required or use --force");let c=go(i),l=await j({message:`No token provided. Would you like to open GitHub to get a runner token for unregistration?
177
+ ${c}`});if(S(l)||!l)throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");jn.info("Opening GitHub runner settings..."),await V`open ${c}`.quiet();let f=await N({message:"Enter the runner removal token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(m)=>{if(!m||m.trim().length===0)return"Token is required";return}});if(S(f))throw console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token is required to unregister runners (or use --force)");s=f.trim()}if(s&&i)console.info(p.cyan("Unregistering runners from GitHub...")),await mo({directory:r,numberOfMachines:o,token:s});else if(!e)throw console.warn(p.yellow("\u26A0\uFE0F No token or URL provided. Runners will not be unregistered from GitHub.")),console.warn(p.yellow("Use --force to remove runners without unregistering them.")),new Error("Token (-t) and URL (-u) parameters are required or use --force");await lo({directory:r,numberOfMachines:o}),console.info(p.green("\u2713 Runners successfully removed"))}async function fo(){let{values:t}=co({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},force:{default:!1,short:"f",type:"boolean"},numberOfMachines:{default:"1",short:"m",type:"string"},profile:{short:"p",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,force:t.force,numberOfMachines:t.numberOfMachines,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,force:e.force,numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",token:e.token,url:e.url??o.url};return e}async function mo({directory:t,numberOfMachines:r,token:o}){let e=jn.child("unregister"),s=Number(r),i=(()=>{try{let g=Bun.spawnSync(["nproc"]);return Number.parseInt(g.stdout.toString().trim(),10)||4}catch{try{let g=Bun.spawnSync(["sysctl","-n","hw.ncpu"]);return Number.parseInt(g.stdout.toString().trim(),10)||4}catch{return 4}}})(),n=Math.min(Math.max(2,Math.floor(i/2)),s,8);e.info(`Unregistering ${s} runners with concurrency of ${n}`);let a=Array.from({length:s},(g,d)=>d+1).map((g)=>({execute:async()=>{let d=`${t}/machines/${g}`;if(!await Bun.file(d).exists())return e.debug(`Machine ${g} doesn't exist, skipping...`),{runnerIndex:g,status:"skipped"};try{return e.debug(`Unregistering machine ${g}...`),await V`${d}/config.sh remove --token ${o}`.quiet(),e.info(`Successfully unregistered machine ${g} from GitHub`),{runnerIndex:g,status:"success"}}catch(w){return e.warn(`Unable to unregister machine ${g}: ${w}`),{error:w,runnerIndex:g,status:"failed"}}},runnerIndex:g})),c=[];for(let g=0;g<a.length;g+=n){let d=a.slice(g,g+n),h=await Promise.allSettled(d.map((w)=>w.execute()));c.push(...h)}let l=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="success").length,f=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="failed").length,m=c.filter((g)=>g.status==="fulfilled"&&g.value?.status==="skipped").length;e.info(`Unregistration complete: ${l} successful, ${f} failed, ${m} skipped`)}async function lo({directory:t,numberOfMachines:r}){let o=jn.child("removeDirectories"),e=Number(r),s=Array.from({length:e},(c,l)=>l+1).map((c)=>({execute:async()=>{let l=`${t}/machines/${c}`;if(!await Bun.file(l).exists())return{runnerIndex:c,status:"skipped"};try{return await V`rm -rf ${l}`.quiet(),o.debug(`Removed machine ${c} directory`),{runnerIndex:c,status:"success"}}catch(m){return o.error(`Error removing machine ${c} directory: ${m}`),{error:m,runnerIndex:c,status:"failed"}}},runnerIndex:c})),i=await Promise.allSettled(s.map((c)=>c.execute())),n=i.filter((c)=>c.status==="fulfilled"&&c.value?.status==="success").length,a=i.filter((c)=>c.status==="fulfilled"&&c.value?.status==="failed").length;if(o.info(`Directory removal complete: ${n} removed, ${a} failed`),a>0)throw new Error(`Failed to remove ${a} runner directories`);try{let c=`${t}/machines`;if(!(await V`ls -A ${c}`.text()).trim()){if(await V`rm -rf ${c}`.quiet(),!(await V`ls -A ${t}`.text()).trim())await V`rm -rf ${t}`.quiet();console.info(p.green("\u2713 Removed empty directories"))}}catch(c){}}function go(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners`;return t}catch{return t}}import{parseArgs as po}from"util";var{$:uo}=globalThis.Bun;var q=_({prefix:"runMachines"});async function Wt(){let t=await ho(),{directory:r,numberOfMachines:o,name:e,labels:s,runnerGroup:i}=t,{token:n,url:a}=t;if(!a)throw new Error("URL (-u) parameter is required");if(!n){let l=yo(a),f=await j({message:`No token provided. Would you like to open GitHub to get a runner token?
178
+ ${l}`});if(S(f)||!f)throw new Error("Token is required to run machines");q.info("Opening GitHub runner settings..."),await uo`open ${l}`.quiet();let m=await N({message:"Enter the runner registration token:",placeholder:"AXXXXXXXXXXXXXXXXXXXXXXXXX",validate:(g)=>{if(!g||g.trim().length===0)return"Token is required";return}});if(S(m))throw new Error("Token is required to run machines");n=m.trim()}if(q.info(`Starting ${o} runners from ${r}`),q.debug(`Name: ${e}, Labels: ${s||"none"}`),!await Bun.file(`${r}/machines`).exists())throw new Error(`Machines directory not found at ${r}/machines. Run 'hydra create' first.`);await bo({directory:r,labels:s,name:e,numberOfMachines:o,runnerGroup:i,token:n,url:a})}async function ho(){let{values:t}=po({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},labels:{short:"l",type:"string"},name:{default:"runner",short:"n",type:"string"},numberOfMachines:{default:"1",short:"m",type:"string"},profile:{short:"p",type:"string"},runnerGroup:{short:"g",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile),e={directory:t.directory,labels:t.labels,name:t.name,numberOfMachines:t.numberOfMachines,runnerGroup:t.runnerGroup,token:t.token,url:t.url};if(o)return{directory:e.directory??o.directory??`${process.cwd()}/gh-runners`,labels:e.labels??o.labels,name:e.name??o.name??"runner",numberOfMachines:e.numberOfMachines??String(o.numberOfMachines)??"1",runnerGroup:e.runnerGroup??o.runnerGroup,token:e.token,url:e.url??o.url};return e}async function bo({directory:t,numberOfMachines:r,token:o,url:e,name:s,labels:i,runnerGroup:n}){q.info(`Starting ${r} workers...`);for(let a=1;a<=Number(r);a++){let c=`${t}/machines/${a}`;if(!await Bun.file(c).exists()){q.warn(`Machine ${a} doesn't exist, skipping...`);continue}let f=`${an()}/src/runner-worker.ts`,m=`${s}-${a}`,g=new Worker(f,{name:m,ref:!0});g.addEventListener("message",({data:d})=>{let h=d.type==="error"?"error":"info";q[h](`${m}: ${d.message}`)}),g.addEventListener("error",(d)=>{q.error(`Worker ${m} error:`,d)}),g.addEventListener("exit",(d)=>{q.info(`Worker ${m} exited with code ${d}`)}),g.postMessage({index:a,labels:i,machineCwd:c,name:s,runnerGroup:n,token:o,url:e}),q.info(`Worker ${m} starting...`),wn.add(g)}q.info("All workers started. Press Ctrl+C to stop all machines")}function yo(t){try{let r=new URL(t),o=r.pathname.split("/").filter(Boolean);if(r.hostname==="github.com"||r.hostname==="www.github.com"){if(o[0]==="orgs"&&o[1])return`https://github.com/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`https://github.com/${o[0]}/${o[1]}/settings/actions/runners/new`}else if(o[0]==="orgs"&&o[1])return`${r.origin}/organizations/${o[1]}/settings/actions/runners/new`;else if(o.length>=2)return`${r.origin}/${o[0]}/${o[1]}/settings/actions/runners/new`;return t}catch{return t}}import{parseArgs as xo}from"util";var{$:$o}=globalThis.Bun;async function zt(){let t=await wo(),{directory:r,token:o,url:e,json:s}=t;if(!o||!e)throw new Error("Token (-t) and URL (-u) parameters are required");let i=yt();i.start("Fetching runner status...");try{let n=await Eo(r),a=await Ro(e,o),c=Oo(n,a);if(i.stop("Runner status fetched"),s)console.log(JSON.stringify(c,null,2));else So(c)}catch(n){throw i.stop("Failed to fetch runner status"),n}}async function wo(){let{values:t}=xo({allowPositionals:!0,args:Bun.argv,options:{config:{short:"c",type:"string"},directory:{default:`${process.cwd()}/gh-runners`,short:"d",type:"string"},json:{default:!1,short:"j",type:"boolean"},profile:{short:"p",type:"string"},token:{short:"t",type:"string"},url:{short:"u",type:"string"}},strict:!0}),r=await W({configPath:t.config}),o=await z(r,t.profile);return{directory:t.directory||o?.directory||`${process.cwd()}/gh-runners`,json:t.json,token:t.token,url:t.url||o?.url}}async function Eo(t){let r=`${t}/machines`;return await F(async()=>{return(await $o`ls ${r} 2>/dev/null || true`.quiet()).stdout.toString().trim().split(`
179
+ `).filter(Boolean)},{fallback:()=>{},logLevel:"debug",message:"No local runners found"})||[]}async function Ro(t,r){let o=t.match(/github\.com[:/]([^/]+)(?:\/([^/.]+))?/);if(!o)throw new Error("Invalid GitHub URL");let[,e,s]=o,i=s?`https://api.github.com/repos/${e}/${s}/actions/runners`:`https://api.github.com/orgs/${e}/actions/runners`;return on(async()=>{let n={Accept:"application/vnd.github.v3+json",Authorization:`Bearer ${r}`},a=await fetch(i,{headers:n});if(!a.ok)throw new Error(`GitHub API error: ${a.status} ${a.statusText}`);return await a.json()},{onRetry:(n,a)=>{X.warn(`Retrying GitHub API call (attempt ${n}): ${a.message}`)}})}function Oo(t,r){let o=[],e=new Map(r.runners.map((s)=>[s.name,s]));for(let s of t){let i=`runner-${s}`,n=e.get(i);if(n)o.push({busy:n.busy,labels:n.labels.map((a)=>a.name),name:i,os:n.os,status:n.busy?"busy":n.status==="online"?"online":"offline"});else o.push({busy:!1,labels:[],name:i,os:"unknown",status:"offline"})}return o}function So(t){if(t.length===0){X.info("No runners found");return}console.log(`
180
180
  ${p.bold("Runner Status:")}`),console.log("\u2500".repeat(80));let r={busy:p.yellow,offline:p.red,online:p.green};for(let e of t){let s=r[e.status],i=e.status.toUpperCase().padEnd(7);console.log(`${s("\u25CF")} ${s(i)} ${p.cyan(e.name.padEnd(20))} ${p.dim(`OS: ${e.os.padEnd(10)}`)} ${e.labels.length>0?p.dim(`Labels: ${e.labels.join(", ")}`):""}`)}console.log("\u2500".repeat(80));let o={busy:t.filter((e)=>e.status==="busy").length,offline:t.filter((e)=>e.status==="offline").length,online:t.filter((e)=>e.status==="online").length,total:t.length};console.log(`
181
181
  ${p.bold("Summary:")} Total: ${o.total} | ${p.green(`Online: ${o.online}`)} | ${p.yellow(`Busy: ${o.busy}`)} | ${p.red(`Offline: ${o.offline}`)}
182
- `)}var En=["init","create","run","remove","status","help"],Oo={c:"create",ceate:"create",craete:"create",cretae:"create",del:"remove",delete:"remove",h:"help",i:"init",info:"status",initialise:"init",inti:"init",intialize:"init",list:"status",ls:"status",new:"create",r:"run",remvoe:"remove",rm:"remove",rmove:"remove",rnu:"run",runn:"run",s:"status",start:"run",stat:"status",stop:"remove",sttaus:"status",t:"troubleshoot"};async function So(){try{let[,,t,...r]=process.argv;if(!t||t==="--help"||t==="-h")cn(),process.exit(0);let o=t;if(!En.includes(t)){let e=Ot(t,Oo);if(e&&En.includes(e))o=e,console.log(p.yellow(`Assuming you meant '${e}'
182
+ `)}var En=["init","create","run","remove","status","help"],Co={c:"create",ceate:"create",craete:"create",cretae:"create",del:"remove",delete:"remove",h:"help",i:"init",info:"status",initialise:"init",inti:"init",intialize:"init",list:"status",ls:"status",new:"create",r:"run",remvoe:"remove",rm:"remove",rmove:"remove",rnu:"run",runn:"run",s:"status",start:"run",stat:"status",stop:"remove",sttaus:"status",t:"troubleshoot"};async function To(){try{let[,,t,...r]=process.argv;if(!t||t==="--help"||t==="-h")cn(),process.exit(0);let o=t;if(!En.includes(t)){let e=Ot(t,Co);if(e&&En.includes(e))o=e,console.log(p.yellow(`Assuming you meant '${e}'
183
183
  `))}if(!En.includes(o)){console.error(p.red(`Unknown command: ${t}`));let e=Rt(t,En);if(e.length>0){console.error(`
184
- Did you mean one of these?`);for(let s of e)console.error(` ${p.cyan(s)}`);console.error()}cn(),process.exit(1)}if(r.includes("--help")||r.includes("-h"))cn(o),process.exit(0);switch(o){case"init":await Bt();break;case"create":await Ht();break;case"run":await jt();break;case"remove":await It();break;case"status":await Wt();break;case"help":{let e=r[0];cn(e);break}default:throw new Error(`Unknown command: ${o}`)}process.exit(0)}catch(t){let r=t instanceof Error?t:new Error(String(t));X.error(r.message),process.exit(1)}}await So();
184
+ Did you mean one of these?`);for(let s of e)console.error(` ${p.cyan(s)}`);console.error()}cn(),process.exit(1)}if(r.includes("--help")||r.includes("-h"))cn(o),process.exit(0);switch(o){case"init":await It();break;case"create":await Ht();break;case"run":await Wt();break;case"remove":await jt();break;case"status":await zt();break;case"help":{let e=r[0];cn(e);break}default:throw new Error(`Unknown command: ${o}`)}process.exit(0)}catch(t){let r=t instanceof Error?t:new Error(String(t));X.error(r.message),process.exit(1)}}await To();
package/package.json CHANGED
@@ -39,5 +39,5 @@
39
39
  },
40
40
  "type": "module",
41
41
  "types": "src/cli.ts",
42
- "version": "0.3.2"
42
+ "version": "0.3.4"
43
43
  }