@r5n/hydra 0.9.0 → 0.9.1

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 +67 -67
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,99 +1,99 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var Ro=Object.create;var{getPrototypeOf:Lo,defineProperty:Tn,getOwnPropertyNames:Do}=Object;var Io=Object.prototype.hasOwnProperty;function Eo(r){return this[r]}var Ho,Uo,re=(r,n,e)=>{var o=r!=null&&typeof r==="object";if(o){var i=n?Ho??=new WeakMap:Uo??=new WeakMap,t=i.get(r);if(t)return t}e=r!=null?Ro(Lo(r)):{};let a=n||!r||!r.__esModule?Tn(e,"default",{value:r,enumerable:!0}):e;for(let s of Do(r))if(!Io.call(a,s))Tn(a,s,{get:Eo.bind(r,s),enumerable:!0});if(o)i.set(r,a);return a};var No=(r,n)=>()=>(n||r((n={exports:{}}).exports,n),n.exports);var Cn=No((St,ge)=>{var wn={to(r,n){if(!n)return`\x1B[${r+1}G`;return`\x1B[${n+1};${r+1}H`},move(r,n){let e="";if(r<0)e+=`\x1B[${-r}D`;else if(r>0)e+=`\x1B[${r}C`;if(n<0)e+=`\x1B[${-n}A`;else if(n>0)e+=`\x1B[${n}B`;return e},up:(r=1)=>`\x1B[${r}A`,down:(r=1)=>`\x1B[${r}B`,forward:(r=1)=>`\x1B[${r}C`,backward:(r=1)=>`\x1B[${r}D`,nextLine:(r=1)=>"\x1B[E".repeat(r),prevLine:(r=1)=>"\x1B[F".repeat(r),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Oo={up:(r=1)=>"\x1B[S".repeat(r),down:(r=1)=>"\x1B[T".repeat(r)},Xo={screen:"\x1B[2J",up:(r=1)=>"\x1B[1J".repeat(r),down:(r=1)=>"\x1B[J".repeat(r),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(r){let n="";for(let e=0;e<r;e++)n+=this.line+(e<r-1?wn.up():"");if(r)n+=wn.left;return n}};ge.exports={cursor:wn,scroll:Oo,erase:Xo,beep:"\x07"}});class O extends Error{constructor(r="Operation cancelled"){super(r)}}class w extends Error{hint;constructor(r,n){super(r);this.hint=n}}import{styleText as Mr}from"util";import{stdout as Fn,stdin as we}from"process";import*as er from"readline";import Vo from"readline";var ne=(()=>{let r=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(n)=>{let e=0;r.lastIndex=0;while(r.test(n))e+=1;return n.length-e}})(),ee=(r)=>{return r===12288||r>=65281&&r<=65376||r>=65504&&r<=65510},oe=(r)=>{return r===8987||r===9001||r>=12272&&r<=12287||r>=12289&&r<=12350||r>=12441&&r<=12543||r>=12549&&r<=12591||r>=12593&&r<=12686||r>=12688&&r<=12771||r>=12783&&r<=12830||r>=12832&&r<=12871||r>=12880&&r<=19903||r>=65040&&r<=65049||r>=65072&&r<=65106||r>=65108&&r<=65126||r>=65128&&r<=65131||r>=127488&&r<=127490||r>=127504&&r<=127547||r>=127552&&r<=127560||r>=131072&&r<=196605||r>=196608&&r<=262141};var jo=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Ao=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,ie=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Mo=/\t{1,1000}/y,te=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,Go=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,xo=/\p{M}+/gu,qo={limit:1/0,ellipsis:""},ae=(r,n={},e={})=>{let o=n.limit??1/0,i=n.ellipsis??"",t=n?.ellipsisWidth??(i?ae(i,qo,e).width:0),a=0,s=e.controlWidth??0,c=e.tabWidth??8,f=e.emojiWidth??2,d=2,g=e.regularWidth??1,p=e.wideWidth??2,h=[[Go,g],[jo,0],[Ao,s],[Mo,c],[te,f],[ie,p]],l=0,b=0,F=r.length,I=0,y=!1,A=F,E=Math.max(0,o-t),P=0,j=0,H=0,L=0;r:while(!0){if(j>P||b>=F&&b>l){let N=r.slice(P,j)||r.slice(l,b);I=0;for(let X of N.replaceAll(xo,"")){let W=X.codePointAt(0)||0;if(ee(W))L=2;else if(oe(W))L=p;else L=g;if(H+L>E)A=Math.min(A,Math.max(P,l)+I);if(H+L>o){y=!0;break r}I+=X.length,H+=L}P=j=0}if(b>=F)break r;for(let N=0,X=h.length;N<X;N++){let[W,Er]=h[N];if(W.lastIndex=b,W.test(r)){if(I=W===ie?ne(r.slice(b,W.lastIndex)):W===te?1:W.lastIndex-b,L=I*Er,H+L>E)A=Math.min(A,b+Math.floor((E-H)/Er));if(H+L>o){y=!0;break r}H+=L,P=l,j=b,b=l=W.lastIndex;continue r}}b+=1}return{width:y?E:H,index:y?A:F,truncated:y,ellipsed:y&&o>=t}},se=ae;var zo={limit:1/0,ellipsis:"",ellipsisWidth:0},Wo=(r,n={})=>{return se(r,zo,n).width},J=Wo;var Ur="\x1B",me="\x9B",Jo=39,bn="\x07",le="[",Yo="]",de="m",vn=`${Yo}8;;`,ce=new RegExp(`(?:\\${le}(?<code>\\d+)m|\\${vn}(?<uri>.*)${bn})`,"y"),fe=(r)=>{if(r>=30&&r<=37)return 39;if(r>=90&&r<=97)return 39;if(r>=40&&r<=47)return 49;if(r>=100&&r<=107)return 49;if(r===1||r===2)return 22;if(r===3)return 23;if(r===4)return 24;if(r===7)return 27;if(r===8)return 28;if(r===9)return 29;if(r===0)return 0;return},ue=(r)=>`${Ur}${le}${r}${de}`,pe=(r)=>`${Ur}${vn}${r}${bn}`,hn=(r,n,e)=>{let o=n[Symbol.iterator](),i=!1,t=!1,a=r.at(-1),s=a===void 0?0:J(a),c=o.next(),f=o.next(),d=0;while(!c.done){let g=c.value,p=J(g);if(s+p<=e)r[r.length-1]+=g;else r.push(g),s=0;if(g===Ur||g===me)i=!0,t=n.startsWith(vn,d+1);if(i){if(t){if(g===bn)i=!1,t=!1}else if(g===de)i=!1}else if(s+=p,s===e&&!f.done)r.push(""),s=0;c=f,f=o.next(),d+=g.length}if(a=r.at(-1),!s&&a!==void 0&&a.length&&r.length>1)r[r.length-2]+=r.pop()},Ko=(r)=>{let n=r.split(" "),e=n.length;while(e){if(J(n[e-1]))break;e--}if(e===n.length)return r;return n.slice(0,e).join(" ")+n.slice(e).join("")},Zo=(r,n,e={})=>{if(e.trim!==!1&&r.trim()==="")return"";let o="",i,t,a=r.split(" "),s=[""],c=0;for(let g=0;g<a.length;g++){let p=a[g];if(e.trim!==!1){let l=s.at(-1)??"",b=l.trimStart();if(l.length!==b.length)s[s.length-1]=b,c=J(b)}if(g!==0){if(c>=n&&(e.wordWrap===!1||e.trim===!1))s.push(""),c=0;if(c||e.trim===!1)s[s.length-1]+=" ",c++}let h=J(p);if(e.hard&&h>n){let l=n-c,b=1+Math.floor((h-l-1)/n);if(Math.floor((h-1)/n)<b)s.push("");hn(s,p,n),c=J(s.at(-1)??"");continue}if(c+h>n&&c&&h){if(e.wordWrap===!1&&c<n){hn(s,p,n),c=J(s.at(-1)??"");continue}s.push(""),c=0}if(c+h>n&&e.wordWrap===!1){hn(s,p,n),c=J(s.at(-1)??"");continue}s[s.length-1]+=p,c+=h}if(e.trim!==!1)s=s.map((g)=>Ko(g));let f=s.join(`
4
- `),d=!1;for(let g=0;g<f.length;g++){let p=f[g];if(o+=p,!d){if(d=p>="\uD800"&&p<="\uDBFF",d)continue}else d=!1;if(p===Ur||p===me){ce.lastIndex=g+1;let l=ce.exec(f)?.groups;if(l?.code!==void 0){let b=Number.parseFloat(l.code);i=b===Jo?void 0:b}else if(l?.uri!==void 0)t=l.uri.length===0?void 0:l.uri}if(f[g+1]===`
5
- `){if(t)o+=pe("");let h=i?fe(i):void 0;if(i&&h)o+=ue(h)}else if(p===`
6
- `){if(i&&fe(i))o+=ue(i);if(t)o+=pe(t)}}return o},Qo=/\r?\n/;function V(r,n,e){return String(r).normalize().split(Qo).map((o)=>Zo(o,n,e)).join(`
7
- `)}var q=re(Cn(),1);import{ReadStream as he}from"tty";function _(r,n,e){if(!e.some((a)=>!a.disabled))return r;let o=r+n,i=Math.max(e.length-1,0),t=o<0?i:o>i?0:o;return e[t]?.disabled?_(t,n<0?-1:1,e):t}function Nr(r,n,e,o){let i=o.split(`
8
- `),t=0,a=r;for(let c of i){if(a<=c.length)break;a-=c.length+1,t++}for(t=Math.max(0,Math.min(i.length-1,t+e)),a=Math.min(a,i[t].length)+n;a<0&&t>0;)t--,a+=i[t].length+1;for(;a>i[t].length&&t<i.length-1;)a-=i[t].length+1,t++;a=Math.max(0,Math.min(i[t].length,a));let s=0;for(let c=0;c<t;c++)s+=i[c].length+1;return s+a}var So=["up","down","left","right","space","enter","cancel"],Bo=["January","February","March","April","May","June","July","August","September","October","November","December"],M={actions:new Set(So),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...Bo],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(r,n)=>`There are only ${r} days in ${n}`,afterMin:(r)=>`Date must be on or after ${r.toISOString().slice(0,10)}`,beforeMax:(r)=>`Date must be on or before ${r.toISOString().slice(0,10)}`}}};function kn(r,n){if(typeof r=="string")return M.aliases.get(r)===n;for(let e of r)if(e!==void 0&&kn(e,n))return!0;return!1}function _o(r,n){if(r===n)return;let e=r.split(`
3
+ var Lo=Object.create;var{getPrototypeOf:Do,defineProperty:ne,getOwnPropertyNames:Io}=Object;var Eo=Object.prototype.hasOwnProperty;function Ho(r){return this[r]}var Uo,No,ee=(r,n,e)=>{var o=r!=null&&typeof r==="object";if(o){var i=n?Uo??=new WeakMap:No??=new WeakMap,t=i.get(r);if(t)return t}e=r!=null?Lo(Do(r)):{};let a=n||!r||!r.__esModule?ne(e,"default",{value:r,enumerable:!0}):e;for(let s of Io(r))if(!Eo.call(a,s))ne(a,s,{get:Ho.bind(r,s),enumerable:!0});if(o)i.set(r,a);return a};var Ao=(r,n)=>()=>(n||r((n={exports:{}}).exports,n),n.exports);var $n=Ao((Bt,be)=>{var Cn={to(r,n){if(!n)return`\x1B[${r+1}G`;return`\x1B[${n+1};${r+1}H`},move(r,n){let e="";if(r<0)e+=`\x1B[${-r}D`;else if(r>0)e+=`\x1B[${r}C`;if(n<0)e+=`\x1B[${-n}A`;else if(n>0)e+=`\x1B[${n}B`;return e},up:(r=1)=>`\x1B[${r}A`,down:(r=1)=>`\x1B[${r}B`,forward:(r=1)=>`\x1B[${r}C`,backward:(r=1)=>`\x1B[${r}D`,nextLine:(r=1)=>"\x1B[E".repeat(r),prevLine:(r=1)=>"\x1B[F".repeat(r),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Xo={up:(r=1)=>"\x1B[S".repeat(r),down:(r=1)=>"\x1B[T".repeat(r)},Vo={screen:"\x1B[2J",up:(r=1)=>"\x1B[1J".repeat(r),down:(r=1)=>"\x1B[J".repeat(r),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(r){let n="";for(let e=0;e<r;e++)n+=this.line+(e<r-1?Cn.up():"");if(r)n+=Cn.left;return n}};be.exports={cursor:Cn,scroll:Xo,erase:Vo,beep:"\x07"}});class Q extends Error{constructor(r="Operation cancelled"){super(r)}}class v extends Error{hint;constructor(r,n){super(r);this.hint=n}}import{styleText as Mr}from"util";import{stdout as kn,stdin as $e}from"process";import*as er from"readline";import So from"readline";var oe=(()=>{let r=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(n)=>{let e=0;r.lastIndex=0;while(r.test(n))e+=1;return n.length-e}})(),ie=(r)=>{return r===12288||r>=65281&&r<=65376||r>=65504&&r<=65510},te=(r)=>{return r===8987||r===9001||r>=12272&&r<=12287||r>=12289&&r<=12350||r>=12441&&r<=12543||r>=12549&&r<=12591||r>=12593&&r<=12686||r>=12688&&r<=12771||r>=12783&&r<=12830||r>=12832&&r<=12871||r>=12880&&r<=19903||r>=65040&&r<=65049||r>=65072&&r<=65106||r>=65108&&r<=65126||r>=65128&&r<=65131||r>=127488&&r<=127490||r>=127504&&r<=127547||r>=127552&&r<=127560||r>=131072&&r<=196605||r>=196608&&r<=262141};var jo=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Mo=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,ae=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Go=/\t{1,1000}/y,se=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,xo=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,qo=/\p{M}+/gu,zo={limit:1/0,ellipsis:""},ce=(r,n={},e={})=>{let o=n.limit??1/0,i=n.ellipsis??"",t=n?.ellipsisWidth??(i?ce(i,zo,e).width:0),a=0,s=e.controlWidth??0,c=e.tabWidth??8,u=e.emojiWidth??2,d=2,g=e.regularWidth??1,p=e.wideWidth??2,h=[[xo,g],[jo,0],[Mo,s],[Go,c],[se,u],[ae,p]],l=0,b=0,F=r.length,I=0,y=!1,j=F,E=Math.max(0,o-t),P=0,A=0,H=0,L=0;r:while(!0){if(A>P||b>=F&&b>l){let N=r.slice(P,A)||r.slice(l,b);I=0;for(let X of N.replaceAll(qo,"")){let W=X.codePointAt(0)||0;if(ie(W))L=2;else if(te(W))L=p;else L=g;if(H+L>E)j=Math.min(j,Math.max(P,l)+I);if(H+L>o){y=!0;break r}I+=X.length,H+=L}P=A=0}if(b>=F)break r;for(let N=0,X=h.length;N<X;N++){let[W,Er]=h[N];if(W.lastIndex=b,W.test(r)){if(I=W===ae?oe(r.slice(b,W.lastIndex)):W===se?1:W.lastIndex-b,L=I*Er,H+L>E)j=Math.min(j,b+Math.floor((E-H)/Er));if(H+L>o){y=!0;break r}H+=L,P=l,A=b,b=l=W.lastIndex;continue r}}b+=1}return{width:y?E:H,index:y?j:F,truncated:y,ellipsed:y&&o>=t}},ue=ce;var Wo={limit:1/0,ellipsis:"",ellipsisWidth:0},Yo=(r,n={})=>{return ue(r,Wo,n).width},Y=Yo;var Ur="\x1B",de="\x9B",Jo=39,wn="\x07",ge="[",Ko="]",he="m",vn=`${Ko}8;;`,fe=new RegExp(`(?:\\${ge}(?<code>\\d+)m|\\${vn}(?<uri>.*)${wn})`,"y"),pe=(r)=>{if(r>=30&&r<=37)return 39;if(r>=90&&r<=97)return 39;if(r>=40&&r<=47)return 49;if(r>=100&&r<=107)return 49;if(r===1||r===2)return 22;if(r===3)return 23;if(r===4)return 24;if(r===7)return 27;if(r===8)return 28;if(r===9)return 29;if(r===0)return 0;return},me=(r)=>`${Ur}${ge}${r}${he}`,le=(r)=>`${Ur}${vn}${r}${wn}`,bn=(r,n,e)=>{let o=n[Symbol.iterator](),i=!1,t=!1,a=r.at(-1),s=a===void 0?0:Y(a),c=o.next(),u=o.next(),d=0;while(!c.done){let g=c.value,p=Y(g);if(s+p<=e)r[r.length-1]+=g;else r.push(g),s=0;if(g===Ur||g===de)i=!0,t=n.startsWith(vn,d+1);if(i){if(t){if(g===wn)i=!1,t=!1}else if(g===he)i=!1}else if(s+=p,s===e&&!u.done)r.push(""),s=0;c=u,u=o.next(),d+=g.length}if(a=r.at(-1),!s&&a!==void 0&&a.length&&r.length>1)r[r.length-2]+=r.pop()},Zo=(r)=>{let n=r.split(" "),e=n.length;while(e){if(Y(n[e-1]))break;e--}if(e===n.length)return r;return n.slice(0,e).join(" ")+n.slice(e).join("")},Oo=(r,n,e={})=>{if(e.trim!==!1&&r.trim()==="")return"";let o="",i,t,a=r.split(" "),s=[""],c=0;for(let g=0;g<a.length;g++){let p=a[g];if(e.trim!==!1){let l=s.at(-1)??"",b=l.trimStart();if(l.length!==b.length)s[s.length-1]=b,c=Y(b)}if(g!==0){if(c>=n&&(e.wordWrap===!1||e.trim===!1))s.push(""),c=0;if(c||e.trim===!1)s[s.length-1]+=" ",c++}let h=Y(p);if(e.hard&&h>n){let l=n-c,b=1+Math.floor((h-l-1)/n);if(Math.floor((h-1)/n)<b)s.push("");bn(s,p,n),c=Y(s.at(-1)??"");continue}if(c+h>n&&c&&h){if(e.wordWrap===!1&&c<n){bn(s,p,n),c=Y(s.at(-1)??"");continue}s.push(""),c=0}if(c+h>n&&e.wordWrap===!1){bn(s,p,n),c=Y(s.at(-1)??"");continue}s[s.length-1]+=p,c+=h}if(e.trim!==!1)s=s.map((g)=>Zo(g));let u=s.join(`
4
+ `),d=!1;for(let g=0;g<u.length;g++){let p=u[g];if(o+=p,!d){if(d=p>="\uD800"&&p<="\uDBFF",d)continue}else d=!1;if(p===Ur||p===de){fe.lastIndex=g+1;let l=fe.exec(u)?.groups;if(l?.code!==void 0){let b=Number.parseFloat(l.code);i=b===Jo?void 0:b}else if(l?.uri!==void 0)t=l.uri.length===0?void 0:l.uri}if(u[g+1]===`
5
+ `){if(t)o+=le("");let h=i?pe(i):void 0;if(i&&h)o+=me(h)}else if(p===`
6
+ `){if(i&&pe(i))o+=me(i);if(t)o+=le(t)}}return o},Qo=/\r?\n/;function V(r,n,e){return String(r).normalize().split(Qo).map((o)=>Oo(o,n,e)).join(`
7
+ `)}var q=ee($n(),1);import{ReadStream as we}from"tty";function _(r,n,e){if(!e.some((a)=>!a.disabled))return r;let o=r+n,i=Math.max(e.length-1,0),t=o<0?i:o>i?0:o;return e[t]?.disabled?_(t,n<0?-1:1,e):t}function Nr(r,n,e,o){let i=o.split(`
8
+ `),t=0,a=r;for(let c of i){if(a<=c.length)break;a-=c.length+1,t++}for(t=Math.max(0,Math.min(i.length-1,t+e)),a=Math.min(a,i[t].length)+n;a<0&&t>0;)t--,a+=i[t].length+1;for(;a>i[t].length&&t<i.length-1;)a-=i[t].length+1,t++;a=Math.max(0,Math.min(i[t].length,a));let s=0;for(let c=0;c<t;c++)s+=i[c].length+1;return s+a}var Bo=["up","down","left","right","space","enter","cancel"],_o=["January","February","March","April","May","June","July","August","September","October","November","December"],M={actions:new Set(Bo),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[..._o],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(r,n)=>`There are only ${r} days in ${n}`,afterMin:(r)=>`Date must be on or after ${r.toISOString().slice(0,10)}`,beforeMax:(r)=>`Date must be on or before ${r.toISOString().slice(0,10)}`}}};function Rn(r,n){if(typeof r=="string")return M.aliases.get(r)===n;for(let e of r)if(e!==void 0&&Rn(e,n))return!0;return!1}function To(r,n){if(r===n)return;let e=r.split(`
9
9
  `),o=n.split(`
10
- `),i=Math.max(e.length,o.length),t=[];for(let a=0;a<i;a++)e[a]!==o[a]&&t.push(a);return{lines:t,numLinesBefore:e.length,numLinesAfter:o.length,numLines:i}}var To=globalThis.process.platform.startsWith("win"),yn=Symbol("clack:cancel");function vr(r){return r===yn}function jr(r,n){let e=r;e.isTTY&&e.setRawMode(n)}function Ce({input:r=we,output:n=Fn,overwrite:e=!0,hideCursor:o=!0}={}){let i=er.createInterface({input:r,output:n,prompt:"",tabSize:1});er.emitKeypressEvents(r,i),r instanceof he&&r.isTTY&&r.setRawMode(!0);let t=(a,{name:s,sequence:c})=>{let f=String(a);if(kn([f,s,c],"cancel")){o&&n.write(q.cursor.show),process.exit(0);return}if(!e)return;er.moveCursor(n,s==="return"?0:-1,s==="return"?-1:0,()=>{er.clearLine(n,1,()=>{r.once("keypress",t)})})};return o&&n.write(q.cursor.hide),r.once("keypress",t),()=>{r.off("keypress",t),o&&n.write(q.cursor.show),r instanceof he&&r.isTTY&&!To&&r.setRawMode(!1),i.terminal=!1,i.close()}}var wr=(r)=>("columns"in r)&&typeof r.columns=="number"?r.columns:80,Rn=(r)=>("rows"in r)&&typeof r.rows=="number"?r.rows:20;function or(r,n,e,o=e,i=e,t){let a=wr(r??Fn);return V(n,a-e.length,{hard:!0,trim:!1}).split(`
11
- `).map((s,c,f)=>{let d=t?t(s,c):s;return c===0?`${o}${d}`:c===f.length-1?`${i}${d}`:`${e}${d}`}).join(`
12
- `)}function $e(r,n){if("~standard"in r){let e=r["~standard"].validate(n);if(e instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return e.issues?.at(0)?.message}return r(n)}class T{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(r,n=!0){let{input:e=we,output:o=Fn,render:i,signal:t,...a}=r;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=n,this._abortSignal=t,this.input=e,this.output=o}unsubscribe(){this._subscribers.clear()}setSubscriber(r,n){let e=this._subscribers.get(r)??[];e.push(n),this._subscribers.set(r,e)}on(r,n){this.setSubscriber(r,{cb:n})}once(r,n){this.setSubscriber(r,{cb:n,once:!0})}emit(r,...n){let e=this._subscribers.get(r)??[],o=[];for(let i of e)i.cb(...n),i.once&&o.push(()=>e.splice(e.indexOf(i),1));for(let i of o)i()}prompt(){return new Promise((r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),r(yn);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=Vo.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),jr(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(q.cursor.show),this.output.off("resize",this.render),jr(this.input,!1),r(this.value)}),this.once("cancel",()=>{this.output.write(q.cursor.show),this.output.off("resize",this.render),jr(this.input,!1),r(yn)})})}_isActionKey(r,n){return r==="\t"}_shouldSubmit(r,n){return!0}_setValue(r){this.value=r,this.emit("value",this.value)}_setUserInput(r,n){this.userInput=r??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(r,n){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(r,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&M.aliases.has(n.name)&&this.emit("cursor",M.aliases.get(n.name)),M.actions.has(n.name)&&this.emit("cursor",n.name)),r&&(r.toLowerCase()==="y"||r.toLowerCase()==="n")&&this.emit("confirm",r.toLowerCase()==="y"),this.emit("key",r,n),n?.name==="return"&&this._shouldSubmit(r,n)){if(this.opts.validate){let e=$e(this.opts.validate,this.value);e&&(this.error=e instanceof Error?e.message:e,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}kn([r,n?.name,n?.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(`
13
- `),jr(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let r=V(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
14
- `).length-1;this.output.write(q.cursor.move(-999,r*-1))}render(){let r=V(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(r!==this._prevFrame){if(this.state==="initial")this.output.write(q.cursor.hide);else{let n=_o(this._prevFrame,r),e=Rn(this.output);if(this.restoreCursor(),n){let o=Math.max(0,n.numLinesAfter-e),i=Math.max(0,n.numLinesBefore-e),t=n.lines.find((a)=>a>=o);if(t===void 0){this._prevFrame=r;return}if(n.lines.length===1){this.output.write(q.cursor.move(0,t-i)),this.output.write(q.erase.lines(1));let a=r.split(`
10
+ `),i=Math.max(e.length,o.length),t=[];for(let a=0;a<i;a++)e[a]!==o[a]&&t.push(a);return{lines:t,numLinesBefore:e.length,numLinesAfter:o.length,numLines:i}}var ri=globalThis.process.platform.startsWith("win"),Pn=Symbol("clack:cancel");function wr(r){return r===Pn}function Ar(r,n){let e=r;e.isTTY&&e.setRawMode(n)}function ye({input:r=$e,output:n=kn,overwrite:e=!0,hideCursor:o=!0}={}){let i=er.createInterface({input:r,output:n,prompt:"",tabSize:1});er.emitKeypressEvents(r,i),r instanceof we&&r.isTTY&&r.setRawMode(!0);let t=(a,{name:s,sequence:c})=>{let u=String(a);if(Rn([u,s,c],"cancel")){o&&n.write(q.cursor.show),process.exit(0);return}if(!e)return;er.moveCursor(n,s==="return"?0:-1,s==="return"?-1:0,()=>{er.clearLine(n,1,()=>{r.once("keypress",t)})})};return o&&n.write(q.cursor.hide),r.once("keypress",t),()=>{r.off("keypress",t),o&&n.write(q.cursor.show),r instanceof we&&r.isTTY&&!ri&&r.setRawMode(!1),i.terminal=!1,i.close()}}var vr=(r)=>("columns"in r)&&typeof r.columns=="number"?r.columns:80,Ln=(r)=>("rows"in r)&&typeof r.rows=="number"?r.rows:20;function or(r,n,e,o=e,i=e,t){let a=vr(r??kn);return V(n,a-e.length,{hard:!0,trim:!1}).split(`
11
+ `).map((s,c,u)=>{let d=t?t(s,c):s;return c===0?`${o}${d}`:c===u.length-1?`${i}${d}`:`${e}${d}`}).join(`
12
+ `)}function Pe(r,n){if("~standard"in r){let e=r["~standard"].validate(n);if(e instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return e.issues?.at(0)?.message}return r(n)}class T{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(r,n=!0){let{input:e=$e,output:o=kn,render:i,signal:t,...a}=r;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=n,this._abortSignal=t,this.input=e,this.output=o}unsubscribe(){this._subscribers.clear()}setSubscriber(r,n){let e=this._subscribers.get(r)??[];e.push(n),this._subscribers.set(r,e)}on(r,n){this.setSubscriber(r,{cb:n})}once(r,n){this.setSubscriber(r,{cb:n,once:!0})}emit(r,...n){let e=this._subscribers.get(r)??[],o=[];for(let i of e)i.cb(...n),i.once&&o.push(()=>e.splice(e.indexOf(i),1));for(let i of o)i()}prompt(){return new Promise((r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),r(Pn);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=So.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Ar(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(q.cursor.show),this.output.off("resize",this.render),Ar(this.input,!1),r(this.value)}),this.once("cancel",()=>{this.output.write(q.cursor.show),this.output.off("resize",this.render),Ar(this.input,!1),r(Pn)})})}_isActionKey(r,n){return r==="\t"}_shouldSubmit(r,n){return!0}_setValue(r){this.value=r,this.emit("value",this.value)}_setUserInput(r,n){this.userInput=r??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(r,n){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(r,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&M.aliases.has(n.name)&&this.emit("cursor",M.aliases.get(n.name)),M.actions.has(n.name)&&this.emit("cursor",n.name)),r&&(r.toLowerCase()==="y"||r.toLowerCase()==="n")&&this.emit("confirm",r.toLowerCase()==="y"),this.emit("key",r,n),n?.name==="return"&&this._shouldSubmit(r,n)){if(this.opts.validate){let e=Pe(this.opts.validate,this.value);e&&(this.error=e instanceof Error?e.message:e,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Rn([r,n?.name,n?.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(`
13
+ `),Ar(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let r=V(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
14
+ `).length-1;this.output.write(q.cursor.move(-999,r*-1))}render(){let r=V(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(r!==this._prevFrame){if(this.state==="initial")this.output.write(q.cursor.hide);else{let n=To(this._prevFrame,r),e=Ln(this.output);if(this.restoreCursor(),n){let o=Math.max(0,n.numLinesAfter-e),i=Math.max(0,n.numLinesBefore-e),t=n.lines.find((a)=>a>=o);if(t===void 0){this._prevFrame=r;return}if(n.lines.length===1){this.output.write(q.cursor.move(0,t-i)),this.output.write(q.erase.lines(1));let a=r.split(`
15
15
  `);this.output.write(a[t]),this._prevFrame=r,this.output.write(q.cursor.move(0,a.length-t-1));return}else if(n.lines.length>1){if(o<i)t=o;else{let s=t-i;s>0&&this.output.write(q.cursor.move(0,s))}this.output.write(q.erase.down());let a=r.split(`
16
16
  `).slice(t);this.output.write(a.join(`
17
- `)),this._prevFrame=r;return}}this.output.write(q.erase.down())}this.output.write(r),this.state==="initial"&&(this.state="active"),this._prevFrame=r}}}function ri(r,n){if(r===void 0||n.length===0)return 0;let e=n.findIndex((o)=>o.value===r);return e!==-1?e:0}function ni(r,n){return(n.label??String(n.value)).toLowerCase().includes(r.toLowerCase())}function ei(r,n){if(n)return r?n:n[0]}var oi=class extends T{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#n=0;#i="";#r;#t;#s;get cursor(){return this.#n}get userInputWithCursor(){if(!this.userInput)return Mr(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let n=this.userInput.slice(0,this.cursor),e=this.userInput.slice(this.cursor,this.cursor+1),o=this.userInput.slice(this.cursor+1);return`${n}${Mr("inverse",e)}${o}`}get options(){return typeof this.#t=="function"?this.#t():this.#t}constructor(n){super(n),this.#t=n.options,this.#s=n.placeholder;let e=this.options;this.filteredOptions=[...e],this.multiple=n.multiple===!0,this.#r=typeof n.options=="function"?n.filter:n.filter??ni;let o;if(n.initialValue&&Array.isArray(n.initialValue)?this.multiple?o=n.initialValue:o=n.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(o=[this.options[0]?.value]),o)for(let i of o){let t=e.findIndex((a)=>a.value===i);t!==-1&&(this.toggleSelected(i),this.#n=t)}this.focusedValue=this.options[this.#n]?.value,this.on("key",(i,t)=>this.#e(i,t)),this.on("userInput",(i)=>this.#o(i))}_isActionKey(n,e){return n==="\t"||this.multiple&&this.isNavigating&&e.name==="space"&&n!==void 0&&n!==""}#e(n,e){let o=e.name==="up",i=e.name==="down",t=e.name==="return",a=this.userInput===""||this.userInput==="\t",s=this.#s,c=this.options,f=s!==void 0&&s!==""&&c.some((d)=>!d.disabled&&(this.#r?this.#r(s,d):!0));if(e.name==="tab"&&a&&f){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(s,!0),this.isNavigating=!1;return}o||i?(this.#n=_(this.#n,o?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#n]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):t?this.value=ei(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(e.name==="tab"||this.isNavigating&&e.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(n){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(n)?this.selectedValues=this.selectedValues.filter((e)=>e!==n):this.selectedValues=[...this.selectedValues,n]:this.selectedValues=[n])}#o(n){if(n!==this.#i){this.#i=n;let e=this.options;n&&this.#r?this.filteredOptions=e.filter((t)=>this.#r?.(n,t)):this.filteredOptions=[...e];let o=ri(this.focusedValue,this.filteredOptions);this.#n=_(o,0,this.filteredOptions);let i=this.filteredOptions[this.#n];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class Ln extends T{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(r){super(r,!1),this.value=!!r.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(n)=>{this.output.write(q.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var ii={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function be(r){return[...r].map((n)=>ii[n])}function ti(r){let n=new Intl.DateTimeFormat(r,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),e=[],o="/";for(let i of n)i.type==="literal"?o=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&e.push({type:i.type,len:i.type==="year"?4:2});return{segments:e,separator:o}}function $n(r){return Number.parseInt((r||"0").replace(/_/g,"0"),10)||0}function Ar(r){return{year:$n(r.year),month:$n(r.month),day:$n(r.day)}}function Pn(r,n){return new Date(r||2001,n||1,0).getDate()}function ye(r){let{year:n,month:e,day:o}=Ar(r);if(!n||n<0||n>9999||!e||e<1||e>12||!o||o<1)return;let i=new Date(Date.UTC(n,e-1,o));if(!(i.getUTCFullYear()!==n||i.getUTCMonth()!==e-1||i.getUTCDate()!==o))return{year:n,month:e,day:o}}function ve(r){let n=ye(r);return n?new Date(Date.UTC(n.year,n.month-1,n.day)):void 0}function ai(r,n,e,o){let i=e?{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate()}:null,t=o?{year:o.getUTCFullYear(),month:o.getUTCMonth()+1,day:o.getUTCDate()}:null;return r==="year"?{min:i?.year??1,max:t?.year??9999}:r==="month"?{min:i&&n.year===i.year?i.month:1,max:t&&n.year===t.year?t.month:12}:{min:i&&n.year===i.year&&n.month===i.month?i.day:1,max:t&&n.year===t.year&&n.month===t.month?t.day:Pn(n.year,n.month)}}class Pe extends T{#n;#i;#r;#t;#s;#e={segmentIndex:0,positionInSegment:0};#o=!0;#a=null;inlineError="";get segmentCursor(){return{...this.#e}}get segmentValues(){return{...this.#r}}get segments(){return this.#n}get separator(){return this.#i}get formattedValue(){return this.#p(this.#r)}#p(r){return this.#n.map((n)=>r[n.type]).join(this.#i)}#c(){this._setUserInput(this.#p(this.#r)),this._setValue(ve(this.#r)??void 0)}constructor(r){let n=r.format?{segments:be(r.format),separator:r.separator??"/"}:ti(r.locale),e=r.separator??n.separator,o=r.format?be(r.format):n.segments,i=r.initialValue??r.defaultValue,t=i?{year:String(i.getUTCFullYear()).padStart(4,"0"),month:String(i.getUTCMonth()+1).padStart(2,"0"),day:String(i.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=o.map((s)=>t[s.type]).join(e);super({...r,initialUserInput:a},!1),this.#n=o,this.#i=e,this.#r=t,this.#t=r.minDate,this.#s=r.maxDate,this.#c(),this.on("cursor",(s)=>this.#d(s)),this.on("key",(s,c)=>this.#g(s,c)),this.on("finalize",()=>this.#h(r))}#f(){let r=Math.max(0,Math.min(this.#e.segmentIndex,this.#n.length-1)),n=this.#n[r];if(n)return this.#e.positionInSegment=Math.max(0,Math.min(this.#e.positionInSegment,n.len-1)),{segment:n,index:r}}#u(r){this.inlineError="",this.#a=null;let n=this.#f();n&&(this.#e.segmentIndex=Math.max(0,Math.min(this.#n.length-1,n.index+r)),this.#e.positionInSegment=0,this.#o=!0)}#m(r){let n=this.#f();if(!n)return;let{segment:e}=n,o=this.#r[e.type],i=!o||o.replace(/_/g,"")==="",t=Number.parseInt((o||"0").replace(/_/g,"0"),10)||0,a=ai(e.type,Ar(this.#r),this.#t,this.#s),s;i?s=r===1?a.min:a.max:s=Math.max(Math.min(a.max,t+r),a.min),this.#r={...this.#r,[e.type]:s.toString().padStart(e.len,"0")},this.#o=!0,this.#a=null,this.#c()}#d(r){if(r)switch(r){case"right":return this.#u(1);case"left":return this.#u(-1);case"up":return this.#m(1);case"down":return this.#m(-1)}}#g(r,n){if(n?.name==="backspace"||n?.sequence==="\x7F"||n?.sequence==="\b"||r==="\x7F"||r==="\b"){this.inlineError="";let e=this.#f();if(!e)return;if(!this.#r[e.segment.type].replace(/_/g,"")){this.#u(-1);return}this.#r[e.segment.type]="_".repeat(e.segment.len),this.#o=!0,this.#e.positionInSegment=0,this.#c();return}if(n?.name==="tab"){this.inlineError="";let e=this.#f();if(!e)return;let o=n.shift?-1:1,i=e.index+o;i>=0&&i<this.#n.length&&(this.#e.segmentIndex=i,this.#e.positionInSegment=0,this.#o=!0);return}if(r&&/^[0-9]$/.test(r)){let e=this.#f();if(!e)return;let{segment:o}=e,i=!this.#r[o.type].replace(/_/g,"");if(this.#o&&this.#a!==null&&!i){let p=this.#a+r,h={...this.#r,[o.type]:p},l=this.#l(h,o);if(l){this.inlineError=l,this.#a=null,this.#o=!1;return}this.inlineError="",this.#r[o.type]=p,this.#a=null,this.#o=!1,this.#c(),e.index<this.#n.length-1&&(this.#e.segmentIndex=e.index+1,this.#e.positionInSegment=0,this.#o=!0);return}this.#o&&!i&&(this.#r[o.type]="_".repeat(o.len),this.#e.positionInSegment=0),this.#o=!1,this.#a=null;let t=this.#r[o.type],a=t.indexOf("_"),s=a>=0?a:Math.min(this.#e.positionInSegment,o.len-1);if(s<0||s>=o.len)return;let c=t.slice(0,s)+r+t.slice(s+1),f=!1;if(s===0&&t==="__"&&(o.type==="month"||o.type==="day")){let p=Number.parseInt(r,10);c=`0${r}`,f=p<=(o.type==="month"?1:2)}if(o.type==="year"&&(c=(t.replace(/_/g,"")+r).padStart(o.len,"_")),!c.includes("_")){let p={...this.#r,[o.type]:c},h=this.#l(p,o);if(h){this.inlineError=h;return}}this.inlineError="",this.#r[o.type]=c;let d=c.includes("_")?void 0:ye(this.#r);if(d){let{year:p,month:h}=d,l=Pn(p,h);this.#r={year:String(Math.max(0,Math.min(9999,p))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(l,d.day))).padStart(2,"0")}}this.#c();let g=c.indexOf("_");f?(this.#o=!0,this.#a=r):g>=0?this.#e.positionInSegment=g:a>=0&&e.index<this.#n.length-1?(this.#e.segmentIndex=e.index+1,this.#e.positionInSegment=0,this.#o=!0):this.#e.positionInSegment=Math.min(s+1,o.len-1)}}#l(r,n){let{month:e,day:o}=Ar(r);if(n.type==="month"&&(e<0||e>12))return M.date.messages.invalidMonth;if(n.type==="day"&&(o<0||o>31))return M.date.messages.invalidDay(31,"any month")}#h(r){let{year:n,month:e,day:o}=Ar(this.#r);if(n&&e&&o){let i=Pn(n,e);this.#r={...this.#r,day:String(Math.min(o,i)).padStart(2,"0")}}this.value=ve(this.#r)??r.defaultValue??void 0}}var si=class extends T{options;cursor=0;#n;getGroupItems(n){return this.options.filter((e)=>e.group===n)}isGroupSelected(n){let e=this.getGroupItems(n),o=this.value;return o===void 0?!1:e.every((i)=>o.includes(i.value))}toggleValue(){let n=this.options[this.cursor];if(n!==void 0)if(this.value===void 0&&(this.value=[]),n.group===!0){let e=n.value,o=this.getGroupItems(e);this.isGroupSelected(e)?this.value=this.value.filter((i)=>o.findIndex((t)=>t.value===i)===-1):this.value=[...this.value,...o.map((i)=>i.value)],this.value=Array.from(new Set(this.value))}else{let e=this.value.includes(n.value);this.value=e?this.value.filter((o)=>o!==n.value):[...this.value,n.value]}}constructor(n){super(n,!1);let{options:e}=n;this.#n=n.selectableGroups!==!1,this.options=Object.entries(e).flatMap(([o,i])=>[{value:o,group:!0,label:o},...i.map((t)=>({...t,group:o}))]),this.value=[...n.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:o})=>o===n.cursorAt),this.#n?0:1),this.on("cursor",(o)=>{switch(o){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},ci=new Set(["up","down","left","right"]);class Fe extends T{#n=!1;#i;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let r=this.userInput;if(this.cursor>=r.length)return`${r}\u2588`;let n=r.slice(0,this.cursor),e=r.slice(this.cursor,this.cursor+1),o=r.slice(this.cursor+1);return e===`
17
+ `)),this._prevFrame=r;return}}this.output.write(q.erase.down())}this.output.write(r),this.state==="initial"&&(this.state="active"),this._prevFrame=r}}}function ni(r,n){if(r===void 0||n.length===0)return 0;let e=n.findIndex((o)=>o.value===r);return e!==-1?e:0}function ei(r,n){return(n.label??String(n.value)).toLowerCase().includes(r.toLowerCase())}function oi(r,n){if(n)return r?n:n[0]}var ii=class extends T{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#n=0;#i="";#r;#t;#s;get cursor(){return this.#n}get userInputWithCursor(){if(!this.userInput)return Mr(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let n=this.userInput.slice(0,this.cursor),e=this.userInput.slice(this.cursor,this.cursor+1),o=this.userInput.slice(this.cursor+1);return`${n}${Mr("inverse",e)}${o}`}get options(){return typeof this.#t=="function"?this.#t():this.#t}constructor(n){super(n),this.#t=n.options,this.#s=n.placeholder;let e=this.options;this.filteredOptions=[...e],this.multiple=n.multiple===!0,this.#r=typeof n.options=="function"?n.filter:n.filter??ei;let o;if(n.initialValue&&Array.isArray(n.initialValue)?this.multiple?o=n.initialValue:o=n.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(o=[this.options[0]?.value]),o)for(let i of o){let t=e.findIndex((a)=>a.value===i);t!==-1&&(this.toggleSelected(i),this.#n=t)}this.focusedValue=this.options[this.#n]?.value,this.on("key",(i,t)=>this.#e(i,t)),this.on("userInput",(i)=>this.#o(i))}_isActionKey(n,e){return n==="\t"||this.multiple&&this.isNavigating&&e.name==="space"&&n!==void 0&&n!==""}#e(n,e){let o=e.name==="up",i=e.name==="down",t=e.name==="return",a=this.userInput===""||this.userInput==="\t",s=this.#s,c=this.options,u=s!==void 0&&s!==""&&c.some((d)=>!d.disabled&&(this.#r?this.#r(s,d):!0));if(e.name==="tab"&&a&&u){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(s,!0),this.isNavigating=!1;return}o||i?(this.#n=_(this.#n,o?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#n]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):t?this.value=oi(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(e.name==="tab"||this.isNavigating&&e.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(n){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(n)?this.selectedValues=this.selectedValues.filter((e)=>e!==n):this.selectedValues=[...this.selectedValues,n]:this.selectedValues=[n])}#o(n){if(n!==this.#i){this.#i=n;let e=this.options;n&&this.#r?this.filteredOptions=e.filter((t)=>this.#r?.(n,t)):this.filteredOptions=[...e];let o=ni(this.focusedValue,this.filteredOptions);this.#n=_(o,0,this.filteredOptions);let i=this.filteredOptions[this.#n];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class Dn extends T{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(r){super(r,!1),this.value=!!r.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(n)=>{this.output.write(q.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var ti={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function ve(r){return[...r].map((n)=>ti[n])}function ai(r){let n=new Intl.DateTimeFormat(r,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),e=[],o="/";for(let i of n)i.type==="literal"?o=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&e.push({type:i.type,len:i.type==="year"?4:2});return{segments:e,separator:o}}function yn(r){return Number.parseInt((r||"0").replace(/_/g,"0"),10)||0}function jr(r){return{year:yn(r.year),month:yn(r.month),day:yn(r.day)}}function Fn(r,n){return new Date(r||2001,n||1,0).getDate()}function Fe(r){let{year:n,month:e,day:o}=jr(r);if(!n||n<0||n>9999||!e||e<1||e>12||!o||o<1)return;let i=new Date(Date.UTC(n,e-1,o));if(!(i.getUTCFullYear()!==n||i.getUTCMonth()!==e-1||i.getUTCDate()!==o))return{year:n,month:e,day:o}}function Ce(r){let n=Fe(r);return n?new Date(Date.UTC(n.year,n.month-1,n.day)):void 0}function si(r,n,e,o){let i=e?{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate()}:null,t=o?{year:o.getUTCFullYear(),month:o.getUTCMonth()+1,day:o.getUTCDate()}:null;return r==="year"?{min:i?.year??1,max:t?.year??9999}:r==="month"?{min:i&&n.year===i.year?i.month:1,max:t&&n.year===t.year?t.month:12}:{min:i&&n.year===i.year&&n.month===i.month?i.day:1,max:t&&n.year===t.year&&n.month===t.month?t.day:Fn(n.year,n.month)}}class ke extends T{#n;#i;#r;#t;#s;#e={segmentIndex:0,positionInSegment:0};#o=!0;#a=null;inlineError="";get segmentCursor(){return{...this.#e}}get segmentValues(){return{...this.#r}}get segments(){return this.#n}get separator(){return this.#i}get formattedValue(){return this.#p(this.#r)}#p(r){return this.#n.map((n)=>r[n.type]).join(this.#i)}#c(){this._setUserInput(this.#p(this.#r)),this._setValue(Ce(this.#r)??void 0)}constructor(r){let n=r.format?{segments:ve(r.format),separator:r.separator??"/"}:ai(r.locale),e=r.separator??n.separator,o=r.format?ve(r.format):n.segments,i=r.initialValue??r.defaultValue,t=i?{year:String(i.getUTCFullYear()).padStart(4,"0"),month:String(i.getUTCMonth()+1).padStart(2,"0"),day:String(i.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=o.map((s)=>t[s.type]).join(e);super({...r,initialUserInput:a},!1),this.#n=o,this.#i=e,this.#r=t,this.#t=r.minDate,this.#s=r.maxDate,this.#c(),this.on("cursor",(s)=>this.#d(s)),this.on("key",(s,c)=>this.#g(s,c)),this.on("finalize",()=>this.#h(r))}#u(){let r=Math.max(0,Math.min(this.#e.segmentIndex,this.#n.length-1)),n=this.#n[r];if(n)return this.#e.positionInSegment=Math.max(0,Math.min(this.#e.positionInSegment,n.len-1)),{segment:n,index:r}}#f(r){this.inlineError="",this.#a=null;let n=this.#u();n&&(this.#e.segmentIndex=Math.max(0,Math.min(this.#n.length-1,n.index+r)),this.#e.positionInSegment=0,this.#o=!0)}#m(r){let n=this.#u();if(!n)return;let{segment:e}=n,o=this.#r[e.type],i=!o||o.replace(/_/g,"")==="",t=Number.parseInt((o||"0").replace(/_/g,"0"),10)||0,a=si(e.type,jr(this.#r),this.#t,this.#s),s;i?s=r===1?a.min:a.max:s=Math.max(Math.min(a.max,t+r),a.min),this.#r={...this.#r,[e.type]:s.toString().padStart(e.len,"0")},this.#o=!0,this.#a=null,this.#c()}#d(r){if(r)switch(r){case"right":return this.#f(1);case"left":return this.#f(-1);case"up":return this.#m(1);case"down":return this.#m(-1)}}#g(r,n){if(n?.name==="backspace"||n?.sequence==="\x7F"||n?.sequence==="\b"||r==="\x7F"||r==="\b"){this.inlineError="";let e=this.#u();if(!e)return;if(!this.#r[e.segment.type].replace(/_/g,"")){this.#f(-1);return}this.#r[e.segment.type]="_".repeat(e.segment.len),this.#o=!0,this.#e.positionInSegment=0,this.#c();return}if(n?.name==="tab"){this.inlineError="";let e=this.#u();if(!e)return;let o=n.shift?-1:1,i=e.index+o;i>=0&&i<this.#n.length&&(this.#e.segmentIndex=i,this.#e.positionInSegment=0,this.#o=!0);return}if(r&&/^[0-9]$/.test(r)){let e=this.#u();if(!e)return;let{segment:o}=e,i=!this.#r[o.type].replace(/_/g,"");if(this.#o&&this.#a!==null&&!i){let p=this.#a+r,h={...this.#r,[o.type]:p},l=this.#l(h,o);if(l){this.inlineError=l,this.#a=null,this.#o=!1;return}this.inlineError="",this.#r[o.type]=p,this.#a=null,this.#o=!1,this.#c(),e.index<this.#n.length-1&&(this.#e.segmentIndex=e.index+1,this.#e.positionInSegment=0,this.#o=!0);return}this.#o&&!i&&(this.#r[o.type]="_".repeat(o.len),this.#e.positionInSegment=0),this.#o=!1,this.#a=null;let t=this.#r[o.type],a=t.indexOf("_"),s=a>=0?a:Math.min(this.#e.positionInSegment,o.len-1);if(s<0||s>=o.len)return;let c=t.slice(0,s)+r+t.slice(s+1),u=!1;if(s===0&&t==="__"&&(o.type==="month"||o.type==="day")){let p=Number.parseInt(r,10);c=`0${r}`,u=p<=(o.type==="month"?1:2)}if(o.type==="year"&&(c=(t.replace(/_/g,"")+r).padStart(o.len,"_")),!c.includes("_")){let p={...this.#r,[o.type]:c},h=this.#l(p,o);if(h){this.inlineError=h;return}}this.inlineError="",this.#r[o.type]=c;let d=c.includes("_")?void 0:Fe(this.#r);if(d){let{year:p,month:h}=d,l=Fn(p,h);this.#r={year:String(Math.max(0,Math.min(9999,p))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(l,d.day))).padStart(2,"0")}}this.#c();let g=c.indexOf("_");u?(this.#o=!0,this.#a=r):g>=0?this.#e.positionInSegment=g:a>=0&&e.index<this.#n.length-1?(this.#e.segmentIndex=e.index+1,this.#e.positionInSegment=0,this.#o=!0):this.#e.positionInSegment=Math.min(s+1,o.len-1)}}#l(r,n){let{month:e,day:o}=jr(r);if(n.type==="month"&&(e<0||e>12))return M.date.messages.invalidMonth;if(n.type==="day"&&(o<0||o>31))return M.date.messages.invalidDay(31,"any month")}#h(r){let{year:n,month:e,day:o}=jr(this.#r);if(n&&e&&o){let i=Fn(n,e);this.#r={...this.#r,day:String(Math.min(o,i)).padStart(2,"0")}}this.value=Ce(this.#r)??r.defaultValue??void 0}}var ci=class extends T{options;cursor=0;#n;getGroupItems(n){return this.options.filter((e)=>e.group===n)}isGroupSelected(n){let e=this.getGroupItems(n),o=this.value;return o===void 0?!1:e.every((i)=>o.includes(i.value))}toggleValue(){let n=this.options[this.cursor];if(n!==void 0)if(this.value===void 0&&(this.value=[]),n.group===!0){let e=n.value,o=this.getGroupItems(e);this.isGroupSelected(e)?this.value=this.value.filter((i)=>o.findIndex((t)=>t.value===i)===-1):this.value=[...this.value,...o.map((i)=>i.value)],this.value=Array.from(new Set(this.value))}else{let e=this.value.includes(n.value);this.value=e?this.value.filter((o)=>o!==n.value):[...this.value,n.value]}}constructor(n){super(n,!1);let{options:e}=n;this.#n=n.selectableGroups!==!1,this.options=Object.entries(e).flatMap(([o,i])=>[{value:o,group:!0,label:o},...i.map((t)=>({...t,group:o}))]),this.value=[...n.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:o})=>o===n.cursorAt),this.#n?0:1),this.on("cursor",(o)=>{switch(o){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#n&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},ui=new Set(["up","down","left","right"]);class Re extends T{#n=!1;#i;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let r=this.userInput;if(this.cursor>=r.length)return`${r}\u2588`;let n=r.slice(0,this.cursor),e=r.slice(this.cursor,this.cursor+1),o=r.slice(this.cursor+1);return e===`
18
18
  `?`${n}\u2588
19
19
  ${o}`:`${n}${Mr("inverse",e)}${o}`}get cursor(){return this._cursor}#r(r){if(this.userInput.length===0){this._setUserInput(r);return}this._setUserInput(this.userInput.slice(0,this.cursor)+r+this.userInput.slice(this.cursor))}#t(r){let n=this.value??"";switch(r){case"up":this._cursor=Nr(this._cursor,0,-1,n);return;case"down":this._cursor=Nr(this._cursor,0,1,n);return;case"left":this._cursor=Nr(this._cursor,-1,0,n);return;case"right":this._cursor=Nr(this._cursor,1,0,n);return}}_shouldSubmit(r,n){if(this.#i)return this.focused==="submit"?!0:(this.#r(`
20
20
  `),this._cursor++,!1);let e=this.#n;return this.#n=!0,e&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
21
21
  `&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#r(`
22
- `),this._cursor++,!1)}constructor(r){let n=r.initialUserInput??r.initialValue;super({...r,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#i=r.showSubmit??!1,this.on("key",(e,o)=>{if(o?.name&&ci.has(o.name)){this.#n=!1,this.#t(o.name);return}if(e==="\t"&&this.#i){this.focused=this.focused==="editor"?"submit":"editor";return}if(o?.name!=="return"){if(this.#n=!1,o?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(o?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}e&&(this.#i&&this.focused==="submit"&&(this.focused="editor"),this.#r(e??""),this._cursor++)}}),this.on("userInput",(e)=>{this._setValue(e)}),this.on("finalize",()=>{this.value||(this.value=r.defaultValue),this.value===void 0&&(this.value="")})}}class Dn extends T{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((r)=>r.disabled!==!0)}toggleAll(){let r=this._enabledOptions,n=this.value!==void 0&&this.value.length===r.length;this.value=n?[]:r.map((e)=>e.value)}toggleInvert(){let r=this.value;if(!r)return;let n=this._enabledOptions.filter((e)=>!r.includes(e.value));this.value=n.map((e)=>e.value)}toggleValue(){this.value===void 0&&(this.value=[]);let r=this.value.includes(this._value);this.value=r?this.value.filter((n)=>n!==this._value):[...this.value,this._value]}constructor(r){super(r,!1),this.options=r.options,this.value=[...r.initialValues??[]];let n=Math.max(this.options.findIndex(({value:e})=>e===r.cursorAt),0);this.cursor=this.options[n]?.disabled?_(n,1,this.options):n,this.on("key",(e,o)=>{o.name==="a"&&this.toggleAll(),o.name==="i"&&this.toggleInvert()}),this.on("cursor",(e)=>{switch(e){case"left":case"up":this.cursor=_(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}var ke=class extends T{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let n=this._selectedValue;this.value=n===void 0?void 0:n.value}constructor(n){super(n,!1),this.options=n.options;let e=this.options.findIndex(({value:i})=>i===n.initialValue),o=e===-1?0:e;this.cursor=this.options[o]?.disabled?_(o,1,this.options):o,this.changeValue(),this.on("cursor",(i)=>{switch(i){case"left":case"up":this.cursor=_(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_(this.cursor,1,this.options);break}this.changeValue()})}};class In extends T{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let r=this.userInput;if(this.cursor>=r.length)return`${this.userInput}\u2588`;let n=r.slice(0,this.cursor),e=r.slice(this.cursor,this.cursor+1),o=r.slice(this.cursor+1);return`${n}${Mr("inverse",e)}${o}`}get cursor(){return this._cursor}constructor(r){super({...r,initialUserInput:r.initialUserInput??r.initialValue}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=r.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as u,stripVTControlCharacters as ca}from"util";import Z from"process";var $r=re(Cn(),1);function fi(){if(Z.platform!=="win32")return Z.env.TERM!=="linux";return Boolean(Z.env.CI)||Boolean(Z.env.WT_SESSION)||Boolean(Z.env.TERMINUS_SUBLIME)||Z.env.ConEmuTask==="{cmd::Cmder}"||Z.env.TERM_PROGRAM==="Terminus-Sublime"||Z.env.TERM_PROGRAM==="vscode"||Z.env.TERM==="xterm-256color"||Z.env.TERM==="alacritty"||Z.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var En=fi(),ui=()=>process.env.CI==="true";var k=(r,n)=>En?r:n,pi=k("\u25C6","*"),Ee=k("\u25A0","x"),He=k("\u25B2","x"),qr=k("\u25C7","o"),mi=k("\u250C","T"),$=k("\u2502","|"),ir=k("\u2514","\u2014"),ma=k("\u2510","T"),la=k("\u2518","\u2014"),Hn=k("\u25CF",">"),xr=k("\u25CB"," "),li=k("\u25FB","[\u2022]"),Re=k("\u25FC","[+]"),Le=k("\u25FB","[ ]"),da=k("\u25AA","\u2022"),De=k("\u2500","-"),di=k("\u256E","+"),gi=k("\u251C","+"),hi=k("\u256F","+"),bi=k("\u2570","+"),ga=k("\u256D","+"),vi=k("\u25CF","\u2022"),wi=k("\u25C6","*"),Ci=k("\u25B2","!"),$i=k("\u25A0","x"),zr=(r)=>{switch(r){case"initial":case"active":return u("cyan",pi);case"cancel":return u("red",Ee);case"error":return u("yellow",He);case"submit":return u("green",qr)}},Ue=(r)=>{switch(r){case"initial":case"active":return u("cyan",$);case"cancel":return u("red",$);case"error":return u("yellow",$);case"submit":return u("green",$)}};function Ne(r,n){let e=[`${n?`${u("cyan",$)} `:""}${r.join(" \u2022 ")}`];return n&&e.push(u("cyan",ir)),e}var Ie=(r,n,e,o,i,t=!1)=>{let a=n,s=0;if(t)for(let c=o-1;c>=e;c--){let f=r[c];if(f&&(a-=f.length),s++,a<=i)break}else for(let c=e;c<o;c++){let f=r[c];if(f&&(a-=f.length),s++,a<=i)break}return{lineCount:a,removals:s}},Un=({cursor:r,options:n,style:e,output:o=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:t=0,rowPadding:a=4})=>{let s=wr(o)-t,c=Rn(o),f=u("dim","..."),d=Math.max(c-a,0),g=Math.max(Math.min(i,d),5),p=0;r>=g-3&&(p=Math.max(Math.min(r-g+3,n.length-g),0));let h=g<n.length&&p>0,l=g<n.length&&p+g<n.length,b=Math.min(p+g,n.length),F=[],I=0;h&&I++,l&&I++;let y=p+(h?1:0),A=b-(l?1:0);for(let P=y;P<A;P++){let j=n[P],H=j?e(j,P===r):"",L=V(H,s,{hard:!0,trim:!1}).split(`
23
- `);F.push(L),I+=L.length}if(I>d){let P=0,j=0,H=I,L=r-y,N=d,X=()=>Ie(F,H,0,L,N),W=()=>Ie(F,H,L+1,F.length,N,!0);h?({lineCount:H,removals:P}=X(),H>N&&(l||(N-=1),{lineCount:H,removals:j}=W())):(l||(N-=1),{lineCount:H,removals:j}=W(),H>N&&(N-=1,{lineCount:H,removals:P}=X())),P>0&&(h=!0,F.splice(0,P)),j>0&&(l=!0,F.splice(F.length-j,j))}let E=[];h&&E.push(f);for(let P of F)for(let j of P)E.push(j);return l&&E.push(f),E};var je=(r)=>{let n=r.active??"Yes",e=r.inactive??"No";return new Ln({active:n,inactive:e,signal:r.signal,input:r.input,output:r.output,initialValue:r.initialValue??!0,render(){let o=r.withGuide??M.withGuide,i=`${zr(this.state)} `,t=o?`${u("gray",$)} `:"",a=or(r.output,r.message,t,i),s=`${o?`${u("gray",$)}
22
+ `),this._cursor++,!1)}constructor(r){let n=r.initialUserInput??r.initialValue;super({...r,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#i=r.showSubmit??!1,this.on("key",(e,o)=>{if(o?.name&&ui.has(o.name)){this.#n=!1,this.#t(o.name);return}if(e==="\t"&&this.#i){this.focused=this.focused==="editor"?"submit":"editor";return}if(o?.name!=="return"){if(this.#n=!1,o?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(o?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}e&&(this.#i&&this.focused==="submit"&&(this.focused="editor"),this.#r(e??""),this._cursor++)}}),this.on("userInput",(e)=>{this._setValue(e)}),this.on("finalize",()=>{this.value||(this.value=r.defaultValue),this.value===void 0&&(this.value="")})}}class In extends T{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((r)=>r.disabled!==!0)}toggleAll(){let r=this._enabledOptions,n=this.value!==void 0&&this.value.length===r.length;this.value=n?[]:r.map((e)=>e.value)}toggleInvert(){let r=this.value;if(!r)return;let n=this._enabledOptions.filter((e)=>!r.includes(e.value));this.value=n.map((e)=>e.value)}toggleValue(){this.value===void 0&&(this.value=[]);let r=this.value.includes(this._value);this.value=r?this.value.filter((n)=>n!==this._value):[...this.value,this._value]}constructor(r){super(r,!1),this.options=r.options,this.value=[...r.initialValues??[]];let n=Math.max(this.options.findIndex(({value:e})=>e===r.cursorAt),0);this.cursor=this.options[n]?.disabled?_(n,1,this.options):n,this.on("key",(e,o)=>{o.name==="a"&&this.toggleAll(),o.name==="i"&&this.toggleInvert()}),this.on("cursor",(e)=>{switch(e){case"left":case"up":this.cursor=_(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}var Le=class extends T{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let n=this._selectedValue;this.value=n===void 0?void 0:n.value}constructor(n){super(n,!1),this.options=n.options;let e=this.options.findIndex(({value:i})=>i===n.initialValue),o=e===-1?0:e;this.cursor=this.options[o]?.disabled?_(o,1,this.options):o,this.changeValue(),this.on("cursor",(i)=>{switch(i){case"left":case"up":this.cursor=_(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_(this.cursor,1,this.options);break}this.changeValue()})}};class En extends T{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let r=this.userInput;if(this.cursor>=r.length)return`${this.userInput}\u2588`;let n=r.slice(0,this.cursor),e=r.slice(this.cursor,this.cursor+1),o=r.slice(this.cursor+1);return`${n}${Mr("inverse",e)}${o}`}get cursor(){return this._cursor}constructor(r){super({...r,initialUserInput:r.initialUserInput??r.initialValue}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=r.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as f,stripVTControlCharacters as ua}from"util";import Z from"process";var $r=ee($n(),1);function fi(){if(Z.platform!=="win32")return Z.env.TERM!=="linux";return Boolean(Z.env.CI)||Boolean(Z.env.WT_SESSION)||Boolean(Z.env.TERMINUS_SUBLIME)||Z.env.ConEmuTask==="{cmd::Cmder}"||Z.env.TERM_PROGRAM==="Terminus-Sublime"||Z.env.TERM_PROGRAM==="vscode"||Z.env.TERM==="xterm-256color"||Z.env.TERM==="alacritty"||Z.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Hn=fi(),pi=()=>process.env.CI==="true";var k=(r,n)=>Hn?r:n,mi=k("\u25C6","*"),Ue=k("\u25A0","x"),Ne=k("\u25B2","x"),qr=k("\u25C7","o"),li=k("\u250C","T"),$=k("\u2502","|"),ir=k("\u2514","\u2014"),la=k("\u2510","T"),da=k("\u2518","\u2014"),Un=k("\u25CF",">"),xr=k("\u25CB"," "),di=k("\u25FB","[\u2022]"),De=k("\u25FC","[+]"),Ie=k("\u25FB","[ ]"),ga=k("\u25AA","\u2022"),Ee=k("\u2500","-"),gi=k("\u256E","+"),hi=k("\u251C","+"),bi=k("\u256F","+"),wi=k("\u2570","+"),ha=k("\u256D","+"),vi=k("\u25CF","\u2022"),Ci=k("\u25C6","*"),$i=k("\u25B2","!"),yi=k("\u25A0","x"),zr=(r)=>{switch(r){case"initial":case"active":return f("cyan",mi);case"cancel":return f("red",Ue);case"error":return f("yellow",Ne);case"submit":return f("green",qr)}},Ae=(r)=>{switch(r){case"initial":case"active":return f("cyan",$);case"cancel":return f("red",$);case"error":return f("yellow",$);case"submit":return f("green",$)}};function je(r,n){let e=[`${n?`${f("cyan",$)} `:""}${r.join(" \u2022 ")}`];return n&&e.push(f("cyan",ir)),e}var He=(r,n,e,o,i,t=!1)=>{let a=n,s=0;if(t)for(let c=o-1;c>=e;c--){let u=r[c];if(u&&(a-=u.length),s++,a<=i)break}else for(let c=e;c<o;c++){let u=r[c];if(u&&(a-=u.length),s++,a<=i)break}return{lineCount:a,removals:s}},Nn=({cursor:r,options:n,style:e,output:o=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:t=0,rowPadding:a=4})=>{let s=vr(o)-t,c=Ln(o),u=f("dim","..."),d=Math.max(c-a,0),g=Math.max(Math.min(i,d),5),p=0;r>=g-3&&(p=Math.max(Math.min(r-g+3,n.length-g),0));let h=g<n.length&&p>0,l=g<n.length&&p+g<n.length,b=Math.min(p+g,n.length),F=[],I=0;h&&I++,l&&I++;let y=p+(h?1:0),j=b-(l?1:0);for(let P=y;P<j;P++){let A=n[P],H=A?e(A,P===r):"",L=V(H,s,{hard:!0,trim:!1}).split(`
23
+ `);F.push(L),I+=L.length}if(I>d){let P=0,A=0,H=I,L=r-y,N=d,X=()=>He(F,H,0,L,N),W=()=>He(F,H,L+1,F.length,N,!0);h?({lineCount:H,removals:P}=X(),H>N&&(l||(N-=1),{lineCount:H,removals:A}=W())):(l||(N-=1),{lineCount:H,removals:A}=W(),H>N&&(N-=1,{lineCount:H,removals:P}=X())),P>0&&(h=!0,F.splice(0,P)),A>0&&(l=!0,F.splice(F.length-A,A))}let E=[];h&&E.push(u);for(let P of F)for(let A of P)E.push(A);return l&&E.push(u),E};var Me=(r)=>{let n=r.active??"Yes",e=r.inactive??"No";return new Dn({active:n,inactive:e,signal:r.signal,input:r.input,output:r.output,initialValue:r.initialValue??!0,render(){let o=r.withGuide??M.withGuide,i=`${zr(this.state)} `,t=o?`${f("gray",$)} `:"",a=or(r.output,r.message,t,i),s=`${o?`${f("gray",$)}
24
24
  `:""}${a}
25
- `,c=this.value?n:e;switch(this.state){case"submit":{let f=o?`${u("gray",$)} `:"";return`${s}${f}${u("dim",c)}`}case"cancel":{let f=o?`${u("gray",$)} `:"";return`${s}${f}${u(["strikethrough","dim"],c)}${o?`
26
- ${u("gray",$)}`:""}`}default:{let f=o?`${u("cyan",$)} `:"",d=o?u("cyan",ir):"";return`${s}${f}${this.value?`${u("green",Hn)} ${n}`:`${u("dim",xr)} ${u("dim",n)}`}${r.vertical?o?`
27
- ${u("cyan",$)} `:`
28
- `:` ${u("dim","/")} `}${this.value?`${u("dim",xr)} ${u("dim",e)}`:`${u("green",Hn)} ${e}`}
25
+ `,c=this.value?n:e;switch(this.state){case"submit":{let u=o?`${f("gray",$)} `:"";return`${s}${u}${f("dim",c)}`}case"cancel":{let u=o?`${f("gray",$)} `:"";return`${s}${u}${f(["strikethrough","dim"],c)}${o?`
26
+ ${f("gray",$)}`:""}`}default:{let u=o?`${f("cyan",$)} `:"",d=o?f("cyan",ir):"";return`${s}${u}${this.value?`${f("green",Un)} ${n}`:`${f("dim",xr)} ${f("dim",n)}`}${r.vertical?o?`
27
+ ${f("cyan",$)} `:`
28
+ `:` ${f("dim","/")} `}${this.value?`${f("dim",xr)} ${f("dim",e)}`:`${f("green",Un)} ${e}`}
29
29
  ${d}
30
- `}}}}).prompt()};var Wr=async(r,n)=>{let e={},o=Object.keys(r);for(let i of o){let t=r[i],a=await t({results:e})?.catch((s)=>{throw s});if(typeof n?.onCancel=="function"&&vr(a)){e[i]="canceled",n.onCancel({results:e});continue}e[i]=a}return e},yi=[`${u("dim","\u2191/\u2193")} to navigate`,`${u("dim","Space:")} select`,`${u("dim","Enter:")} confirm`],Cr=(r,n)=>r.split(`
30
+ `}}}}).prompt()};var Wr=async(r,n)=>{let e={},o=Object.keys(r);for(let i of o){let t=r[i],a=await t({results:e})?.catch((s)=>{throw s});if(typeof n?.onCancel=="function"&&wr(a)){e[i]="canceled",n.onCancel({results:e});continue}e[i]=a}return e},Pi=[`${f("dim","\u2191/\u2193")} to navigate`,`${f("dim","Space:")} select`,`${f("dim","Enter:")} confirm`],Cr=(r,n)=>r.split(`
31
31
  `).map((e)=>n(e)).join(`
32
- `),Ae=(r)=>{let n=(i,t)=>{let a=i.label??String(i.value);return t==="disabled"?`${u("gray",Le)} ${Cr(a,(s)=>u(["strikethrough","gray"],s))}${i.hint?` ${u("dim",`(${i.hint??"disabled"})`)}`:""}`:t==="active"?`${u("cyan",li)} ${a}${i.hint?` ${u("dim",`(${i.hint})`)}`:""}`:t==="selected"?`${u("green",Re)} ${Cr(a,(s)=>u("dim",s))}${i.hint?` ${u("dim",`(${i.hint})`)}`:""}`:t==="cancelled"?`${Cr(a,(s)=>u(["strikethrough","dim"],s))}`:t==="active-selected"?`${u("green",Re)} ${a}${i.hint?` ${u("dim",`(${i.hint})`)}`:""}`:t==="submitted"?`${Cr(a,(s)=>u("dim",s))}`:`${u("dim",Le)} ${Cr(a,(s)=>u("dim",s))}`},e=r.required??!0,o=r.showInstructions??!0;return new Dn({options:r.options,signal:r.signal,input:r.input,output:r.output,initialValues:r.initialValues,required:e,cursorAt:r.cursorAt,validate(i){if(e&&(i===void 0||i.length===0))return`Please select at least one option.
33
- ${u("reset",u("dim",`Press ${u(["gray","bgWhite","inverse"]," space ")} to select, ${u("gray",u("bgWhite",u("inverse"," enter ")))} to submit`))}`},render(){let i=r.withGuide??M.withGuide,t=or(r.output,r.message,i?`${Ue(this.state)} `:"",`${zr(this.state)} `),a=`${i?`${u("gray",$)}
32
+ `),Ge=(r)=>{let n=(i,t)=>{let a=i.label??String(i.value);return t==="disabled"?`${f("gray",Ie)} ${Cr(a,(s)=>f(["strikethrough","gray"],s))}${i.hint?` ${f("dim",`(${i.hint??"disabled"})`)}`:""}`:t==="active"?`${f("cyan",di)} ${a}${i.hint?` ${f("dim",`(${i.hint})`)}`:""}`:t==="selected"?`${f("green",De)} ${Cr(a,(s)=>f("dim",s))}${i.hint?` ${f("dim",`(${i.hint})`)}`:""}`:t==="cancelled"?`${Cr(a,(s)=>f(["strikethrough","dim"],s))}`:t==="active-selected"?`${f("green",De)} ${a}${i.hint?` ${f("dim",`(${i.hint})`)}`:""}`:t==="submitted"?`${Cr(a,(s)=>f("dim",s))}`:`${f("dim",Ie)} ${Cr(a,(s)=>f("dim",s))}`},e=r.required??!0,o=r.showInstructions??!0;return new In({options:r.options,signal:r.signal,input:r.input,output:r.output,initialValues:r.initialValues,required:e,cursorAt:r.cursorAt,validate(i){if(e&&(i===void 0||i.length===0))return`Please select at least one option.
33
+ ${f("reset",f("dim",`Press ${f(["gray","bgWhite","inverse"]," space ")} to select, ${f("gray",f("bgWhite",f("inverse"," enter ")))} to submit`))}`},render(){let i=r.withGuide??M.withGuide,t=or(r.output,r.message,i?`${Ae(this.state)} `:"",`${zr(this.state)} `),a=`${i?`${f("gray",$)}
34
34
  `:""}${t}
35
- `,s=this.value??[],c=(f,d)=>{if(f.disabled)return n(f,"disabled");let g=s.includes(f.value);return d&&g?n(f,"active-selected"):g?n(f,"selected"):n(f,d?"active":"inactive")};switch(this.state){case"submit":{let f=this.options.filter(({value:g})=>s.includes(g)).map((g)=>n(g,"submitted")).join(u("dim",", "))||u("dim","none"),d=or(r.output,f,i?`${u("gray",$)} `:"");return`${a}${d}`}case"cancel":{let f=this.options.filter(({value:g})=>s.includes(g)).map((g)=>n(g,"cancelled")).join(u("dim",", "));if(f.trim()==="")return`${a}${u("gray",$)}`;let d=or(r.output,f,i?`${u("gray",$)} `:"");return`${a}${d}${i?`
36
- ${u("gray",$)}`:""}`}case"error":{let f=i?`${u("yellow",$)} `:"",d=this.error.split(`
37
- `).map((h,l)=>l===0?`${i?`${u("yellow",ir)} `:""}${u("yellow",h)}`:` ${h}`).join(`
35
+ `,s=this.value??[],c=(u,d)=>{if(u.disabled)return n(u,"disabled");let g=s.includes(u.value);return d&&g?n(u,"active-selected"):g?n(u,"selected"):n(u,d?"active":"inactive")};switch(this.state){case"submit":{let u=this.options.filter(({value:g})=>s.includes(g)).map((g)=>n(g,"submitted")).join(f("dim",", "))||f("dim","none"),d=or(r.output,u,i?`${f("gray",$)} `:"");return`${a}${d}`}case"cancel":{let u=this.options.filter(({value:g})=>s.includes(g)).map((g)=>n(g,"cancelled")).join(f("dim",", "));if(u.trim()==="")return`${a}${f("gray",$)}`;let d=or(r.output,u,i?`${f("gray",$)} `:"");return`${a}${d}${i?`
36
+ ${f("gray",$)}`:""}`}case"error":{let u=i?`${f("yellow",$)} `:"",d=this.error.split(`
37
+ `).map((h,l)=>l===0?`${i?`${f("yellow",ir)} `:""}${f("yellow",h)}`:` ${h}`).join(`
38
38
  `),g=a.split(`
39
39
  `).length,p=d.split(`
40
- `).length+1;return`${a}${f}${Un({output:r.output,options:this.options,cursor:this.cursor,maxItems:r.maxItems,columnPadding:f.length,rowPadding:g+p,style:c}).join(`
41
- ${f}`)}
40
+ `).length+1;return`${a}${u}${Nn({output:r.output,options:this.options,cursor:this.cursor,maxItems:r.maxItems,columnPadding:u.length,rowPadding:g+p,style:c}).join(`
41
+ ${u}`)}
42
42
  ${d}
43
- `}default:{let f=i?`${u("cyan",$)} `:"",d=a.split(`
44
- `).length,g=o?Ne(yi,i):i?[u("cyan",ir)]:[],p=g.join(`
45
- `),h=g.length+1;return`${a}${f}${Un({output:r.output,options:this.options,cursor:this.cursor,maxItems:r.maxItems,columnPadding:f.length,rowPadding:d+h,style:c}).join(`
46
- ${f}`)}
43
+ `}default:{let u=i?`${f("cyan",$)} `:"",d=a.split(`
44
+ `).length,g=o?je(Pi,i):i?[f("cyan",ir)]:[],p=g.join(`
45
+ `),h=g.length+1;return`${a}${u}${Nn({output:r.output,options:this.options,cursor:this.cursor,maxItems:r.maxItems,columnPadding:u.length,rowPadding:d+h,style:c}).join(`
46
+ ${u}`)}
47
47
  ${p}
48
- `}}}}).prompt()};var v={message:(r=[],{symbol:n=u("gray",$),secondarySymbol:e=u("gray",$),output:o=process.stdout,spacing:i=1,withGuide:t}={})=>{let a=[],s=t??M.withGuide,c=s?e:"",f=s?`${n} `:"",d=s?`${e} `:"";for(let p=0;p<i;p++)a.push(c);let g=Array.isArray(r)?r:r.split(`
49
- `);if(g.length>0){let[p,...h]=g;p.length>0?a.push(`${f}${p}`):a.push(s?n:"");for(let l of h)l.length>0?a.push(`${d}${l}`):a.push(s?e:"")}o.write(`${a.join(`
48
+ `}}}}).prompt()};var w={message:(r=[],{symbol:n=f("gray",$),secondarySymbol:e=f("gray",$),output:o=process.stdout,spacing:i=1,withGuide:t}={})=>{let a=[],s=t??M.withGuide,c=s?e:"",u=s?`${n} `:"",d=s?`${e} `:"";for(let p=0;p<i;p++)a.push(c);let g=Array.isArray(r)?r:r.split(`
49
+ `);if(g.length>0){let[p,...h]=g;p.length>0?a.push(`${u}${p}`):a.push(s?n:"");for(let l of h)l.length>0?a.push(`${d}${l}`):a.push(s?e:"")}o.write(`${a.join(`
50
50
  `)}
51
- `)},info:(r,n)=>{v.message(r,{...n,symbol:u("blue",vi)})},success:(r,n)=>{v.message(r,{...n,symbol:u("green",wi)})},step:(r,n)=>{v.message(r,{...n,symbol:u("green",qr)})},warn:(r,n)=>{v.message(r,{...n,symbol:u("yellow",Ci)})},warning:(r,n)=>{v.warn(r,n)},error:(r,n)=>{v.message(r,{...n,symbol:u("red",$i)})}};var Jr=(r="",n)=>{let e=n?.output??process.stdout,o=n?.withGuide??M.withGuide?`${u("gray",mi)} `:"";e.write(`${o}${r}
52
- `)},Yr=(r="",n)=>{let e=n?.output??process.stdout,o=n?.withGuide??M.withGuide?`${u("gray",$)}
53
- ${u("gray",ir)} `:"";e.write(`${o}${r}
51
+ `)},info:(r,n)=>{w.message(r,{...n,symbol:f("blue",vi)})},success:(r,n)=>{w.message(r,{...n,symbol:f("green",Ci)})},step:(r,n)=>{w.message(r,{...n,symbol:f("green",qr)})},warn:(r,n)=>{w.message(r,{...n,symbol:f("yellow",$i)})},warning:(r,n)=>{w.warn(r,n)},error:(r,n)=>{w.message(r,{...n,symbol:f("red",yi)})}};var Yr=(r="",n)=>{let e=n?.output??process.stdout,o=n?.withGuide??M.withGuide?`${f("gray",li)} `:"";e.write(`${o}${r}
52
+ `)},Jr=(r="",n)=>{let e=n?.output??process.stdout,o=n?.withGuide??M.withGuide?`${f("gray",$)}
53
+ ${f("gray",ir)} `:"";e.write(`${o}${r}
54
54
 
55
- `)};var Pi=(r)=>r,Fi=(r,n,e)=>{let o={hard:!0,trim:!1},i=V(r,n,o).split(`
56
- `),t=i.reduce((c,f)=>Math.max(J(f),c),0),a=i.map(e).reduce((c,f)=>Math.max(J(f),c),0),s=n-(a-t);return V(r,s,o)},lr=(r="",n="",e)=>{let o=e?.output??Z.stdout,i=e?.withGuide??M.withGuide,t=e?.format??Pi,a=["",...Fi(r,wr(o)-6,t).split(`
57
- `).map(t),""],s=J(n),c=Math.max(a.reduce((p,h)=>{let l=J(h);return l>p?l:p},0),s)+2,f=a.map((p)=>`${u("gray",$)} ${p}${" ".repeat(c-J(p))}${u("gray",$)}`).join(`
58
- `),d=i?`${u("gray",$)}
59
- `:"",g=i?gi:bi;o.write(`${d}${u("green",qr)} ${u("reset",n)} ${u("gray",De.repeat(Math.max(c-s-1,1))+di)}
60
- ${f}
61
- ${u("gray",g+De.repeat(c+2)+hi)}
62
- `)};var ki=(r)=>u("magenta",r),Y=({indicator:r="dots",onCancel:n,output:e=process.stdout,cancelMessage:o,errorMessage:i,frames:t=En?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:a=En?80:120,signal:s,...c}={})=>{let f=ui(),d,g,p=!1,h=!1,l="",b,F=performance.now(),I=wr(e),y=c?.styleFrame??ki,A=(U)=>{let K=U>1?i??M.messages.error:o??M.messages.cancel;h=U===1,p&&(br(K,U),h&&typeof n=="function"&&n())},E=()=>A(2),P=()=>A(1),j=()=>{process.on("uncaughtExceptionMonitor",E),process.on("unhandledRejection",E),process.on("SIGINT",P),process.on("SIGTERM",P),process.on("exit",A),s&&s.addEventListener("abort",P)},H=()=>{process.removeListener("uncaughtExceptionMonitor",E),process.removeListener("unhandledRejection",E),process.removeListener("SIGINT",P),process.removeListener("SIGTERM",P),process.removeListener("exit",A),s&&s.removeEventListener("abort",P)},L=()=>{if(b===void 0)return;f&&e.write(`
55
+ `)};var Fi=(r)=>r,ki=(r,n,e)=>{let o={hard:!0,trim:!1},i=V(r,n,o).split(`
56
+ `),t=i.reduce((c,u)=>Math.max(Y(u),c),0),a=i.map(e).reduce((c,u)=>Math.max(Y(u),c),0),s=n-(a-t);return V(r,s,o)},lr=(r="",n="",e)=>{let o=e?.output??Z.stdout,i=e?.withGuide??M.withGuide,t=e?.format??Fi,a=["",...ki(r,vr(o)-6,t).split(`
57
+ `).map(t),""],s=Y(n),c=Math.max(a.reduce((p,h)=>{let l=Y(h);return l>p?l:p},0),s)+2,u=a.map((p)=>`${f("gray",$)} ${p}${" ".repeat(c-Y(p))}${f("gray",$)}`).join(`
58
+ `),d=i?`${f("gray",$)}
59
+ `:"",g=i?hi:wi;o.write(`${d}${f("green",qr)} ${f("reset",n)} ${f("gray",Ee.repeat(Math.max(c-s-1,1))+gi)}
60
+ ${u}
61
+ ${f("gray",g+Ee.repeat(c+2)+bi)}
62
+ `)};var Ri=(r)=>f("magenta",r),J=({indicator:r="dots",onCancel:n,output:e=process.stdout,cancelMessage:o,errorMessage:i,frames:t=Hn?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:a=Hn?80:120,signal:s,...c}={})=>{let u=pi(),d,g,p=!1,h=!1,l="",b,F=performance.now(),I=vr(e),y=c?.styleFrame??Ri,j=(U)=>{let K=U>1?i??M.messages.error:o??M.messages.cancel;h=U===1,p&&(br(K,U),h&&typeof n=="function"&&n())},E=()=>j(2),P=()=>j(1),A=()=>{process.on("uncaughtExceptionMonitor",E),process.on("unhandledRejection",E),process.on("SIGINT",P),process.on("SIGTERM",P),process.on("exit",j),s&&s.addEventListener("abort",P)},H=()=>{process.removeListener("uncaughtExceptionMonitor",E),process.removeListener("unhandledRejection",E),process.removeListener("SIGINT",P),process.removeListener("SIGTERM",P),process.removeListener("exit",j),s&&s.removeEventListener("abort",P)},L=()=>{if(b===void 0)return;u&&e.write(`
63
63
  `);let U=V(b,I,{hard:!0,trim:!1}).split(`
64
- `);U.length>1&&e.write($r.cursor.up(U.length-1)),e.write($r.cursor.to(0)),e.write($r.erase.down())},N=(U)=>U.replace(/\.+$/,""),X=(U)=>{let K=(performance.now()-U)/1000,S=Math.floor(K/60),B=Math.floor(K%60);return S>0?`[${S}m ${B}s]`:`[${B}s]`},W=c.withGuide??M.withGuide,Er=(U="")=>{p=!0,d=Ce({output:e}),l=N(U),F=performance.now(),W&&e.write(`${u("gray",$)}
65
- `);let K=0,S=0;j(),g=setInterval(()=>{if(f&&l===b)return;L(),b=l;let B=y(t[K]),Hr;if(f)Hr=`${B} ${l}...`;else if(r==="timer")Hr=`${B} ${l} ${X(F)}`;else{let ko=".".repeat(Math.floor(S)).slice(0,3);Hr=`${B} ${l}${ko}`}let Fo=V(Hr,I,{hard:!0,trim:!1});e.write(Fo),K=K+1<t.length?K+1:0,S=S<4?S+0.125:0},a)},br=(U="",K=0,S=!1)=>{if(!p)return;p=!1,clearInterval(g),L();let B=K===0?u("green",qr):K===1?u("red",Ee):u("red",He);l=U??l,S||(r==="timer"?e.write(`${B} ${l} ${X(F)}
64
+ `);U.length>1&&e.write($r.cursor.up(U.length-1)),e.write($r.cursor.to(0)),e.write($r.erase.down())},N=(U)=>U.replace(/\.+$/,""),X=(U)=>{let K=(performance.now()-U)/1000,S=Math.floor(K/60),B=Math.floor(K%60);return S>0?`[${S}m ${B}s]`:`[${B}s]`},W=c.withGuide??M.withGuide,Er=(U="")=>{p=!0,d=ye({output:e}),l=N(U),F=performance.now(),W&&e.write(`${f("gray",$)}
65
+ `);let K=0,S=0;A(),g=setInterval(()=>{if(u&&l===b)return;L(),b=l;let B=y(t[K]),Hr;if(u)Hr=`${B} ${l}...`;else if(r==="timer")Hr=`${B} ${l} ${X(F)}`;else{let Ro=".".repeat(Math.floor(S)).slice(0,3);Hr=`${B} ${l}${Ro}`}let ko=V(Hr,I,{hard:!0,trim:!1});e.write(ko),K=K+1<t.length?K+1:0,S=S<4?S+0.125:0},a)},br=(U="",K=0,S=!1)=>{if(!p)return;p=!1,clearInterval(g),L();let B=K===0?f("green",qr):K===1?f("red",Ue):f("red",Ne);l=U??l,S||(r==="timer"?e.write(`${B} ${l} ${X(F)}
66
66
  `):e.write(`${B} ${l}
67
- `)),H(),d()};return{start:Er,stop:(U="")=>br(U,0),message:(U="")=>{l=N(U??l)},cancel:(U="")=>br(U,1),error:(U="")=>br(U,2),clear:()=>br("",0,!0),get isCancelled(){return h}}},ha={light:k("\u2500","-"),heavy:k("\u2501","="),block:k("\u2588","#")};var Ri=[`${u("dim","\u2191/\u2193")} to navigate`,`${u("dim","Enter:")} confirm`],Gr=(r,n)=>r.includes(`
67
+ `)),H(),d()};return{start:Er,stop:(U="")=>br(U,0),message:(U="")=>{l=N(U??l)},cancel:(U="")=>br(U,1),error:(U="")=>br(U,2),clear:()=>br("",0,!0),get isCancelled(){return h}}},ba={light:k("\u2500","-"),heavy:k("\u2501","="),block:k("\u2588","#")};var Li=[`${f("dim","\u2191/\u2193")} to navigate`,`${f("dim","Enter:")} confirm`],Gr=(r,n)=>r.includes(`
68
68
  `)?r.split(`
69
69
  `).map((e)=>n(e)).join(`
70
- `):n(r),Me=(r)=>{let n=(o,i)=>{if(o===void 0)return"";let t=o.label??String(o.value);switch(i){case"disabled":return`${u("gray",xr)} ${Gr(t,(a)=>u("gray",a))}${o.hint?` ${u("dim",`(${o.hint??"disabled"})`)}`:""}`;case"selected":return`${Gr(t,(a)=>u("dim",a))}`;case"active":return`${u("green",Hn)} ${t}${o.hint?` ${u("dim",`(${o.hint})`)}`:""}`;case"cancelled":return`${Gr(t,(a)=>u(["strikethrough","dim"],a))}`;default:return`${u("dim",xr)} ${Gr(t,(a)=>u("dim",a))}`}},e=r.showInstructions??!0;return new ke({options:r.options,signal:r.signal,input:r.input,output:r.output,initialValue:r.initialValue,render(){let o=r.withGuide??M.withGuide,i=`${zr(this.state)} `,t=`${Ue(this.state)} `,a=or(r.output,r.message,t,i),s=`${o?`${u("gray",$)}
70
+ `):n(r),xe=(r)=>{let n=(o,i)=>{if(o===void 0)return"";let t=o.label??String(o.value);switch(i){case"disabled":return`${f("gray",xr)} ${Gr(t,(a)=>f("gray",a))}${o.hint?` ${f("dim",`(${o.hint??"disabled"})`)}`:""}`;case"selected":return`${Gr(t,(a)=>f("dim",a))}`;case"active":return`${f("green",Un)} ${t}${o.hint?` ${f("dim",`(${o.hint})`)}`:""}`;case"cancelled":return`${Gr(t,(a)=>f(["strikethrough","dim"],a))}`;default:return`${f("dim",xr)} ${Gr(t,(a)=>f("dim",a))}`}},e=r.showInstructions??!0;return new Le({options:r.options,signal:r.signal,input:r.input,output:r.output,initialValue:r.initialValue,render(){let o=r.withGuide??M.withGuide,i=`${zr(this.state)} `,t=`${Ae(this.state)} `,a=or(r.output,r.message,t,i),s=`${o?`${f("gray",$)}
71
71
  `:""}${a}
72
- `;switch(this.state){case"submit":{let c=o?`${u("gray",$)} `:"",f=or(r.output,n(this.options[this.cursor],"selected"),c);return`${s}${f}`}case"cancel":{let c=o?`${u("gray",$)} `:"",f=or(r.output,n(this.options[this.cursor],"cancelled"),c);return`${s}${f}${o?`
73
- ${u("gray",$)}`:""}`}default:{let c=o?`${u("cyan",$)} `:"",f=s.split(`
74
- `).length,d=e?Ne(Ri,o):o?[u("cyan",ir)]:[],g=d.join(`
75
- `),p=d.length+1;return`${s}${c}${Un({output:r.output,cursor:this.cursor,options:this.options,maxItems:r.maxItems,columnPadding:c.length,rowPadding:f+p,style:(h,l)=>n(h,h.disabled?"disabled":l?"active":"inactive")}).join(`
72
+ `;switch(this.state){case"submit":{let c=o?`${f("gray",$)} `:"",u=or(r.output,n(this.options[this.cursor],"selected"),c);return`${s}${u}`}case"cancel":{let c=o?`${f("gray",$)} `:"",u=or(r.output,n(this.options[this.cursor],"cancelled"),c);return`${s}${u}${o?`
73
+ ${f("gray",$)}`:""}`}default:{let c=o?`${f("cyan",$)} `:"",u=s.split(`
74
+ `).length,d=e?je(Li,o):o?[f("cyan",ir)]:[],g=d.join(`
75
+ `),p=d.length+1;return`${s}${c}${Nn({output:r.output,cursor:this.cursor,options:this.options,maxItems:r.maxItems,columnPadding:c.length,rowPadding:u+p,style:(h,l)=>n(h,h.disabled?"disabled":l?"active":"inactive")}).join(`
76
76
  ${c}`)}
77
77
  ${g}
78
- `}}}}).prompt()};var ba=`${u("gray",$)} `;var Ge=(r)=>new In({validate:r.validate,placeholder:r.placeholder,defaultValue:r.defaultValue,initialValue:r.initialValue,output:r.output,signal:r.signal,input:r.input,render(){let n=r?.withGuide??M.withGuide,e=`${`${n?`${u("gray",$)}
78
+ `}}}}).prompt()};var wa=`${f("gray",$)} `;var qe=(r)=>new En({validate:r.validate,placeholder:r.placeholder,defaultValue:r.defaultValue,initialValue:r.initialValue,output:r.output,signal:r.signal,input:r.input,render(){let n=r?.withGuide??M.withGuide,e=`${`${n?`${f("gray",$)}
79
79
  `:""}${zr(this.state)} `}${r.message}
80
- `,o=r.placeholder&&r.placeholder.length>0?u("inverse",r.placeholder[0])+u("dim",r.placeholder.slice(1)):u(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:o,t=this.value??"";switch(this.state){case"error":{let a=this.error?` ${u("yellow",this.error)}`:"",s=n?`${u("yellow",$)} `:"",c=n?u("yellow",ir):"";return`${e.trim()}
80
+ `,o=r.placeholder&&r.placeholder.length>0?f("inverse",r.placeholder[0])+f("dim",r.placeholder.slice(1)):f(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:o,t=this.value??"";switch(this.state){case"error":{let a=this.error?` ${f("yellow",this.error)}`:"",s=n?`${f("yellow",$)} `:"",c=n?f("yellow",ir):"";return`${e.trim()}
81
81
  ${s}${i}
82
82
  ${c}${a}
83
- `}case"submit":{let a=t?` ${u("dim",t)}`:"",s=n?u("gray",$):"";return`${e}${s}${a}`}case"cancel":{let a=t?` ${u(["strikethrough","dim"],t)}`:"",s=n?u("gray",$):"";return`${e}${s}${a}${t.trim()?`
84
- ${s}`:""}`}default:{let a=n?`${u("cyan",$)} `:"",s=n?u("cyan",ir):"";return`${e}${a}${i}
83
+ `}case"submit":{let a=t?` ${f("dim",t)}`:"",s=n?f("gray",$):"";return`${e}${s}${a}`}case"cancel":{let a=t?` ${f(["strikethrough","dim"],t)}`:"",s=n?f("gray",$):"";return`${e}${s}${a}${t.trim()?`
84
+ ${s}`:""}`}default:{let a=n?`${f("cyan",$)} `:"",s=n?f("cyan",ir):"";return`${e}${a}${i}
85
85
  ${s}
86
- `}}}}).prompt();var Di=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||(process.stdout?.isTTY??!1)),ze=["black","blue","cyan","gray","green","magenta","red","white","yellow"],Ii=["bold","dim","italic","underline","reset"],We={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",reset:"\x1B[0m",underline:"\x1B[4m"},Ei={black:"\x1B[30m",blue:"\x1B[34m",cyan:"\x1B[36m",gray:"\x1B[90m",green:"\x1B[32m",magenta:"\x1B[35m",red:"\x1B[31m",white:"\x1B[37m",yellow:"\x1B[33m"},Hi={black:"\x1B[40m",blue:"\x1B[44m",cyan:"\x1B[46m",gray:"\x1B[100m",green:"\x1B[42m",magenta:"\x1B[45m",red:"\x1B[41m",white:"\x1B[47m",yellow:"\x1B[43m"},xe={"\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 Kr(r){return(n)=>Di?`${r}${n}${We.reset}`:n}function Ui(r){for(let n=0;n<r.length;n++){let e=r.charCodeAt(n);if(e<32&&e!==27)return!1}return!0}function qe({bright:r=!1,color:n}){let e=Bun.color(n,"ansi"),o=typeof e==="string"&&e.length>0&&Ui(e)?e:Ei[n];if(!o)return"";return r&&o in xe?xe[o]:o}var Ni=ze.reduce((r,n)=>{let e=qe({color:n});if(e)r[n]=Kr(e);let o=qe({bright:!0,color:n});if(o)r[`${n}Bright`]=Kr(o);return r},{}),ji=Ii.reduce((r,n)=>{return r[n]=Kr(We[n]),r},{}),Ai=ze.reduce((r,n)=>{let e=Hi[n];if(e){let o=`bg${n.charAt(0).toUpperCase()}${n.slice(1)}`;r[o]=Kr(e)}return r},{}),m={...Ni,...ji,...Ai};function Zr(r){if(vr(r))throw new O;return r}function Gi(r){return r.map((n)=>n.key?`${m.bold(n.key)} ${m.dim(n.text)}`:m.dim(n.text)).join(m.dim(" \xB7 "))}function Qr(r){v.info(Gi(r))}var Or={confirm:[{key:"Enter",text:"confirm"},{key:"Esc",text:"cancel"}],multiselect:[{key:"\u2191\u2193",text:"navigate"},{key:"Space",text:"toggle"},{key:"a",text:"all"},{key:"Enter",text:"confirm"},{key:"Esc",text:"cancel"}],select:[{key:"\u2191\u2193",text:"navigate"},{key:"Enter",text:"select"},{key:"Esc",text:"cancel"}],text:[{key:"Enter",text:"submit"},{key:"Esc",text:"cancel"}]};async function sr(r){return Qr(Or.confirm),Zr(await je(r))}async function rr(r){return Qr(Or.text),Zr(await Ge(r))}async function cr(r){return Qr(Or.select),Zr(await Me({showInstructions:!1,...r}))}async function fr(r){return Qr(Or.multiselect),Zr(await Ae({showInstructions:!1,...r}))}var C={arg:m.magenta,cmd:m.cyan,default:m.blue,desc:m.white,flag:m.green,header:(r)=>m.bold(m.yellow(r)),hint:m.dim,name:(r)=>m.bold(m.cyan(r)),placeholder:m.magenta};class Nn{metadata;commands;globalArgs;constructor(r,n,e){this.metadata=r;this.commands=n;this.globalArgs=e}version(){return`${C.name(this.metadata.name)} ${C.hint(this.metadata.version??"0.0.0")}`}global(){let r=[],{name:n,bin:e,version:o,description:i}=this.metadata;if(r.push(""),r.push(`${C.name(n)}${o?` ${C.hint(`v${o}`)}`:""}`),i)r.push(C.desc(i));r.push(""),r.push(C.header("Usage:")),r.push(` ${C.cmd(e)} ${C.placeholder("[command]")} ${C.hint("[options]")}`),r.push(""),r.push(C.header("Commands:"));let t=Array.from(this.commands.values()).map((a)=>[` ${C.cmd(a.name)}`,C.desc(a.description)]);return r.push(...this.formatColumns(t)),r.push(""),r.push(C.header("Options:")),r.push(...this.formatArgDefs(this.globalArgs)),r.push(""),r.push(C.hint(`Run "${e} <command> --help" for command-specific options.`)),r.push(""),r.join(`
87
- `)}command(r,n){let e=[],o=n??this.metadata.bin,i=`${C.cmd(o)} ${C.cmd(r.name)}`;e.push(""),e.push(`${C.name(r.name)} ${C.hint("-")} ${C.desc(r.description)}`),e.push(""),e.push(C.header("Usage:"));let t=this.formatPositionalUsage(r.positionals);if(r.hasSubcommands())e.push(` ${i} ${C.placeholder("<subcommand>")} ${C.hint("[options]")}`);else{let c=[i];if(t)c.push(t);c.push(C.hint("[options]")),e.push(` ${c.join(" ")}`)}if(r.prompts)e.push(` ${i} ${C.hint("- runs interactively")}`);if(e.push(""),r.hasSubcommands()){e.push(C.header("Subcommands:"));let c=r.getSubcommands().map((f)=>[` ${C.cmd(f.name)}`,C.desc(f.description)]);e.push(...this.formatColumns(c)),e.push("")}if(Object.entries(r.positionals).length>0)e.push(C.header("Arguments:")),e.push(...this.formatPositionalDefs(r.positionals)),e.push("");if(Object.entries(r.args).length>0)e.push(C.header("Options:")),e.push(...this.formatArgDefs(r.args)),e.push("");return e.join(`
88
- `)}formatPositionalUsage(r){return Object.entries(r).map(([n,e])=>{let o=e.variadic?`${n}...`:n;return e.required?C.arg(`<${o}>`):C.arg(`[${o}]`)}).join(" ")}formatPositionalDefs(r){let n=Object.entries(r).map(([e,o])=>{let i=o.variadic?`${e}...`:e,t=C.desc(o.description??""),a=o.required?"":C.hint(" (optional)");return[` ${C.arg(i)}`,`${t}${a}`]});return this.formatColumns(n)}formatArgDefs(r){let n=[];for(let[e,o]of Object.entries(r)){let t=`${o.alias?`${C.flag(`-${o.alias}`)}, `:" "}${C.flag(`--${e}`)}`,a=C.desc(o.description??""),s=o.default!==void 0?C.hint(` (default: ${C.default(this.formatDefault(o))})`):"";n.push([` ${t}`,`${a}${s}`])}return this.formatColumns(n)}formatDefault(r){if(r.type==="string")return`"${r.default}"`;return String(r.default)}formatColumns(r){if(r.length===0)return[];let n=Math.max(...r.map(([o])=>this.stripAnsi(o).length)),e=2;return r.map(([o,i])=>{let t=n-this.stripAnsi(o).length+e;return`${o}${" ".repeat(t)}${i}`})}stripAnsi(r){return r.replace(/\x1b\[[0-9;]*m/g,"")}}var nr=new Uint32Array(65536),xi=(r,n)=>{let e=r.length,o=n.length,i=1<<e-1,t=-1,a=0,s=e,c=e;while(c--)nr[r.charCodeAt(c)]|=1<<c;for(c=0;c<o;c++){let f=nr[n.charCodeAt(c)],d=f|a;if(f|=(f&t)+t^t,a|=~(f|t),t&=f,a&i)s++;if(t&i)s--;a=a<<1|1,t=t<<1|~(d|a),a&=d}c=e;while(c--)nr[r.charCodeAt(c)]=0;return s},qi=(r,n)=>{let e=n.length,o=r.length,i=[],t=[],a=Math.ceil(e/32),s=Math.ceil(o/32);for(let l=0;l<a;l++)t[l]=-1,i[l]=0;let c=0;for(;c<s-1;c++){let l=0,b=-1,F=c*32,I=Math.min(32,o)+F;for(let y=F;y<I;y++)nr[r.charCodeAt(y)]|=1<<y;for(let y=0;y<e;y++){let A=nr[n.charCodeAt(y)],E=t[y/32|0]>>>y&1,P=i[y/32|0]>>>y&1,j=A|l,H=((A|P)&b)+b^b|A|P,L=l|~(H|b),N=b&H;if(L>>>31^E)t[y/32|0]^=1<<y;if(N>>>31^P)i[y/32|0]^=1<<y;L=L<<1|E,N=N<<1|P,b=N|~(j|L),l=L&j}for(let y=F;y<I;y++)nr[r.charCodeAt(y)]=0}let f=0,d=-1,g=c*32,p=Math.min(32,o-g)+g;for(let l=g;l<p;l++)nr[r.charCodeAt(l)]|=1<<l;let h=o;for(let l=0;l<e;l++){let b=nr[n.charCodeAt(l)],F=t[l/32|0]>>>l&1,I=i[l/32|0]>>>l&1,y=b|f,A=((b|I)&d)+d^d|b|I,E=f|~(A|d),P=d&A;if(h+=E>>>o-1&1,h-=P>>>o-1&1,E>>>31^F)t[l/32|0]^=1<<l;if(P>>>31^I)i[l/32|0]^=1<<l;E=E<<1|F,P=P<<1|I,d=P|~(y|E),f=E&y}for(let l=g;l<p;l++)nr[r.charCodeAt(l)]=0;return h},zi=(r,n)=>{if(r.length<n.length){let e=n;n=r,r=e}if(n.length===0)return r.length;if(r.length<=32)return xi(r,n);return qi(r,n)},Je=(r,n)=>{let e=1/0,o=0;for(let i=0;i<n.length;i++){let t=zi(r,n[i]);if(t<e)e=t,o=i}return n[o]};function Xr(r,n,e,o){let i=Je(n,e);if(console.error(m.red(`Unknown ${r}: ${n}`)),i)console.error(m.yellow(`Did you mean "${i}"?`));console.error(`
89
- Run "${o} --help" for usage.`),process.exit(1)}function yr(r,n){let e=(i)=>i&&typeof i==="object";if(!e(r)||!e(n))return n;let o={...r};for(let i of Object.keys(n)){let t=o[i],a=n[i];if(Array.isArray(t)&&Array.isArray(a))o[i]=[...a];else if(e(t)&&e(a))o[i]=yr(t,a);else o[i]=a}return o}function jn(r){return r==null?[]:Array.isArray(r)?r:[r]}function Wi(r,n,e,o){var i,t=r[n],a=~o.string.indexOf(n)?e==null||e===!0?"":String(e):typeof e==="boolean"?e:~o.boolean.indexOf(n)?e==="false"?!1:e==="true"||(r._.push((i=+e,i*0===0)?i:e),!!e):(i=+e,i*0===0)?i:e;r[n]=t==null?a:Array.isArray(t)?t.concat(a):[t,a]}function Vr(r,n){r=r||[],n=n||{};var e,o,i,t,a,s={_:[]},c=0,f=0,d=0,g=r.length;let p=n.alias!==void 0,h=n.unknown!==void 0,l=n.default!==void 0;if(n.alias=n.alias||{},n.string=jn(n.string),n.boolean=jn(n.boolean),p)for(e in n.alias){o=n.alias[e]=jn(n.alias[e]);for(c=0;c<o.length;c++)(n.alias[o[c]]=o.concat(e)).splice(c,1)}for(c=n.boolean.length;c-- >0;){o=n.alias[n.boolean[c]]||[];for(f=o.length;f-- >0;)n.boolean.push(o[f])}for(c=n.string.length;c-- >0;){o=n.alias[n.string[c]]||[];for(f=o.length;f-- >0;)n.string.push(o[f])}if(l){for(e in n.default)if(t=typeof n.default[e],o=n.alias[e]=n.alias[e]||[],n[t]!==void 0){n[t].push(e);for(c=0;c<o.length;c++)n[t].push(o[c])}}let b=h?Object.keys(n.alias):[];for(c=0;c<g;c++){if(i=r[c],i==="--"){s._=s._.concat(r.slice(++c));break}for(f=0;f<i.length;f++)if(i.charCodeAt(f)!==45)break;if(f===0)s._.push(i);else if(i.substring(f,f+3)==="no-"){if(t=i.substring(f+3),h&&!~b.indexOf(t))return n.unknown(i);s[t]=!1}else{for(d=f+1;d<i.length;d++)if(i.charCodeAt(d)===61)break;t=i.substring(f,d),a=i.substring(++d)||(c+1===g||(""+r[c+1]).charCodeAt(0)===45||r[++c]),o=f===2?[t]:t;for(d=0;d<o.length;d++){if(t=o[d],h&&!~b.indexOf(t))return n.unknown("-".repeat(f)+t);Wi(s,t,d+1<o.length||a,n)}}}if(l){for(e in n.default)if(s[e]===void 0)s[e]=n.default[e]}if(p)for(e in s){o=n.alias[e]||[];while(o.length>0)s[o.shift()]=s[e]}return s}function Ji(r){return r.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function Ye(r){let n={alias:{},boolean:[],default:{},string:[]};for(let[e,o]of Object.entries(r)){if(o.type==="boolean")n.boolean.push(e);else n.string.push(e);if(o.alias)n.alias[o.alias]=e;let i=Ji(e);if(i!==e)n.alias[i]=e;if(o.default!==void 0)n.default[e]=o.default}return n}function Ke(r,n){let e={...r};for(let[o,i]of Object.entries(n)){if(i.type!=="number")continue;let t=r[o];if(t===void 0||typeof t==="boolean")continue;let a=Number(t);if(Number.isNaN(a))throw Error(`Invalid number for --${o}: "${t}"`);e[o]=a}return e}function Ze(r,n){let e=Ye(n),o=Vr(r,e),i=o._[0],t=i?r.indexOf(i):-1,{_:a,...s}=o,c=Ke(s,n);return{command:i,flags:c,restArgs:t>=0?r.slice(t+1):[]}}function An(r,n={}){let e=Ye(n),o=Vr(r,e),{_:i,...t}=o;return{args:Ke(t,n),rawPositionals:i}}function Mn(r,n){let e={},o=Object.entries(n);for(let[i,[t,a]]of o.entries())e[t]=a.variadic?r.slice(i):r[i];return e}function Qe(r,n){for(let[e,o]of Object.entries(n)){if(!o.required)continue;let i=r[e];if(Array.isArray(i)?i.length===0:!i)return`Missing required argument: <${e}${o.variadic?"...":""}>`}return null}var Gn="__exit__";class dr{command;env;prefix;options;constructor(r,n,e,o={}){this.command=r;this.env=n;this.prefix=e;this.options=o}get commandPath(){return this.prefix?`${this.prefix} ${this.command.name}`:this.command.name}async route(r,n){if(n)await this.routeInteractive();else await this.routeDirect(r)}async routeDirect(r){let[n,...e]=r;if(n&&this.command.hasSubcommands()){let o=this.command.getSubcommand(n);if(o){await this.handleSubcommandRoute(o,e);return}if(!n.startsWith("-")){this.handleUnknownSubcommand(n);return}}await this.executeCommand(r)}handleUnknownSubcommand(r){let n=this.command.getSubcommands().map((e)=>e.name);Xr("subcommand",r,n,this.commandPath)}async handleSubcommandRoute(r,n){await new dr(r,this.env,this.commandPath).route(n,!1)}async executeCommand(r){if(this.isHelpRequest(r)){this.printHelp(this.command);return}if(this.command.hasSubcommands()&&!this.command.execute){this.printHelp(this.command);return}if(!this.command.execute)return;let{args:e,rawPositionals:o}=An(r,this.command.args),i=Mn(o,this.command.positionals),t=Qe(i,this.command.positionals);if(t)v.error(t),console.error(`
90
- Run "${this.commandPath} --help" for usage.`),process.exit(1);let a=this.command.prompts&&o.length===0,s=this.buildContext(i,e,a);await this.command.execute(s)}async routeInteractive(){if(!this.command.hasSubcommands()){await this.executeInteractive();return}await this.runSubcommandMenu()}async executeInteractive(){let{args:r}=An([],this.command.args),n=Mn([],this.command.positionals),e=this.buildContext(n,r,!0);await this.command.execute?.(e)}async runSubcommandMenu(){while(!0){let r=await this.promptSubcommandSelectionOrBack();if(r===null)return;if(r===Gn){this.options.onExit?.();return}let n=this.command.getSubcommand(r);if(n)await this.executeSubcommand(n)}}async promptSubcommandSelectionOrBack(){try{return await this.promptSubcommandSelection()}catch(r){if(r instanceof O){if(this.options.isRoot)this.options.onExit?.();return null}throw r}}async executeSubcommand(r){try{await new dr(r,this.env,this.commandPath).route([],!0)}catch(n){if(n instanceof O)return;if(n instanceof w){if(v.warn(m.yellow(n.message)),n.hint)v.info(m.dim(n.hint));return}throw n}}promptSubcommandSelection(){let{isRoot:r}=this.options,n=r?{hint:this.env.cli.exitHint,label:this.env.cli.exitLabel??"Exit",value:Gn}:{hint:"Return to previous menu",label:"Back",value:Gn};return cr({message:r?this.env.cli.promptMessage??"Select:":`${this.command.name}:`,options:[...this.command.getSubcommands().map((e)=>({hint:e.description,label:e.name,value:e.name})),n]})}buildContext(r,n,e){return{...this.env,args:n,interactive:e,positionals:r}}isHelpRequest(r){return r.includes("--help")||r.includes("-h")}printHelp(r){let n=r===this.command?this.prefix:this.commandPath;console.log(this.env.formatHelp(r,n))}}var Yi={clearOnStart:!0,exitHint:"Close the CLI",exitLabel:"Exit",goodbyeMessage:"Goodbye!",name:"CLI",promptMessage:"What would you like to do?"};class xn{commands=new Map;metadata;configManager;help;bin;globalArgs={help:{alias:"h",description:"Show help",type:"boolean"},interactive:{alias:"i",description:"Enable interactive mode",type:"boolean"},version:{alias:"v",description:"Show version",type:"boolean"}};constructor(r,n){this.configManager=r,this.metadata={...Yi,...n},this.bin=this.metadata.bin??this.metadata.name,this.init(),this.help=new Nn({bin:this.bin,description:this.metadata.description,name:this.metadata.name,version:this.metadata.version},this.commands,this.globalArgs)}registerCommands(r){for(let n of r)n.init?.(),this.commands.set(n.name,n)}async run(r=process.argv.slice(2)){let{command:n,flags:e,restArgs:o}=Ze(r,this.globalArgs);if(e.version&&!n)return console.log(this.help.version());if(e.interactive&&!n)return this.runInteractive();if(!n)return console.log(this.help.global());if(n==="help")return this.printHelpFor(o[0]);await this.runDirect(n,o,!!e.help)}printHelpFor(r){if(!r)return console.log(this.help.global());let n=this.commands.get(r);if(!n)return this.handleUnknownCommand(r);console.log(this.help.command(n))}async runInteractive(){this.showIntro();let r=this.createVirtualRootCommand(),n={cli:this.metadata,config:this.configManager,formatHelp:this.help.command.bind(this.help)},e=new dr(r,n,this.bin,{isRoot:!0,onExit:()=>this.exit()});try{await e.route([],!0)}catch(o){this.handleError(o)}}createVirtualRootCommand(){return{description:this.metadata.description,getSubcommand:(r)=>this.commands.get(r),getSubcommands:()=>Array.from(this.commands.values()),hasSubcommands:()=>!0,name:this.metadata.name}}exit(){Yr(this.metadata.goodbyeMessage),process.exit(0)}async runDirect(r,n,e){let o=this.commands.get(r);if(!o)return this.handleUnknownCommand(r);let i=n.length>0&&!n[0]?.startsWith("-");if(e&&!i)return console.log(this.help.command(o));try{let t={cli:this.metadata,config:this.configManager,formatHelp:this.help.command.bind(this.help)};await new dr(o,t,this.bin).route(n,!1)}catch(t){this.handleError(t)}}showIntro(){if(this.metadata.clearOnStart)console.clear();let r=this.metadata.version?` v${this.metadata.version}`:"";Jr(`${m.bgCyan(m.black(` ${this.metadata.name}${r} `))}`)}handleUnknownCommand(r){let n=Array.from(this.commands.keys());Xr("command",r,n,this.bin)}handleError(r){if(this.metadata.onError?.(r))return;if(r instanceof O)process.exit(0);if(r instanceof w){if(v.warn(m.yellow(r.message)),r.hint)v.info(m.dim(r.hint));process.exit(0)}if(r instanceof Error)v.error(m.red(r.message)),process.exit(1);console.error(m.red("Error:"),r),process.exit(1)}}class Pr{args={};positionals={};prompts=!1;subcommands=new Map;registerSubcommands(r){for(let n of r)n.init?.(),this.subcommands.set(n.name,n)}hasSubcommands(){return this.subcommands.size>0}getSubcommand(r){return this.subcommands.get(r)}getSubcommands(){return Array.from(this.subcommands.values())}}function tr(r){return r}function G(r){return r}import gr from"fs";import Oe from"path";class qn{config;configPath;defaultConfig;constructor(r,n){this.configPath=Oe.resolve(r),this.defaultConfig=n,this.config=this.loadConfig()}get(r){return this.config[r]}set(r,n){this.config[r]=n,this.save()}delete(r){delete this.config[r],this.save()}exists(){return gr.existsSync(this.configPath)}getAll(){return yr({},this.config)}save(r){if(r)this.config={...r};this.ensureDirectoryExists();try{gr.writeFileSync(this.configPath,JSON.stringify(this.config,null,2))}catch(n){console.error(`Failed to save config to ${this.configPath}:`,n)}}ensureDirectoryExists(){let r=Oe.dirname(this.configPath);if(!gr.existsSync(r))try{gr.mkdirSync(r,{recursive:!0})}catch(n){console.error(`Failed to create config directory at ${r}:`,n)}}loadConfig(){if(!gr.existsSync(this.configPath))return{...this.defaultConfig};try{let r=gr.readFileSync(this.configPath,"utf-8"),n=JSON.parse(r);return yr({...this.defaultConfig},n)}catch{return console.warn(`Config file corrupted at ${this.configPath}. Using defaults.`),{...this.defaultConfig}}}}var Xe="0.9.0";class R extends Pr{}import{existsSync as Dr}from"fs";import{cp as Bi,link as _i,mkdir as Jn,readdir as ao,readFile as Yn,readlink as Ti,rm as Kn,symlink as rt,unlink as so,writeFile as nt}from"fs/promises";import{join as D,resolve as Tr}from"path";var Sr="hydra";var Ve=".hydra/config.json",ur=".hydra/shared",Fr=".hydra/runners",kr="default",Se={profiles:{}},Be=!1,_e=24,Te=7,ro=["logs","shared"];var Zi=new Set(["github.com","www.github.com"]);var no=/\.git$/;function pr(r){let n;try{n=new URL(r)}catch{throw Error(`Invalid GitHub URL: ${r}`)}if(n.protocol!=="https:"&&n.protocol!=="http:")throw Error(`Invalid GitHub URL (expected http(s)): ${r}`);if(!Zi.has(n.hostname))throw Error(`Invalid GitHub URL (host must be github.com): ${r}`);let e=n.pathname.split("/").filter(Boolean);if(e.length===1){let o=e[0]?.replace(no,"");if(!o)throw Error(`Invalid GitHub URL: ${r}`);return{kind:"org",org:o}}if(e.length===2){let o=e[0],i=e[1]?.replace(no,"");if(!o||!i)throw Error(`Invalid GitHub URL: ${r}`);return{kind:"repo",owner:o,repo:i}}throw Error(`Invalid GitHub URL (expected github.com/<owner>/<repo> or github.com/<org>): ${r}`)}function Br(r){return r.kind==="repo"?`${r.owner}/${r.repo}`:r.org}import{existsSync as Qi}from"fs";import{readdir as Oi,stat as Xi}from"fs/promises";import{join as Vi}from"path";var Rr="_diag",eo={runner:/^Runner_.+\.log$/,worker:/^Worker_.+\.log$/},oo=1024,io=["B","KB","MB","GB"],Si=1;function to(r){if(eo.worker.test(r))return"worker";if(eo.runner.test(r))return"runner";return null}function _r(r){return[...r].sort((n,e)=>e.mtime.getTime()-n.mtime.getTime())}async function Lr(r){if(!Qi(r))return[];let n=await Oi(r,{withFileTypes:!0}),e=[];for(let o of n){if(!o.isFile())continue;let i=to(o.name);if(!i)continue;let t=Vi(r,o.name),a=await Xi(t);e.push({mtime:a.mtime,name:o.name,path:t,size:a.size,type:i})}return _r(e)}function zn(r,n){let e=r.find((i)=>i.type===n);if(e)return{fallback:!1,file:e};let o=r[0];return o?{fallback:!0,file:o}:null}function Wn(r,n){if(n<=0)return"";let e=r.endsWith(`
86
+ `}}}}).prompt();var Ii=!process.env.NO_COLOR&&(process.env.FORCE_COLOR||(process.stdout?.isTTY??!1)),Ye=["black","blue","cyan","gray","green","magenta","red","white","yellow"],Ei=["bold","dim","italic","underline","reset"],Je={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",reset:"\x1B[0m",underline:"\x1B[4m"},Hi={black:"\x1B[30m",blue:"\x1B[34m",cyan:"\x1B[36m",gray:"\x1B[90m",green:"\x1B[32m",magenta:"\x1B[35m",red:"\x1B[31m",white:"\x1B[37m",yellow:"\x1B[33m"},Ui={black:"\x1B[40m",blue:"\x1B[44m",cyan:"\x1B[46m",gray:"\x1B[100m",green:"\x1B[42m",magenta:"\x1B[45m",red:"\x1B[41m",white:"\x1B[47m",yellow:"\x1B[43m"},ze={"\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 Kr(r){return(n)=>Ii?`${r}${n}${Je.reset}`:n}function Ni(r){for(let n=0;n<r.length;n++){let e=r.charCodeAt(n);if(e<32&&e!==27)return!1}return!0}function We({bright:r=!1,color:n}){let e=Bun.color(n,"ansi"),o=typeof e==="string"&&e.length>0&&Ni(e)?e:Hi[n];if(!o)return"";return r&&o in ze?ze[o]:o}var Ai=Ye.reduce((r,n)=>{let e=We({color:n});if(e)r[n]=Kr(e);let o=We({bright:!0,color:n});if(o)r[`${n}Bright`]=Kr(o);return r},{}),ji=Ei.reduce((r,n)=>{return r[n]=Kr(Je[n]),r},{}),Mi=Ye.reduce((r,n)=>{let e=Ui[n];if(e){let o=`bg${n.charAt(0).toUpperCase()}${n.slice(1)}`;r[o]=Kr(e)}return r},{}),m={...Ai,...ji,...Mi};function Zr(r){if(wr(r))throw new Q;return r}function xi(r){return r.map((n)=>n.key?`${m.bold(n.key)} ${m.dim(n.text)}`:m.dim(n.text)).join(m.dim(" \xB7 "))}function Or(r){w.info(xi(r))}var Qr={confirm:[{key:"Enter",text:"confirm"},{key:"Esc",text:"cancel"}],multiselect:[{key:"\u2191\u2193",text:"navigate"},{key:"Space",text:"toggle"},{key:"a",text:"all"},{key:"Enter",text:"confirm"},{key:"Esc",text:"cancel"}],select:[{key:"\u2191\u2193",text:"navigate"},{key:"Enter",text:"select"},{key:"Esc",text:"cancel"}],text:[{key:"Enter",text:"submit"},{key:"Esc",text:"cancel"}]};async function sr(r){return Or(Qr.confirm),Zr(await Me(r))}async function rr(r){return Or(Qr.text),Zr(await qe(r))}async function cr(r){return Or(Qr.select),Zr(await xe({showInstructions:!1,...r}))}async function ur(r){return Or(Qr.multiselect),Zr(await Ge({showInstructions:!1,...r}))}function An(r){return r==null?[]:Array.isArray(r)?r:[r]}function qi(r,n,e,o){var i,t=r[n],a=~o.string.indexOf(n)?e==null||e===!0?"":String(e):typeof e==="boolean"?e:~o.boolean.indexOf(n)?e==="false"?!1:e==="true"||(r._.push((i=+e,i*0===0)?i:e),!!e):(i=+e,i*0===0)?i:e;r[n]=t==null?a:Array.isArray(t)?t.concat(a):[t,a]}function Xr(r,n){r=r||[],n=n||{};var e,o,i,t,a,s={_:[]},c=0,u=0,d=0,g=r.length;let p=n.alias!==void 0,h=n.unknown!==void 0,l=n.default!==void 0;if(n.alias=n.alias||{},n.string=An(n.string),n.boolean=An(n.boolean),p)for(e in n.alias){o=n.alias[e]=An(n.alias[e]);for(c=0;c<o.length;c++)(n.alias[o[c]]=o.concat(e)).splice(c,1)}for(c=n.boolean.length;c-- >0;){o=n.alias[n.boolean[c]]||[];for(u=o.length;u-- >0;)n.boolean.push(o[u])}for(c=n.string.length;c-- >0;){o=n.alias[n.string[c]]||[];for(u=o.length;u-- >0;)n.string.push(o[u])}if(l){for(e in n.default)if(t=typeof n.default[e],o=n.alias[e]=n.alias[e]||[],n[t]!==void 0){n[t].push(e);for(c=0;c<o.length;c++)n[t].push(o[c])}}let b=h?Object.keys(n.alias):[];for(c=0;c<g;c++){if(i=r[c],i==="--"){s._=s._.concat(r.slice(++c));break}for(u=0;u<i.length;u++)if(i.charCodeAt(u)!==45)break;if(u===0)s._.push(i);else if(i.substring(u,u+3)==="no-"){if(t=i.substring(u+3),h&&!~b.indexOf(t))return n.unknown(i);s[t]=!1}else{for(d=u+1;d<i.length;d++)if(i.charCodeAt(d)===61)break;t=i.substring(u,d),a=i.substring(++d)||(c+1===g||(""+r[c+1]).charCodeAt(0)===45||r[++c]),o=u===2?[t]:t;for(d=0;d<o.length;d++){if(t=o[d],h&&!~b.indexOf(t))return n.unknown("-".repeat(u)+t);qi(s,t,d+1<o.length||a,n)}}}if(l){for(e in n.default)if(s[e]===void 0)s[e]=n.default[e]}if(p)for(e in s){o=n.alias[e]||[];while(o.length>0)s[o.shift()]=s[e]}return s}function jn(r){return r.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function Ke(r){let n={alias:{},boolean:[],default:{},string:[]};for(let[e,o]of Object.entries(r)){if(o.type==="boolean")n.boolean.push(e);else n.string.push(e);if(o.alias)n.alias[o.alias]=e;let i=jn(e);if(i!==e)n.alias[i]=e;if(o.default!==void 0)n.default[e]=o.default}return n}function Ze(r,n){let e={...r};for(let[o,i]of Object.entries(n)){if(i.type!=="number")continue;let t=r[o];if(t===void 0||typeof t==="boolean")continue;let a=Number(t);if(Number.isNaN(a))throw Error(`Invalid number for --${o}: "${t}"`);e[o]=a}return e}function Oe(r,n){let e=Ke(n),o=Xr(r,e),i=o._[0],t=i?r.indexOf(i):-1,{_:a,...s}=o,c=Ze(s,n);return{command:i,flags:c,restArgs:t>=0?r.slice(t+1):[]}}function Mn(r,n={}){let e=Ke(n),o=Xr(r,e),{_:i,...t}=o;return{args:Ze(t,n),rawPositionals:i}}function Gn(r,n){let e={},o=Object.entries(n);for(let[i,[t,a]]of o.entries())e[t]=a.variadic?r.slice(i):r[i];return e}function Qe(r,n){for(let[e,o]of Object.entries(n)){if(!o.required)continue;let i=r[e];if(Array.isArray(i)?i.length===0:!i)return`Missing required argument: <${e}${o.variadic?"...":""}>`}return null}var zi=(r)=>r,C={arg:m.magenta,cmd:m.cyan,default:m.bold,desc:zi,flag:m.green,header:(r)=>m.bold(m.yellow(r)),hint:m.dim,name:(r)=>m.bold(m.cyan(r)),placeholder:m.magenta};class xn{metadata;commands;globalArgs;constructor(r,n,e){this.metadata=r;this.commands=n;this.globalArgs=e}version(){return`${C.name(this.metadata.name)} ${C.hint(this.metadata.version??"0.0.0")}`}global(){let r=[],{name:n,bin:e,version:o,description:i}=this.metadata;if(r.push(`${C.name(n)}${o?` ${C.hint(`v${o}`)}`:""}`),i)r.push(C.desc(i));r.push(""),r.push(C.header("Usage:")),r.push(` ${C.cmd(e)} ${C.placeholder("[command]")} ${C.placeholder("[options]")}`),r.push(""),r.push(C.header("Commands:"));let t=Array.from(this.commands.values()).map((a)=>[` ${C.cmd(a.name)}`,C.desc(a.description)]);return r.push(...this.formatColumns(t)),r.push(""),r.push(C.header("Options:")),r.push(...this.formatArgDefs(this.globalArgs)),r.push(""),r.push(`${C.hint("Run")} ${C.cmd(`${e} <command> --help`)} ${C.hint("for command details.")}`),r.join(`
87
+ `).trimEnd()}command(r,n){let e=[],o=n??this.metadata.bin,i=`${o} ${r.name}`,t=`${C.cmd(o)} ${C.cmd(r.name)}`;e.push(C.name(i)),e.push(C.desc(r.description)),e.push(""),e.push(C.header("Usage:"));let a=this.formatPositionalUsage(r.positionals);if(r.hasSubcommands())e.push(` ${t} ${C.placeholder("<subcommand>")} ${C.placeholder("[options]")}`);else{let u=[t];if(a)u.push(a);u.push(C.placeholder("[options]")),e.push(` ${u.join(" ")}`)}if(r.prompts&&Object.keys(r.positionals).length>0)e.push(` ${C.hint("Omit positional arguments to run interactively.")}`);if(e.push(""),r.hasSubcommands()){e.push(C.header("Subcommands:"));let u=r.getSubcommands().map((d)=>[` ${C.cmd(d.name)}`,C.desc(d.description)]);e.push(...this.formatColumns(u)),e.push("")}if(Object.entries(r.positionals).length>0)e.push(C.header("Arguments:")),e.push(...this.formatPositionalDefs(r.positionals)),e.push("");if(Object.entries(r.args).length>0)e.push(C.header("Options:")),e.push(...this.formatArgDefs(r.args));return e.join(`
88
+ `).trimEnd()}formatPositionalUsage(r){return Object.entries(r).map(([n,e])=>{let o=e.variadic?`${n}...`:n;return e.required?C.arg(`<${o}>`):C.arg(`[${o}]`)}).join(" ")}formatPositionalDefs(r){let n=Object.entries(r).map(([e,o])=>{let i=o.variadic?`${e}...`:e,t=C.desc(o.description??""),a=o.required?"":C.hint(" (optional)");return[` ${C.arg(i)}`,`${t}${a}`]});return this.formatColumns(n)}formatArgDefs(r){let n=[];for(let[e,o]of Object.entries(r)){let i=o.alias?`${C.flag(`-${o.alias}`)}, `:" ",t=o.type==="boolean"?"":` ${C.placeholder(`<${o.type==="number"?"number":"value"}>`)}`,a=`${i}${C.flag(`--${jn(e)}`)}${t}`,s=C.desc(o.description??""),c=this.formatDefault(o),u=c===void 0?"":` (default: ${C.default(c)})`;n.push([` ${a}`,`${s}${u}`])}return this.formatColumns(n)}formatDefault(r){if(typeof r.displayDefault==="string")return r.displayDefault;if(r.default===void 0)return;if(r.type==="boolean"&&r.default===!1)return;if(r.type==="string")return`"${r.default}"`;return String(r.default)}formatColumns(r){if(r.length===0)return[];let n=Math.max(...r.map(([o])=>this.stripAnsi(o).length)),e=2;return r.map(([o,i])=>{let t=n-this.stripAnsi(o).length+e;return`${o}${" ".repeat(t)}${i}`})}stripAnsi(r){return r.replace(/\x1b\[[0-9;]*m/g,"")}}var nr=new Uint32Array(65536),Wi=(r,n)=>{let e=r.length,o=n.length,i=1<<e-1,t=-1,a=0,s=e,c=e;while(c--)nr[r.charCodeAt(c)]|=1<<c;for(c=0;c<o;c++){let u=nr[n.charCodeAt(c)],d=u|a;if(u|=(u&t)+t^t,a|=~(u|t),t&=u,a&i)s++;if(t&i)s--;a=a<<1|1,t=t<<1|~(d|a),a&=d}c=e;while(c--)nr[r.charCodeAt(c)]=0;return s},Yi=(r,n)=>{let e=n.length,o=r.length,i=[],t=[],a=Math.ceil(e/32),s=Math.ceil(o/32);for(let l=0;l<a;l++)t[l]=-1,i[l]=0;let c=0;for(;c<s-1;c++){let l=0,b=-1,F=c*32,I=Math.min(32,o)+F;for(let y=F;y<I;y++)nr[r.charCodeAt(y)]|=1<<y;for(let y=0;y<e;y++){let j=nr[n.charCodeAt(y)],E=t[y/32|0]>>>y&1,P=i[y/32|0]>>>y&1,A=j|l,H=((j|P)&b)+b^b|j|P,L=l|~(H|b),N=b&H;if(L>>>31^E)t[y/32|0]^=1<<y;if(N>>>31^P)i[y/32|0]^=1<<y;L=L<<1|E,N=N<<1|P,b=N|~(A|L),l=L&A}for(let y=F;y<I;y++)nr[r.charCodeAt(y)]=0}let u=0,d=-1,g=c*32,p=Math.min(32,o-g)+g;for(let l=g;l<p;l++)nr[r.charCodeAt(l)]|=1<<l;let h=o;for(let l=0;l<e;l++){let b=nr[n.charCodeAt(l)],F=t[l/32|0]>>>l&1,I=i[l/32|0]>>>l&1,y=b|u,j=((b|I)&d)+d^d|b|I,E=u|~(j|d),P=d&j;if(h+=E>>>o-1&1,h-=P>>>o-1&1,E>>>31^F)t[l/32|0]^=1<<l;if(P>>>31^I)i[l/32|0]^=1<<l;E=E<<1|F,P=P<<1|I,d=P|~(y|E),u=E&y}for(let l=g;l<p;l++)nr[r.charCodeAt(l)]=0;return h},Ji=(r,n)=>{if(r.length<n.length){let e=n;n=r,r=e}if(n.length===0)return r.length;if(r.length<=32)return Wi(r,n);return Yi(r,n)},Xe=(r,n)=>{let e=1/0,o=0;for(let i=0;i<n.length;i++){let t=Ji(r,n[i]);if(t<e)e=t,o=i}return n[o]};function Vr(r,n,e,o){let i=Xe(n,e);if(console.error(m.red(`Unknown ${r}: ${n}`)),i)console.error(m.yellow(`Did you mean "${i}"?`));console.error(`
89
+ Run "${o} --help" for usage.`),process.exit(1)}function yr(r,n){let e=(i)=>i&&typeof i==="object";if(!e(r)||!e(n))return n;let o={...r};for(let i of Object.keys(n)){let t=o[i],a=n[i];if(Array.isArray(t)&&Array.isArray(a))o[i]=[...a];else if(e(t)&&e(a))o[i]=yr(t,a);else o[i]=a}return o}var qn="__exit__";class dr{command;env;prefix;options;constructor(r,n,e,o={}){this.command=r;this.env=n;this.prefix=e;this.options=o}get commandPath(){return this.prefix?`${this.prefix} ${this.command.name}`:this.command.name}async route(r,n){if(n)await this.routeInteractive();else await this.routeDirect(r)}async routeDirect(r){let[n,...e]=r;if(n&&this.command.hasSubcommands()){let o=this.command.getSubcommand(n);if(o){await this.handleSubcommandRoute(o,e);return}if(!n.startsWith("-")){this.handleUnknownSubcommand(n);return}}await this.executeCommand(r)}handleUnknownSubcommand(r){let n=this.command.getSubcommands().map((e)=>e.name);Vr("subcommand",r,n,this.commandPath)}async handleSubcommandRoute(r,n){await new dr(r,this.env,this.commandPath).route(n,!1)}async executeCommand(r){if(this.isHelpRequest(r)){this.printHelp(this.command);return}if(this.command.hasSubcommands()&&!this.command.execute){this.printHelp(this.command);return}if(!this.command.execute)return;let{args:e,rawPositionals:o}=Mn(r,this.command.args),i=Gn(o,this.command.positionals),t=Qe(i,this.command.positionals);if(t)w.error(t),console.error(`
90
+ Run "${this.commandPath} --help" for usage.`),process.exit(1);let a=this.command.prompts&&o.length===0,s=this.buildContext(i,e,a);await this.command.execute(s)}async routeInteractive(){if(!this.command.hasSubcommands()){await this.executeInteractive();return}await this.runSubcommandMenu()}async executeInteractive(){let{args:r}=Mn([],this.command.args),n=Gn([],this.command.positionals),e=this.buildContext(n,r,!0);await this.command.execute?.(e)}async runSubcommandMenu(){while(!0){let r=await this.promptSubcommandSelectionOrBack();if(r===null)return;if(r===qn){this.options.onExit?.();return}let n=this.command.getSubcommand(r);if(n)await this.executeSubcommand(n)}}async promptSubcommandSelectionOrBack(){try{return await this.promptSubcommandSelection()}catch(r){if(r instanceof Q){if(this.options.isRoot)this.options.onExit?.();return null}throw r}}async executeSubcommand(r){try{await new dr(r,this.env,this.commandPath).route([],!0)}catch(n){if(n instanceof Q)return;if(n instanceof v){if(w.warn(m.yellow(n.message)),n.hint)w.info(m.dim(n.hint));return}throw n}}promptSubcommandSelection(){let{isRoot:r}=this.options,n=r?{hint:this.env.cli.exitHint,label:this.env.cli.exitLabel??"Exit",value:qn}:{hint:"Return to previous menu",label:"Back",value:qn};return cr({message:r?this.env.cli.promptMessage??"Select:":`${this.command.name}:`,options:[...this.command.getSubcommands().map((e)=>({hint:e.description,label:e.name,value:e.name})),n]})}buildContext(r,n,e){return{...this.env,args:n,interactive:e,positionals:r}}isHelpRequest(r){return r.includes("--help")||r.includes("-h")}printHelp(r){let n=r===this.command?this.prefix:this.commandPath;console.log(this.env.formatHelp(r,n))}}var Ki={clearOnStart:!0,exitHint:"Close the CLI",exitLabel:"Exit",goodbyeMessage:"Goodbye!",name:"CLI",promptMessage:"What would you like to do?"};class zn{commands=new Map;metadata;configManager;help;bin;globalArgs={help:{alias:"h",description:"Show help",type:"boolean"},interactive:{alias:"i",description:"Open interactive mode",type:"boolean"},version:{alias:"v",description:"Show version",type:"boolean"}};constructor(r,n){this.configManager=r,this.metadata={...Ki,...n},this.bin=this.metadata.bin??this.metadata.name,this.init(),this.help=new xn({bin:this.bin,description:this.metadata.description,name:this.metadata.name,version:this.metadata.version},this.commands,this.globalArgs)}registerCommands(r){for(let n of r)n.init?.(),this.commands.set(n.name,n)}async run(r=process.argv.slice(2)){let{command:n,flags:e,restArgs:o}=Oe(r,this.globalArgs);if(e.version&&!n)return console.log(this.help.version());if(e.interactive&&!n)return this.runInteractive();if(!n)return console.log(this.help.global());if(n==="help")return this.printHelpFor(o[0]);await this.runDirect(n,o,!!e.help)}printHelpFor(r){if(!r)return console.log(this.help.global());let n=this.commands.get(r);if(!n)return this.handleUnknownCommand(r);console.log(this.help.command(n))}async runInteractive(){this.showIntro();let r=this.createVirtualRootCommand(),n={cli:this.metadata,config:this.configManager,formatHelp:this.help.command.bind(this.help)},e=new dr(r,n,this.bin,{isRoot:!0,onExit:()=>this.exit()});try{await e.route([],!0)}catch(o){this.handleError(o)}}createVirtualRootCommand(){return{description:this.metadata.description,getSubcommand:(r)=>this.commands.get(r),getSubcommands:()=>Array.from(this.commands.values()),hasSubcommands:()=>!0,name:this.metadata.name}}exit(){Jr(this.metadata.goodbyeMessage),process.exit(0)}async runDirect(r,n,e){let o=this.commands.get(r);if(!o)return this.handleUnknownCommand(r);let i=n.length>0&&!n[0]?.startsWith("-");if(e&&!i)return console.log(this.help.command(o));try{let t={cli:this.metadata,config:this.configManager,formatHelp:this.help.command.bind(this.help)};await new dr(o,t,this.bin).route(n,!1)}catch(t){this.handleError(t)}}showIntro(){if(this.metadata.clearOnStart)console.clear();let r=this.metadata.version?` v${this.metadata.version}`:"";Yr(`${m.bgCyan(m.black(` ${this.metadata.name}${r} `))}`)}handleUnknownCommand(r){let n=Array.from(this.commands.keys());Vr("command",r,n,this.bin)}handleError(r){if(this.metadata.onError?.(r))return;if(r instanceof Q)process.exit(0);if(r instanceof v){if(w.warn(m.yellow(r.message)),r.hint)w.info(m.dim(r.hint));process.exit(0)}if(r instanceof Error)w.error(m.red(r.message)),process.exit(1);console.error(m.red("Error:"),r),process.exit(1)}}class Pr{args={};positionals={};prompts=!1;subcommands=new Map;registerSubcommands(r){for(let n of r)n.init?.(),this.subcommands.set(n.name,n)}hasSubcommands(){return this.subcommands.size>0}getSubcommand(r){return this.subcommands.get(r)}getSubcommands(){return Array.from(this.subcommands.values())}}function tr(r){return r}function G(r){return r}import gr from"fs";import Ve from"path";class Wn{config;configPath;defaultConfig;constructor(r,n){this.configPath=Ve.resolve(r),this.defaultConfig=n,this.config=this.loadConfig()}get(r){return this.config[r]}set(r,n){this.config[r]=n,this.save()}delete(r){delete this.config[r],this.save()}exists(){return gr.existsSync(this.configPath)}getAll(){return yr({},this.config)}save(r){if(r)this.config={...r};this.ensureDirectoryExists();try{gr.writeFileSync(this.configPath,JSON.stringify(this.config,null,2))}catch(n){console.error(`Failed to save config to ${this.configPath}:`,n)}}ensureDirectoryExists(){let r=Ve.dirname(this.configPath);if(!gr.existsSync(r))try{gr.mkdirSync(r,{recursive:!0})}catch(n){console.error(`Failed to create config directory at ${r}:`,n)}}loadConfig(){if(!gr.existsSync(this.configPath))return{...this.defaultConfig};try{let r=gr.readFileSync(this.configPath,"utf-8"),n=JSON.parse(r);return yr({...this.defaultConfig},n)}catch{return console.warn(`Config file corrupted at ${this.configPath}. Using defaults.`),{...this.defaultConfig}}}}var Se="0.9.1";class R extends Pr{}var Sr="hydra";var Be=".hydra/config.json",fr=".hydra/shared",Fr=".hydra/runners",kr="default",_e={profiles:{}},Te=!1,ro=24,Br=7,no=["logs","shared"];import{existsSync as Dr}from"fs";import{cp as _i,link as Ti,mkdir as Kn,readdir as so,readFile as Zn,readlink as rt,rm as On,symlink as nt,unlink as co,writeFile as et}from"fs/promises";import{join as D,resolve as rn}from"path";var Oi=new Set(["github.com","www.github.com"]);var eo=/\.git$/;function pr(r){let n;try{n=new URL(r)}catch{throw Error(`Invalid GitHub URL: ${r}`)}if(n.protocol!=="https:"&&n.protocol!=="http:")throw Error(`Invalid GitHub URL (expected http(s)): ${r}`);if(!Oi.has(n.hostname))throw Error(`Invalid GitHub URL (host must be github.com): ${r}`);let e=n.pathname.split("/").filter(Boolean);if(e.length===1){let o=e[0]?.replace(eo,"");if(!o)throw Error(`Invalid GitHub URL: ${r}`);return{kind:"org",org:o}}if(e.length===2){let o=e[0],i=e[1]?.replace(eo,"");if(!o||!i)throw Error(`Invalid GitHub URL: ${r}`);return{kind:"repo",owner:o,repo:i}}throw Error(`Invalid GitHub URL (expected github.com/<owner>/<repo> or github.com/<org>): ${r}`)}function _r(r){return r.kind==="repo"?`${r.owner}/${r.repo}`:r.org}import{existsSync as Qi}from"fs";import{readdir as Xi,stat as Vi}from"fs/promises";import{join as Si}from"path";var Rr="_diag",oo={runner:/^Runner_.+\.log$/,worker:/^Worker_.+\.log$/},io=1024,to=["B","KB","MB","GB"],Bi=1;function ao(r){if(oo.worker.test(r))return"worker";if(oo.runner.test(r))return"runner";return null}function Tr(r){return[...r].sort((n,e)=>e.mtime.getTime()-n.mtime.getTime())}async function Lr(r){if(!Qi(r))return[];let n=await Xi(r,{withFileTypes:!0}),e=[];for(let o of n){if(!o.isFile())continue;let i=ao(o.name);if(!i)continue;let t=Si(r,o.name),a=await Vi(t);e.push({mtime:a.mtime,name:o.name,path:t,size:a.size,type:i})}return Tr(e)}function Yn(r,n){let e=r.find((i)=>i.type===n);if(e)return{fallback:!1,file:e};let o=r[0];return o?{fallback:!0,file:o}:null}function Jn(r,n){if(n<=0)return"";let e=r.endsWith(`
91
91
  `)?r.slice(0,-1):r;if(e==="")return"";return e.split(`
92
92
  `).slice(-n).join(`
93
- `)}function mr(r){let n=r,e=0;while(n>=oo&&e<io.length-1)n/=oo,e++;return`${e===0?String(n):n.toFixed(Si)} ${io[e]??"B"}`}var co="actions/runner",et={linux:"linux-x64",osx:"osx-arm64",windows:"win-x64"},fo=["bin"],uo=["externals"];class rn{profile;sharedPath=null;constructor(r){this.profile=r}async download(){let r=et[this.profile.os],n=await this.getLatestVersion(),e=D(ur,"github",n);if(Dr(e))return this.sharedPath=e,{path:e,version:n};await Jn(e,{recursive:!0});let o=`actions-runner-${r}-${n}.tar.gz`,i=D(e,o),t=`https://github.com/${co}/releases/download/v${n}/${o}`;return await Bun.$`curl -sL -o ${i} ${t}`,await Bun.$`tar xzf ${i} -C ${e}`,await so(i),this.sharedPath=e,{path:e,version:n}}async create(r){let n=await this.ensureDownloaded(),e=[];for(let o of r){let i=D(this.profile.directory,o);await this.setupRunnerDir(n,i),await this.registerRunner(i,o),e.push({directory:i,id:o,name:o,status:"registered"})}return e}async remove(r){for(let n of r){let e=D(this.profile.directory,n);if(!Dr(D(e,".runner")))continue;let o=await this.fetchRemovalToken(e);await Bun.$`bash ./config.sh remove --token ${o}`.cwd(e).quiet().nothrow()}}async start(r){for(let n of r){let e=D(this.profile.directory,n),o=await this.readPidFile(e);if(o&&this.isProcessRunning(o))continue;let i=Bun.spawn(["bash","./run.sh"],{cwd:Tr(e),stderr:"pipe",stdout:"pipe"});i.unref(),await this.writePidFile(e,i.pid)}}async stop(r){for(let n of r){let e=D(this.profile.directory,n);if(!await this.readPidFile(e))continue;let i=Tr(e);await Bun.$`pkill -f ${i}`.quiet().nothrow(),await this.removePidFile(e)}}async list(){let r=this.profile.directory;if(!Dr(r))return[];let n=await ao(r,{withFileTypes:!0}),e=[];for(let o of n){if(!o.isDirectory())continue;let i=D(r,o.name);e.push(await this.getRunnerStatus(i,o.name))}return e}async currentVersion(r){let n=D(this.profile.directory,r);return this.detectVersion(n)}async logFiles(r){return Lr(D(this.profile.directory,r,Rr))}async update(r){let n=await this.ensureDownloaded();for(let e of r){let o=D(this.profile.directory,e);await this.removeRunnerBinaries(o),await this.setupRunnerDir(n,o)}}async getRunnerStatus(r,n){let e=await this.readRunnerName(r),o=await this.readPidFile(r),i=o!==null&&this.isProcessRunning(o),t="unknown";if(i)t="running";else if(Dr(D(r,".runner")))t="registered";return{directory:r,id:n,name:e,pid:i?o:void 0,status:t}}async ensureDownloaded(){if(this.sharedPath)return this.sharedPath;let{path:r}=await this.download();return r}async setupRunnerDir(r,n){await Jn(n,{recursive:!0});for(let e of fo)await this.hardLinkDir(D(r,e),D(n,e));for(let e of uo){let o=Tr(r,e),i=D(n,e);if(!Dr(i))await rt(o,i)}for(let e of["*.sh","*.sh.template"]){let o=await Array.fromAsync(new Bun.Glob(e).scan(r));for(let i of o)await Bi(D(r,i),D(n,i))}}async registerRunner(r,n){let e=await this.fetchRegistrationToken(),o=["--url",this.profile.url,"--token",e,"--name",n,"--unattended"];if(this.profile.labels)o.push("--labels",this.profile.labels);if(this.profile.runnerGroup)o.push("--runnergroup",this.profile.runnerGroup);await Bun.$`bash ./config.sh ${o}`.cwd(r).quiet()}async fetchRegistrationToken(){return this.fetchRunnerToken(pr(this.profile.url),"registration-token")}async fetchRemovalToken(r){let n=await Yn(D(r,".runner"),"utf-8"),o=JSON.parse(this.stripBom(n)).gitHubUrl;if(!o)throw Error("Cannot determine GitHub URL from runner config");return this.fetchRunnerToken(pr(o),"remove-token")}async fetchRunnerToken(r,n){let e=r.kind==="repo"?`repos/${r.owner}/${r.repo}/actions/runners/${n}`:`orgs/${r.org}/actions/runners/${n}`,o=r.kind==="repo"?"gh needs admin access to the repository":"gh needs the admin:org scope",i=await Bun.$`gh api ${e} --method POST --jq .token`.quiet().nothrow();if(i.exitCode!==0){let a=i.stderr.toString().trim();throw Error(`gh api ${e} failed for ${Br(r)} (${o})${a?`: ${a}`:""}`)}let t=i.stdout.toString().trim();if(!t)throw Error(`Failed to fetch ${n} for ${Br(r)}`);return t}async getLatestVersion(){return(await Bun.$`gh api repos/${co}/releases/latest --jq .tag_name`.quiet()).stdout.toString().trim().replace(/^v/,"")}pidFilePath(r){return Tr(r,".pid")}async writePidFile(r,n){await nt(this.pidFilePath(r),String(n))}async readPidFile(r){try{let n=await Yn(this.pidFilePath(r),"utf-8");return Number.parseInt(n.trim(),10)}catch{return null}}async removePidFile(r){try{await so(this.pidFilePath(r))}catch{}}async readRunnerName(r){try{let n=await Yn(D(r,".runner"),"utf-8");return JSON.parse(this.stripBom(n)).agentName??"unknown"}catch{return"unknown"}}async hardLinkDir(r,n){await Jn(n,{recursive:!0});let e=await ao(r,{withFileTypes:!0});for(let o of e){let i=D(r,o.name),t=D(n,o.name);if(o.isDirectory())await this.hardLinkDir(i,t);else await _i(i,t)}}async detectVersion(r){try{return(await Ti(D(r,"externals"))).match(/github\/([^/]+)/)?.[1]??null}catch{return null}}async removeRunnerBinaries(r){for(let n of fo)await Kn(D(r,n),{force:!0,recursive:!0});for(let n of uo)await Kn(D(r,n),{force:!0});for(let n of["*.sh","*.sh.template"]){let e=await Array.fromAsync(new Bun.Glob(n).scan(r));for(let o of e)await Kn(D(r,o),{force:!0})}}stripBom(r){return r.replace(/^\uFEFF/,"")}isProcessRunning(r){try{return process.kill(r,0),!0}catch{return!1}}}import{existsSync as Qn}from"fs";import{readdir as On,readFile as ot,readlink as it,rm as Xn,stat as tt}from"fs/promises";import{join as ar}from"path";var po="_work",at="externals",st=".pid",ct="github",ft=/github\/([^/]+)/,ut=["runner","worker"],pt=24,mo=3600000,Zn=10;function nn(r){return{auto:r?.auto??Be,intervalHours:r?.intervalHours??_e,lastRun:r?.lastRun,olderThanDays:r?.olderThanDays??Te,targets:r?.targets??ro}}function lo(r,n){return r-n*pt*mo}function Vn(r,n){if(!r.lastRun)return!0;let e=Date.parse(r.lastRun);if(Number.isNaN(e))return!0;return n-e>=r.intervalHours*mo}function go(r,n){let e=_r(r),o=new Set;for(let i of ut){let t=e.find((a)=>a.type===i);if(t)o.add(t.path)}return e.filter((i)=>!o.has(i.path)&&i.mtime.getTime()<n)}function ho(r){return[...r].sort(ht)[0]??null}function bo(r,n){let e=ho(r),o=new Set(n);return r.filter((i)=>i!==e&&!o.has(i))}function vo(r){return r.match(ft)?.[1]??null}function en(r){return Object.values(r).reduce((n,e)=>n+e.freedBytes,0)}async function wo(r){try{let n=await ot(ar(r,st),"utf-8"),e=Number.parseInt(n.trim(),Zn);if(Number.isNaN(e))return!1;return process.kill(e,0),!0}catch{return!1}}async function on(r){if(!Qn(r))return 0;let n=await On(r,{withFileTypes:!0}),e=0;for(let o of n){if(o.isSymbolicLink())continue;let i=ar(r,o.name);if(o.isDirectory()){e+=await on(i);continue}if(o.isFile()){let t=await tt(i);e+=t.size}}return e}async function tn(r){let n=lo(r.now,r.olderThanDays),e={};for(let o of r.targets)switch(o){case"logs":e.logs=await mt(r.entries,n,r.dryRun);break;case"work":e.work=await lt(r.entries,r.dryRun);break;case"shared":e.shared=await dt(r.entries,r.dryRun,r.sharedDir);break}return e}async function mt(r,n,e){let o={freedBytes:0,removed:0,skipped:[]};for(let i of r){let t=await Lr(ar(i.directory,Rr));for(let a of go(t,n)){if(!e)await Xn(a.path,{force:!0});o.removed++,o.freedBytes+=a.size}}return o}async function lt(r,n){let e={freedBytes:0,removed:0,skipped:[]};for(let o of r){if(await wo(o.directory)){e.skipped.push(o.id);continue}let i=ar(o.directory,po);if(!Qn(i))continue;let t=await On(i);if(t.length===0)continue;if(e.freedBytes+=await on(i),e.removed+=t.length,n)continue;for(let a of t)await Xn(ar(i,a),{force:!0,recursive:!0})}return e}async function dt(r,n,e){let o={freedBytes:0,removed:0,skipped:[]},i=e??ar(ur,ct);if(!Qn(i))return o;let a=(await On(i,{withFileTypes:!0})).filter((c)=>c.isDirectory()).map((c)=>c.name),s=await gt(r);for(let c of bo(a,s)){let f=ar(i,c);if(o.freedBytes+=await on(f),o.removed++,!n)await Xn(f,{force:!0,recursive:!0})}return o}async function gt(r){let n=[];for(let e of r)try{let o=await it(ar(e.directory,at)),i=vo(o);if(i)n.push(i)}catch{}return n}function ht(r,n){let e=r.split(".").map((t)=>Number.parseInt(t,Zn)),o=n.split(".").map((t)=>Number.parseInt(t,Zn)),i=Math.max(e.length,o.length);for(let t=0;t<i;t++){let a=e[t]??0,s=o[t]??0,c=Number.isNaN(a)?0:a,f=Number.isNaN(s)?0:s;if(c!==f)return f-c}return 0}function x(r){switch(r.provider){case"github":return new rn(r);default:throw Error(`Runner provider "${r.provider}" is not yet implemented`)}}var Co=0,bt={logs:"file(s)",shared:"version(s)",work:"item(s)"},vt=tr({days:{alias:"d",default:Co,description:"Prune logs older than this many days (default from config)",type:"number"},dryRun:{alias:"n",default:!1,description:"List what would be deleted without deleting",type:"boolean"},logs:{alias:"l",default:!1,description:"Prune old _diag log files",type:"boolean"},shared:{alias:"s",default:!1,description:"Remove unused shared runner versions",type:"boolean"},work:{alias:"w",default:!1,description:"Delete _work contents of stopped runners",type:"boolean"},yes:{alias:"y",default:!1,description:"Skip confirmation prompts",type:"boolean"}});class an extends R{name="cleanup";description="Free disk space used by logs, job workspaces, and old runner versions";args=vt;async execute(r){let n=r.config.get("profiles");if(Object.keys(n).length===0)throw new w("No profiles configured","Run hydra init to set up a profile");let e=nn(r.config.get("cleanup")),o=this.explicitTargets(r),i=o.length>0?o:e.targets,t=r.args.days>Co?r.args.days:e.olderThanDays;if(i.includes("work")&&!r.args.dryRun&&!r.args.yes&&r.interactive){if(!await sr({message:"Delete _work contents (checkouts and caches) of stopped runners?"}))i=i.filter((c)=>c!=="work")}let a=await tn({dryRun:r.args.dryRun,entries:r.config.get("runners")??[],now:Date.now(),olderThanDays:t,targets:i});if(this.printReport(a,r.args.dryRun),r.args.dryRun)return;r.config.set("cleanup",{...r.config.get("cleanup"),lastRun:new Date().toISOString()})}explicitTargets(r){let n=[];if(r.args.logs)n.push("logs");if(r.args.work)n.push("work");if(r.args.shared)n.push("shared");return n}printReport(r,n){let e=[];for(let[t,a]of Object.entries(r)){if(!a)continue;let s=bt[t],c=mr(a.freedBytes),f=n?`would remove ${a.removed} ${s}, ${c}`:`removed ${a.removed} ${s}, freed ${c}`;if(e.push(`${m.bold(t)}: ${a.removed>0?f:m.dim("nothing to do")}`),a.skipped.length>0)e.push(m.dim(` skipped running runner(s): ${a.skipped.join(", ")}`))}if(e.length===0){v.info(m.dim("Nothing to clean."));return}let o=en(r),i=n?"Would free":"Freed";e.push(m.dim(`${i} ${mr(o)} total`)),v.info(e.join(`
94
- `))}}async function Ir(r){try{let n=nn(r.config.get("cleanup"));if(!n.auto)return;if(!Vn(n,Date.now()))return;let e=await tn({dryRun:!1,entries:r.config.get("runners")??[],now:Date.now(),olderThanDays:n.olderThanDays,targets:n.targets});r.config.set("cleanup",{...r.config.get("cleanup"),lastRun:new Date().toISOString()});let o=en(e);if(o>0)v.info(m.dim(`Auto cleanup freed ${mr(o)}`))}catch(n){let e=n instanceof Error?n.message:String(n);v.warn(m.yellow(`Auto cleanup failed: ${e}`))}}import{join as wt}from"path";function hr(r,n){if(r.length===0)return n;for(let e of r)if(!n.includes(e))throw new w(`Runner "${e}" not found`);return r}function z(r,n){let e=r.get("profiles");if(Object.keys(e).length===0)throw new w("No profiles configured","Run hydra init to set up a profile");let o=n??r.get("defaultProfile")??kr,i=e[o];if(!i)throw new w(`Profile "${o}" not found`);return{name:o,profile:i}}async function Q(r){let n=r.get("profiles"),e=Object.keys(n);if(e.length===0)throw new w("No profiles configured","Run hydra init to set up a profile");if(e.length===1)return e[0];return cr({message:"Select profile",options:e.map((o)=>({label:o,value:o,hint:n[o]?.url}))})}var Ct=G({profile:{description:"Profile name"},count:{description:"Number of runners to create (overrides profile)"}});class sn extends R{name="create";description="Create and register runners";positionals=Ct;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await Q(r.config)):z(r.config,r.positionals.profile),o=r.interactive?await this.promptCount(e.numberOfMachines):r.positionals.count?Number.parseInt(r.positionals.count,10):e.numberOfMachines;if(!o||o<1)throw new w("Runner count must be at least 1");let i=x(e),t=Y();t.start("Downloading runner binary...");let{version:a}=await i.download();t.stop(`Runner v${a} ready`);let s=r.config.get("runners")??[],c=s.filter((l)=>l.profile===n),f=o-c.length;if(f<=0){v.warn(`Already have ${c.length} runner(s) for profile "${n}". Nothing to create.`);return}let d=new Set(s.map((l)=>l.id)),g=1;for(let l=0;l<f;){let b=`${e.name}-${g++}`;if(d.has(b))continue;l++,t.start(`Registering ${b}...`),await i.create([b]),t.stop(`${m.green("+")} ${b}`),s.push({createdAt:new Date().toISOString(),directory:wt(e.directory,b),id:b,name:b,profile:n,provider:e.provider,url:e.url})}r.config.set("runners",s);let h=n===r.config.get("defaultProfile")?"":` ${n}`;v.info(`${m.green("Created")} ${f} runner(s) for "${n}". Run ${m.green(`hydra start${h}`)} to start them.`)}async promptCount(r){let n=await rr({initialValue:String(r),message:"Number of runners to create",validate:(e)=>{let o=Number.parseInt(e??"",10);if(Number.isNaN(o)||o<1)return"Must be a positive number";return}});return Number.parseInt(n,10)}}import{existsSync as $o}from"fs";import{mkdir as yo}from"fs/promises";var $t=G({url:{description:"GitHub repository or organization URL"}}),yt=tr({force:{alias:"f",default:!1,description:"Overwrite existing config",type:"boolean"},labels:{alias:"l",description:"Comma-separated runner labels",type:"string"},name:{alias:"n",description:"Base name for runners",type:"string"},profile:{alias:"p",description:"Profile name",type:"string"},runners:{alias:"c",description:"Number of runners to create",type:"number"}});class cn extends R{name="init";description="Initialize Hydra runner manager";positionals=$t;args=yt;prompts=!0;async execute(r){let n=r.interactive?await this.promptProfileName(r):r.args.profile??kr,e=!r.config.exists();if(!e&&r.config.get("profiles")[n]&&!r.args.force){if(!r.interactive)throw new w(`Profile "${n}" already exists. Use --force to overwrite.`);if(!await sr({initialValue:!1,message:`Profile "${n}" already exists. Overwrite?`}))return}await this.ensureDirectories();let i=r.interactive?await this.runInitForm():this.buildProfileFromArgs(r),t=e?{}:{...r.config.get("profiles")};if(t[n]=i,r.config.set("profiles",t),!r.config.get("defaultProfile"))r.config.set("defaultProfile",n);lr([`${m.dim("Profile:")} ${n}`,`${m.dim("URL:")} ${i.url}`,`${m.dim("Runners:")} ${i.numberOfMachines}`,`${m.dim("Name:")} ${i.name}`,i.labels?`${m.dim("Labels:")} ${i.labels}`:"","",`Run ${m.green(`${Sr} create${n!==r.config.get("defaultProfile")?` ${n}`:""}`)} to provision runners.`].filter(Boolean).join(`
95
- `),m.green(e?"Hydra initialized":`Profile "${n}" added`))}async promptProfileName(r){return rr({initialValue:r.args.profile??kr,message:"Profile name"})}async ensureDirectories(){if(!$o(ur))await yo(ur,{recursive:!0});if(!$o(Fr))await yo(Fr,{recursive:!0})}async runInitForm(){let r=await Wr({url:()=>rr({message:"GitHub repository or organization URL",placeholder:"https://github.com/owner/repo",validate:(n)=>{if(!n)return"URL is required";try{pr(n)}catch{return"Must be a GitHub repository or organization URL (https://github.com/<owner>/<repo> or https://github.com/<org>)"}return}}),name:()=>rr({initialValue:"runner",message:"Base name for runners",placeholder:"runner"}),runners:()=>rr({initialValue:"1",message:"Number of runners",placeholder:"1",validate:(n)=>{if(!n)return"Must be a positive number";let e=Number.parseInt(n,10);if(Number.isNaN(e)||e<1)return"Must be a positive number";return}}),labels:()=>rr({message:"Additional labels (comma-separated, optional)",placeholder:"self-hosted,macOS,ARM64"})},{onCancel:()=>{throw new O}});return{directory:Fr,labels:r.labels||void 0,name:r.name,numberOfMachines:Number.parseInt(r.runners,10)||1,os:this.detectOs(),overwrite:!1,provider:"github",run:!1,url:r.url}}buildProfileFromArgs(r){if(!r.positionals.url)throw new w("URL is required","Usage: hydra init <url>");return this.validateUrl(r.positionals.url),this.validateRunnerCount(r.args.runners),{directory:Fr,labels:r.args.labels,name:r.args.name??"runner",numberOfMachines:r.args.runners??1,os:this.detectOs(),overwrite:!1,provider:"github",run:!1,url:r.positionals.url}}validateUrl(r){try{pr(r)}catch(n){throw new w(n instanceof Error?n.message:`Invalid GitHub URL: ${r}`,"Expected https://github.com/<owner>/<repo> or https://github.com/<org>")}}validateRunnerCount(r){if(r!==void 0&&r<1)throw new w("Runner count must be at least 1")}detectOs(){let r=process.platform;if(r==="darwin")return"osx";if(r==="win32")return"windows";return"linux"}}import{existsSync as Pt}from"fs";import{readFile as Ft}from"fs/promises";var kt=100,Rt={runner:"runner daemon log",worker:"job log"},Lt=tr({lines:{alias:"n",default:kt,description:"Number of lines to tail",type:"number"},list:{alias:"l",default:!1,description:"List available log files instead of printing content",type:"boolean"},open:{alias:"o",default:!1,description:"Open the log file in $EDITOR instead of printing",type:"boolean"},runner:{alias:"r",default:!1,description:"Show the runner daemon log instead of the latest job log",type:"boolean"}}),Dt=G({id:{description:"Runner ID"}});class fn extends R{name="logs";description="Inspect logs of the latest jobs";args=Lt;positionals=Dt;async execute(r){let n=r.config.get("runners")??[];if(n.length===0)throw new w("No runners found","Run hydra create to provision runners");let e=await this.resolveEntry(r,n),o=r.config.get("profiles")[e.profile];if(!o)throw new w(`Profile "${e.profile}" not found for runner "${e.id}"`,"Run hydra init to set it up");if(!Pt(e.directory))throw new w(`Runner directory not found: ${e.directory}`,"Run hydra create to provision this runner");let t=await x(o).logFiles(e.id);if(t.length===0)this.noLogs(e.id);if(r.args.list){this.printList(e,t);return}let a=this.selectFile(r,e,t);if(r.args.open){await this.openFile(a);return}await this.printTail(e,a,r.args.lines)}async resolveEntry(r,n){let e=r.positionals.id;if(e){let i=n.find((t)=>t.id===e);if(!i)throw new w(`Runner "${e}" not found`,`Known runners: ${n.map((t)=>t.id).join(", ")}`);return i}if(r.interactive)return cr({message:"Select runner",options:n.map((i)=>({hint:i.profile,label:i.name,value:i}))});let o=n[0];if(n.length===1&&o)return o;throw new w("Multiple runners found",`Pass a runner id: hydra logs <id> (${n.map((i)=>i.id).join(", ")})`)}selectFile(r,n,e){if(r.args.runner){let i=e.find((t)=>t.type==="runner");if(!i)throw new w(`No runner daemon logs found for "${n.id}"`,"Start the runner first: hydra start");return i}let o=zn(e,"worker");if(!o)this.noLogs(n.id);if(o.fallback)v.warn(m.yellow("No job (Worker) logs yet; showing the runner daemon log instead"));return o.file}noLogs(r){throw new w(`No logs found for runner "${r}"`,"Logs appear once the runner has started; run hydra start")}printList(r,n){let e=[`${m.bold(r.name)} ${m.dim(r.directory)}`];for(let o of n){let i=o.type==="worker"?m.green("worker"):m.blue("runner");e.push(` ${i} ${o.name} ${m.dim(`${o.mtime.toISOString()} \xB7 ${mr(o.size)}`)}`)}v.info(e.join(`
96
- `))}async printTail(r,n,e){let o=await Ft(n.path,"utf-8"),i=[`${m.bold(r.name)} ${m.dim(Rt[n.type])}`,m.dim(n.path),m.dim(`Last modified: ${n.mtime.toISOString()}`)];v.info(i.join(`
97
- `)),console.log(Wn(o,e))}async openFile(r){let n=(process.env.EDITOR??"").split(" ").filter(Boolean),e=n[0];if(e){await Bun.spawn([e,...n.slice(1),r.path],{stderr:"inherit",stdin:"inherit",stdout:"inherit"}).exited;return}if(process.platform==="darwin"){await Bun.$`open ${r.path}`.quiet();return}throw new w("No editor configured","Set $EDITOR to open log files")}}var It=G({name:{description:"Profile name to set as default"}});class Sn extends R{name="default";description="Set the default profile";positionals=It;async execute(r){let n=r.interactive?await Q(r.config):r.positionals.name;if(!n)throw new w("Profile name is required","Usage: hydra profile default <name>");let{name:e}=z(r.config,n);if(r.config.get("defaultProfile")===e){v.info(`"${e}" is already the default profile.`);return}r.config.set("defaultProfile",e),v.info(`${m.green("Default profile set to")} "${e}".`)}}class Bn extends R{name="list";description="List all profiles";async execute(r){let n=r.config.get("profiles"),e=Object.keys(n);if(e.length===0)throw new w("No profiles configured","Run hydra init to set up a profile");let o=r.config.get("runners")??[],i=r.config.get("defaultProfile");for(let t of e){let a=n[t],c=await x(a).list(),f=o.filter((b)=>b.profile===t),d=new Set(c.filter((b)=>b.status==="running").map((b)=>b.id)),g=f.filter((b)=>d.has(b.id)).length,p=t===i,h=[`${m.dim("URL:")} ${a.url}`,`${m.dim("Provider:")} ${a.provider}`,`${m.dim("OS:")} ${a.os}`,`${m.dim("Name:")} ${a.name}`,`${m.dim("Runners:")} ${f.length}/${a.numberOfMachines} created, ${m.green(`${g} running`)}`];if(a.labels)h.push(`${m.dim("Labels:")} ${a.labels}`);let l=p?`${t} ${m.dim("(default)")}`:t;lr(h.join(`
98
- `),l)}v.info(m.dim(`${e.length} profile(s)`))}}import{rm as Et}from"fs/promises";import{join as Ht}from"path";var Ut=G({name:{description:"Profile name to remove"}});class _n extends R{name="remove";description="Remove a profile";positionals=Ut;async execute(r){let n=r.interactive?await Q(r.config):r.positionals.name;if(!n)throw new w("Profile name is required","Usage: hydra profile remove <name>");let{profile:e}=z(r.config,n),o=r.config.get("runners")??[],i=o.filter((c)=>c.profile===n);if(i.length>0){if(!await sr({initialValue:!0,message:`This will stop and remove ${i.length} runner(s). Continue?`}))return;await this.removeRunners(e,i.map((d)=>d.id));let f=o.filter((d)=>d.profile!==n);r.config.set("runners",f)}let{[n]:t,...a}=r.config.get("profiles");if(r.config.set("profiles",a),r.config.get("defaultProfile")===n){let c=Object.keys(a);r.config.set("defaultProfile",c[0])}v.info(`${m.green("Removed")} profile "${n}".`)}async removeRunners(r,n){let e=x(r),o=Y();for(let i of n)o.start(`Stopping and removing ${i}...`),await e.stop([i]),await e.remove([i]),await Et(Ht(r.directory,i),{force:!0,recursive:!0}),o.stop(`${m.red("-")} ${i}`)}}class un extends R{name="profile";description="Manage profiles";init(){this.registerSubcommands([new Bn,new _n,new Sn])}}import{rm as Nt}from"fs/promises";import{join as jt}from"path";var At=G({profile:{description:"Profile name"},ids:{description:"Runner IDs (omit to target all)",variadic:!0}});class pn extends R{name="remove";description="Deregister and remove runners";positionals=At;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await Q(r.config)):z(r.config,r.positionals.profile),o=r.config.get("runners")??[],i=o.filter((f)=>f.profile===n);if(i.length===0)throw new w(`No runners found for profile "${n}"`,"Run hydra create to provision runners");let t=r.interactive?await this.promptRunnerSelection(i.map((f)=>f.id)):hr(r.positionals.ids??[],i.map((f)=>f.id)),a=x(e),s=Y();for(let f of t)s.start(`Stopping and removing ${f}...`),await a.stop([f]),await a.remove([f]),await Nt(jt(e.directory,f),{force:!0,recursive:!0}),s.stop(`${m.red("-")} ${f}`);let c=o.filter((f)=>!t.includes(f.id));r.config.set("runners",c),v.info(`${m.green("Removed")} ${t.length} runner(s).`)}async promptRunnerSelection(r){return fr({message:"Select runners to remove",options:r.map((n)=>({label:n,value:n})),required:!0})}}var Mt=G({profile:{description:"Profile name"},ids:{description:"Runner IDs (omit to target all)",variadic:!0}});class mn extends R{name="start";description="Start runners";positionals=Mt;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await Q(r.config)):z(r.config,r.positionals.profile),i=(r.config.get("runners")??[]).filter((p)=>p.profile===n);if(i.length===0)throw new w(`No runners found for profile "${n}"`,"Run hydra create to provision runners");let t=x(e),a=Y();a.start("Fetching runner status...");let s=await t.list();a.stop("Runner status fetched");let c=new Set(s.filter((p)=>p.status==="running").map((p)=>p.id)),f=i.map((p)=>p.id).filter((p)=>!c.has(p)),d=r.interactive?await this.promptRunnerSelection(f):hr(r.positionals.ids??[],i.map((p)=>p.id)),g=0;for(let p of d){if(c.has(p)){a.start(""),a.stop(`${m.dim("\u25CF")} ${p} ${m.dim("already running")}`);continue}a.start(`Starting ${p}...`),await t.start([p]),a.stop(`${m.green("\u25B6")} ${p}`),g++}v.info(`${m.green("Started")} ${g} runner(s).`),await Ir(r)}async promptRunnerSelection(r){if(r.length===0)throw new w("All runners are already running");return fr({message:"Select runners to start",options:r.map((n)=>({label:n,value:n})),required:!0})}}var Gt={registered:m.yellow,running:m.green,stopped:m.red,unknown:m.dim};class ln extends R{name="status";description="Show runner status across all profiles";async execute(r){let n=r.config.get("profiles"),e=Object.keys(n);if(e.length===0)throw new w("No profiles configured","Run hydra init to set up a profile");let o=r.config.get("runners")??[],i=0,t=0,a=[];for(let s of e){let c=n[s],d=await x(c).list();if(a.length>0)a.push("");a.push(`${m.bold(s)} ${m.dim(c.url)}`);let g=new Set(o.filter((h)=>h.profile===s).map((h)=>h.id)),p=d.filter((h)=>g.has(h.id)).sort((h,l)=>h.name.localeCompare(l.name,void 0,{numeric:!0}));this.formatRunners(p,a),i+=p.length,t+=p.filter((h)=>h.status==="running").length}a.push(""),a.push(m.dim(`${i} runner(s) total, ${t} running`)),v.info(a.join(`
99
- `))}formatRunners(r,n){if(r.length===0){n.push(m.dim(" No runners."));return}for(let e of r){let o=Gt[e.status]??m.dim,i=e.pid?m.dim(` (pid: ${e.pid})`):"";n.push(` ${o("\u25CF")} ${e.name} ${o(e.status)}${i}`)}}}var xt=G({profile:{description:"Profile name"},ids:{description:"Runner IDs (omit to target all)",variadic:!0}});class dn extends R{name="stop";description="Stop runners";positionals=xt;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await Q(r.config)):z(r.config,r.positionals.profile),i=(r.config.get("runners")??[]).filter((p)=>p.profile===n);if(i.length===0)throw new w(`No runners found for profile "${n}"`,"Run hydra create to provision runners");let t=x(e),a=Y();a.start("Fetching runner status...");let s=await t.list();a.stop("Runner status fetched");let c=new Set(s.filter((p)=>p.status==="running").map((p)=>p.id)),f=i.map((p)=>p.id).filter((p)=>c.has(p)),d=r.interactive?await this.promptRunnerSelection(f):hr(r.positionals.ids??[],i.map((p)=>p.id)),g=0;for(let p of d){if(!c.has(p)){a.start(""),a.stop(`${m.dim("\u25CF")} ${p} ${m.dim("not running")}`);continue}a.start(`Stopping ${p}...`),await t.stop([p]),a.stop(`${m.red("\u25A0")} ${p}`),g++}v.info(`${m.green("Stopped")} ${g} runner(s).`)}async promptRunnerSelection(r){if(r.length===0)throw new w("No runners are currently running");return fr({message:"Select runners to stop",options:r.map((n)=>({label:n,value:n})),required:!0})}}class gn extends R{name="update";description="Update runners to the latest version";async execute(r){let n=r.config.get("profiles"),e=r.config.get("runners")??[];if(e.length===0)throw new w("No runners found","Run hydra create to provision runners");let o=Y(),i=Map.groupBy(e,(c)=>c.profile),t=null,a="",s=!1;for(let[c,f]of i){let d=n[c],g=f[0];if(!d||!g)continue;let p=x(d);if(!s){if(s=!0,o.start("Checking for updates..."),a=(await p.download()).version,t=await p.currentVersion(g.id),o.stop(`Current: v${t??"unknown"} | Latest: v${a}`),t===a){v.info(`Already on latest version ${m.dim(`(v${a})`)}`),await Ir(r);return}}let h=await p.list(),l=new Set(h.filter((b)=>b.status==="running").map((b)=>b.id));for(let b of f){let F=l.has(b.id);if(o.start(`Updating ${b.id}...`),F)await p.stop([b.id]);if(await p.update([b.id]),F)await p.start([b.id]);let I=F?` ${m.dim("(restarted)")}`:"";o.stop(`${m.green("\u2713")} ${b.id}${I}`)}}v.info(`${m.green("Updated")} ${e.length} runner(s) from v${t} to v${a}`),await Ir(r)}}class Po extends xn{constructor(){super(new qn(Ve,Se),{bin:Sr,clearOnStart:!0,exitLabel:"Exit",goodbyeMessage:"Heads down.",name:"HYDRA",promptMessage:"What do you need?",version:Xe})}init(){this.registerCommands([new cn,new sn,new mn,new dn,new ln,new fn,new an,new pn,new gn,new un])}}var qt=new Po;qt.run();
93
+ `)}function mr(r){let n=r,e=0;while(n>=io&&e<to.length-1)n/=io,e++;return`${e===0?String(n):n.toFixed(Bi)} ${to[e]??"B"}`}var uo="actions/runner",ot={linux:"linux-x64",osx:"osx-arm64",windows:"win-x64"},fo=["bin"],po=["externals"];class nn{profile;sharedPath=null;constructor(r){this.profile=r}async download(){let r=ot[this.profile.os],n=await this.getLatestVersion(),e=D(fr,"github",n);if(Dr(e))return this.sharedPath=e,{path:e,version:n};await Kn(e,{recursive:!0});let o=`actions-runner-${r}-${n}.tar.gz`,i=D(e,o),t=`https://github.com/${uo}/releases/download/v${n}/${o}`;return await Bun.$`curl -sL -o ${i} ${t}`,await Bun.$`tar xzf ${i} -C ${e}`,await co(i),this.sharedPath=e,{path:e,version:n}}async create(r){let n=await this.ensureDownloaded(),e=[];for(let o of r){let i=D(this.profile.directory,o);await this.setupRunnerDir(n,i),await this.registerRunner(i,o),e.push({directory:i,id:o,name:o,status:"registered"})}return e}async remove(r){for(let n of r){let e=D(this.profile.directory,n);if(!Dr(D(e,".runner")))continue;let o=await this.fetchRemovalToken(e);await Bun.$`bash ./config.sh remove --token ${o}`.cwd(e).quiet().nothrow()}}async start(r){for(let n of r){let e=D(this.profile.directory,n),o=await this.readPidFile(e);if(o&&this.isProcessRunning(o))continue;let i=Bun.spawn(["bash","./run.sh"],{cwd:rn(e),stderr:"pipe",stdout:"pipe"});i.unref(),await this.writePidFile(e,i.pid)}}async stop(r){for(let n of r){let e=D(this.profile.directory,n);if(!await this.readPidFile(e))continue;let i=rn(e);await Bun.$`pkill -f ${i}`.quiet().nothrow(),await this.removePidFile(e)}}async list(){let r=this.profile.directory;if(!Dr(r))return[];let n=await so(r,{withFileTypes:!0}),e=[];for(let o of n){if(!o.isDirectory())continue;let i=D(r,o.name);e.push(await this.getRunnerStatus(i,o.name))}return e}async currentVersion(r){let n=D(this.profile.directory,r);return this.detectVersion(n)}async logFiles(r){return Lr(D(this.profile.directory,r,Rr))}async update(r){let n=await this.ensureDownloaded();for(let e of r){let o=D(this.profile.directory,e);await this.removeRunnerBinaries(o),await this.setupRunnerDir(n,o)}}async getRunnerStatus(r,n){let e=await this.readRunnerName(r),o=await this.readPidFile(r),i=o!==null&&this.isProcessRunning(o),t="unknown";if(i)t="running";else if(Dr(D(r,".runner")))t="registered";return{directory:r,id:n,name:e,pid:i?o:void 0,status:t}}async ensureDownloaded(){if(this.sharedPath)return this.sharedPath;let{path:r}=await this.download();return r}async setupRunnerDir(r,n){await Kn(n,{recursive:!0});for(let e of fo)await this.hardLinkDir(D(r,e),D(n,e));for(let e of po){let o=rn(r,e),i=D(n,e);if(!Dr(i))await nt(o,i)}for(let e of["*.sh","*.sh.template"]){let o=await Array.fromAsync(new Bun.Glob(e).scan(r));for(let i of o)await _i(D(r,i),D(n,i))}}async registerRunner(r,n){let e=await this.fetchRegistrationToken(),o=["--url",this.profile.url,"--token",e,"--name",n,"--unattended"];if(this.profile.labels)o.push("--labels",this.profile.labels);if(this.profile.runnerGroup)o.push("--runnergroup",this.profile.runnerGroup);await Bun.$`bash ./config.sh ${o}`.cwd(r).quiet()}async fetchRegistrationToken(){return this.fetchRunnerToken(pr(this.profile.url),"registration-token")}async fetchRemovalToken(r){let n=await Zn(D(r,".runner"),"utf-8"),o=JSON.parse(this.stripBom(n)).gitHubUrl;if(!o)throw Error("Cannot determine GitHub URL from runner config");return this.fetchRunnerToken(pr(o),"remove-token")}async fetchRunnerToken(r,n){let e=r.kind==="repo"?`repos/${r.owner}/${r.repo}/actions/runners/${n}`:`orgs/${r.org}/actions/runners/${n}`,o=r.kind==="repo"?"gh needs admin access to the repository":"gh needs the admin:org scope",i=await Bun.$`gh api ${e} --method POST --jq .token`.quiet().nothrow();if(i.exitCode!==0){let a=i.stderr.toString().trim();throw Error(`gh api ${e} failed for ${_r(r)} (${o})${a?`: ${a}`:""}`)}let t=i.stdout.toString().trim();if(!t)throw Error(`Failed to fetch ${n} for ${_r(r)}`);return t}async getLatestVersion(){return(await Bun.$`gh api repos/${uo}/releases/latest --jq .tag_name`.quiet()).stdout.toString().trim().replace(/^v/,"")}pidFilePath(r){return rn(r,".pid")}async writePidFile(r,n){await et(this.pidFilePath(r),String(n))}async readPidFile(r){try{let n=await Zn(this.pidFilePath(r),"utf-8");return Number.parseInt(n.trim(),10)}catch{return null}}async removePidFile(r){try{await co(this.pidFilePath(r))}catch{}}async readRunnerName(r){try{let n=await Zn(D(r,".runner"),"utf-8");return JSON.parse(this.stripBom(n)).agentName??"unknown"}catch{return"unknown"}}async hardLinkDir(r,n){await Kn(n,{recursive:!0});let e=await so(r,{withFileTypes:!0});for(let o of e){let i=D(r,o.name),t=D(n,o.name);if(o.isDirectory())await this.hardLinkDir(i,t);else await Ti(i,t)}}async detectVersion(r){try{return(await rt(D(r,"externals"))).match(/github\/([^/]+)/)?.[1]??null}catch{return null}}async removeRunnerBinaries(r){for(let n of fo)await On(D(r,n),{force:!0,recursive:!0});for(let n of po)await On(D(r,n),{force:!0});for(let n of["*.sh","*.sh.template"]){let e=await Array.fromAsync(new Bun.Glob(n).scan(r));for(let o of e)await On(D(r,o),{force:!0})}}stripBom(r){return r.replace(/^\uFEFF/,"")}isProcessRunning(r){try{return process.kill(r,0),!0}catch{return!1}}}import{existsSync as Xn}from"fs";import{readdir as Vn,readFile as it,readlink as tt,rm as Sn,stat as at}from"fs/promises";import{join as ar}from"path";var mo="_work",st="externals",ct=".pid",ut="github",ft=/github\/([^/]+)/,pt=["runner","worker"],mt=24,lo=3600000,Qn=10;function en(r){return{auto:r?.auto??Te,intervalHours:r?.intervalHours??ro,lastRun:r?.lastRun,olderThanDays:r?.olderThanDays??Br,targets:r?.targets??no}}function go(r,n){return r-n*mt*lo}function Bn(r,n){if(!r.lastRun)return!0;let e=Date.parse(r.lastRun);if(Number.isNaN(e))return!0;return n-e>=r.intervalHours*lo}function ho(r,n){let e=Tr(r),o=new Set;for(let i of pt){let t=e.find((a)=>a.type===i);if(t)o.add(t.path)}return e.filter((i)=>!o.has(i.path)&&i.mtime.getTime()<n)}function bo(r){return[...r].sort(bt)[0]??null}function wo(r,n){let e=bo(r),o=new Set(n);return r.filter((i)=>i!==e&&!o.has(i))}function vo(r){return r.match(ft)?.[1]??null}function on(r){return Object.values(r).reduce((n,e)=>n+e.freedBytes,0)}async function Co(r){try{let n=await it(ar(r,ct),"utf-8"),e=Number.parseInt(n.trim(),Qn);if(Number.isNaN(e))return!1;return process.kill(e,0),!0}catch{return!1}}async function tn(r){if(!Xn(r))return 0;let n=await Vn(r,{withFileTypes:!0}),e=0;for(let o of n){if(o.isSymbolicLink())continue;let i=ar(r,o.name);if(o.isDirectory()){e+=await tn(i);continue}if(o.isFile()){let t=await at(i);e+=t.size}}return e}async function an(r){let n=go(r.now,r.olderThanDays),e={};for(let o of r.targets)switch(o){case"logs":e.logs=await lt(r.entries,n,r.dryRun);break;case"work":e.work=await dt(r.entries,r.dryRun);break;case"shared":e.shared=await gt(r.entries,r.dryRun,r.sharedDir);break}return e}async function lt(r,n,e){let o={freedBytes:0,removed:0,skipped:[]};for(let i of r){let t=await Lr(ar(i.directory,Rr));for(let a of ho(t,n)){if(!e)await Sn(a.path,{force:!0});o.removed++,o.freedBytes+=a.size}}return o}async function dt(r,n){let e={freedBytes:0,removed:0,skipped:[]};for(let o of r){if(await Co(o.directory)){e.skipped.push(o.id);continue}let i=ar(o.directory,mo);if(!Xn(i))continue;let t=await Vn(i);if(t.length===0)continue;if(e.freedBytes+=await tn(i),e.removed+=t.length,n)continue;for(let a of t)await Sn(ar(i,a),{force:!0,recursive:!0})}return e}async function gt(r,n,e){let o={freedBytes:0,removed:0,skipped:[]},i=e??ar(fr,ut);if(!Xn(i))return o;let a=(await Vn(i,{withFileTypes:!0})).filter((c)=>c.isDirectory()).map((c)=>c.name),s=await ht(r);for(let c of wo(a,s)){let u=ar(i,c);if(o.freedBytes+=await tn(u),o.removed++,!n)await Sn(u,{force:!0,recursive:!0})}return o}async function ht(r){let n=[];for(let e of r)try{let o=await tt(ar(e.directory,st)),i=vo(o);if(i)n.push(i)}catch{}return n}function bt(r,n){let e=r.split(".").map((t)=>Number.parseInt(t,Qn)),o=n.split(".").map((t)=>Number.parseInt(t,Qn)),i=Math.max(e.length,o.length);for(let t=0;t<i;t++){let a=e[t]??0,s=o[t]??0,c=Number.isNaN(a)?0:a,u=Number.isNaN(s)?0:s;if(c!==u)return u-c}return 0}function x(r){switch(r.provider){case"github":return new nn(r);default:throw Error(`Runner provider "${r.provider}" is not yet implemented`)}}var $o=0,wt={logs:"file(s)",shared:"version(s)",work:"item(s)"},vt=tr({days:{alias:"d",default:$o,description:"Override log retention",displayDefault:`config or ${Br} days`,type:"number"},dryRun:{alias:"n",default:!1,description:"Preview cleanup without deleting",type:"boolean"},logs:{alias:"l",default:!1,description:"Remove old diagnostic logs",type:"boolean"},shared:{alias:"s",default:!1,description:"Remove unused runner versions",type:"boolean"},work:{alias:"w",default:!1,description:"Clear stopped runners' workspaces",type:"boolean"},yes:{alias:"y",default:!1,description:"Skip workspace confirmation",type:"boolean"}});class sn extends R{name="cleanup";description="Remove logs, workspaces, and old runner versions";args=vt;async execute(r){let n=r.config.get("profiles");if(Object.keys(n).length===0)throw new v("No profiles configured","Run hydra init to set up a profile");let e=en(r.config.get("cleanup")),o=this.explicitTargets(r),i=o.length>0?o:e.targets,t=r.args.days>$o?r.args.days:e.olderThanDays;if(i.includes("work")&&!r.args.dryRun&&!r.args.yes){if(!await sr({message:"Delete _work contents (checkouts and caches) of stopped runners?"}))i=i.filter((c)=>c!=="work")}let a=await an({dryRun:r.args.dryRun,entries:r.config.get("runners")??[],now:Date.now(),olderThanDays:t,targets:i});if(this.printReport(a,r.args.dryRun),r.args.dryRun)return;r.config.set("cleanup",{...r.config.get("cleanup"),lastRun:new Date().toISOString()})}explicitTargets(r){let n=[];if(r.args.logs)n.push("logs");if(r.args.work)n.push("work");if(r.args.shared)n.push("shared");return n}printReport(r,n){let e=[];for(let[t,a]of Object.entries(r)){if(!a)continue;let s=wt[t],c=mr(a.freedBytes),u=n?`would remove ${a.removed} ${s}, ${c}`:`removed ${a.removed} ${s}, freed ${c}`;if(e.push(`${m.bold(t)}: ${a.removed>0?u:m.dim("nothing to do")}`),a.skipped.length>0)e.push(m.dim(` skipped running runner(s): ${a.skipped.join(", ")}`))}if(e.length===0){w.info(m.dim("Nothing to clean."));return}let o=on(r),i=n?"Would free":"Freed";e.push(m.dim(`${i} ${mr(o)} total`)),w.info(e.join(`
94
+ `))}}async function Ir(r){try{let n=en(r.config.get("cleanup"));if(!n.auto)return;if(!Bn(n,Date.now()))return;let e=await an({dryRun:!1,entries:r.config.get("runners")??[],now:Date.now(),olderThanDays:n.olderThanDays,targets:n.targets});r.config.set("cleanup",{...r.config.get("cleanup"),lastRun:new Date().toISOString()});let o=on(e);if(o>0)w.info(m.dim(`Auto cleanup freed ${mr(o)}`))}catch(n){let e=n instanceof Error?n.message:String(n);w.warn(m.yellow(`Auto cleanup failed: ${e}`))}}import{join as Ct}from"path";function hr(r,n){if(r.length===0)return n;for(let e of r)if(!n.includes(e))throw new v(`Runner "${e}" not found`);return r}function z(r,n){let e=r.get("profiles");if(Object.keys(e).length===0)throw new v("No profiles configured","Run hydra init to set up a profile");let o=n??r.get("defaultProfile")??kr,i=e[o];if(!i)throw new v(`Profile "${o}" not found`);return{name:o,profile:i}}async function O(r){let n=r.get("profiles"),e=Object.keys(n);if(e.length===0)throw new v("No profiles configured","Run hydra init to set up a profile");if(e.length===1)return e[0];return cr({message:"Select profile",options:e.map((o)=>({label:o,value:o,hint:n[o]?.url}))})}var $t=G({profile:{description:"Profile to use"},count:{description:"Runner count override"}});class cn extends R{name="create";description="Download and register runners";positionals=$t;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await O(r.config)):z(r.config,r.positionals.profile),o=r.interactive?await this.promptCount(e.numberOfMachines):r.positionals.count?Number.parseInt(r.positionals.count,10):e.numberOfMachines;if(!o||o<1)throw new v("Runner count must be at least 1");let i=x(e),t=J();t.start("Downloading runner binary...");let{version:a}=await i.download();t.stop(`Runner v${a} ready`);let s=r.config.get("runners")??[],c=s.filter((l)=>l.profile===n),u=o-c.length;if(u<=0){w.warn(`Already have ${c.length} runner(s) for profile "${n}". Nothing to create.`);return}let d=new Set(s.map((l)=>l.id)),g=1;for(let l=0;l<u;){let b=`${e.name}-${g++}`;if(d.has(b))continue;l++,t.start(`Registering ${b}...`),await i.create([b]),t.stop(`${m.green("+")} ${b}`),s.push({createdAt:new Date().toISOString(),directory:Ct(e.directory,b),id:b,name:b,profile:n,provider:e.provider,url:e.url})}r.config.set("runners",s);let h=n===r.config.get("defaultProfile")?"":` ${n}`;w.info(`${m.green("Created")} ${u} runner(s) for "${n}". Run ${m.green(`hydra start${h}`)} to start them.`)}async promptCount(r){let n=await rr({initialValue:String(r),message:"Number of runners to create",validate:(e)=>{let o=Number.parseInt(e??"",10);if(Number.isNaN(o)||o<1)return"Must be a positive number";return}});return Number.parseInt(n,10)}}import{existsSync as yo}from"fs";import{mkdir as Po}from"fs/promises";var yt=G({url:{description:"GitHub repository or organization URL"}}),Pt=tr({force:{alias:"f",default:!1,description:"Overwrite an existing profile",type:"boolean"},labels:{alias:"l",description:"Set comma-separated runner labels",type:"string"},name:{alias:"n",description:"Set the runner name prefix",type:"string"},profile:{alias:"p",description:"Set the profile name",type:"string"},runners:{alias:"c",description:"Set the runner count",type:"number"}});class un extends R{name="init";description="Set up a runner profile";positionals=yt;args=Pt;prompts=!0;async execute(r){let n=r.interactive?await this.promptProfileName(r):r.args.profile??kr,e=!r.config.exists();if(!e&&r.config.get("profiles")[n]&&!r.args.force){if(!r.interactive)throw new v(`Profile "${n}" already exists. Use --force to overwrite.`);if(!await sr({initialValue:!1,message:`Profile "${n}" already exists. Overwrite?`}))return}await this.ensureDirectories();let i=r.interactive?await this.runInitForm():this.buildProfileFromArgs(r),t=e?{}:{...r.config.get("profiles")};if(t[n]=i,r.config.set("profiles",t),!r.config.get("defaultProfile"))r.config.set("defaultProfile",n);lr([`${m.dim("Profile:")} ${n}`,`${m.dim("URL:")} ${i.url}`,`${m.dim("Runners:")} ${i.numberOfMachines}`,`${m.dim("Name:")} ${i.name}`,i.labels?`${m.dim("Labels:")} ${i.labels}`:"","",`Run ${m.green(`${Sr} create${n!==r.config.get("defaultProfile")?` ${n}`:""}`)} to provision runners.`].filter(Boolean).join(`
95
+ `),m.green(e?"Hydra initialized":`Profile "${n}" added`))}async promptProfileName(r){return rr({initialValue:r.args.profile??kr,message:"Profile name"})}async ensureDirectories(){if(!yo(fr))await Po(fr,{recursive:!0});if(!yo(Fr))await Po(Fr,{recursive:!0})}async runInitForm(){let r=await Wr({url:()=>rr({message:"GitHub repository or organization URL",placeholder:"https://github.com/owner/repo",validate:(n)=>{if(!n)return"URL is required";try{pr(n)}catch{return"Must be a GitHub repository or organization URL (https://github.com/<owner>/<repo> or https://github.com/<org>)"}return}}),name:()=>rr({initialValue:"runner",message:"Base name for runners",placeholder:"runner"}),runners:()=>rr({initialValue:"1",message:"Number of runners",placeholder:"1",validate:(n)=>{if(!n)return"Must be a positive number";let e=Number.parseInt(n,10);if(Number.isNaN(e)||e<1)return"Must be a positive number";return}}),labels:()=>rr({message:"Additional labels (comma-separated, optional)",placeholder:"self-hosted,macOS,ARM64"})},{onCancel:()=>{throw new Q}});return{directory:Fr,labels:r.labels||void 0,name:r.name,numberOfMachines:Number.parseInt(r.runners,10)||1,os:this.detectOs(),overwrite:!1,provider:"github",run:!1,url:r.url}}buildProfileFromArgs(r){if(!r.positionals.url)throw new v("URL is required","Usage: hydra init <url>");return this.validateUrl(r.positionals.url),this.validateRunnerCount(r.args.runners),{directory:Fr,labels:r.args.labels,name:r.args.name??"runner",numberOfMachines:r.args.runners??1,os:this.detectOs(),overwrite:!1,provider:"github",run:!1,url:r.positionals.url}}validateUrl(r){try{pr(r)}catch(n){throw new v(n instanceof Error?n.message:`Invalid GitHub URL: ${r}`,"Expected https://github.com/<owner>/<repo> or https://github.com/<org>")}}validateRunnerCount(r){if(r!==void 0&&r<1)throw new v("Runner count must be at least 1")}detectOs(){let r=process.platform;if(r==="darwin")return"osx";if(r==="win32")return"windows";return"linux"}}import{existsSync as Ft}from"fs";import{readFile as kt}from"fs/promises";var Rt=100,Lt={runner:"runner daemon log",worker:"job log"},Dt=tr({lines:{alias:"n",default:Rt,description:"Number of lines to show",type:"number"},list:{alias:"l",default:!1,description:"List log files instead of showing one",type:"boolean"},open:{alias:"o",default:!1,description:"Open the log file",type:"boolean"},runner:{alias:"r",default:!1,description:"Show the runner log instead of a job log",type:"boolean"}}),It=G({id:{description:"Runner ID"}});class fn extends R{name="logs";description="Show recent runner logs";args=Dt;positionals=It;async execute(r){let n=r.config.get("runners")??[];if(n.length===0)throw new v("No runners found","Run hydra create to provision runners");let e=await this.resolveEntry(r,n),o=r.config.get("profiles")[e.profile];if(!o)throw new v(`Profile "${e.profile}" not found for runner "${e.id}"`,"Run hydra init to set it up");if(!Ft(e.directory))throw new v(`Runner directory not found: ${e.directory}`,"Run hydra create to provision this runner");let t=await x(o).logFiles(e.id);if(t.length===0)this.noLogs(e.id);if(r.args.list){this.printList(e,t);return}let a=this.selectFile(r,e,t);if(r.args.open){await this.openFile(a);return}await this.printTail(e,a,r.args.lines)}async resolveEntry(r,n){let e=r.positionals.id;if(e){let i=n.find((t)=>t.id===e);if(!i)throw new v(`Runner "${e}" not found`,`Known runners: ${n.map((t)=>t.id).join(", ")}`);return i}if(r.interactive)return cr({message:"Select runner",options:n.map((i)=>({hint:i.profile,label:i.name,value:i}))});let o=n[0];if(n.length===1&&o)return o;throw new v("Multiple runners found",`Pass a runner id: hydra logs <id> (${n.map((i)=>i.id).join(", ")})`)}selectFile(r,n,e){if(r.args.runner){let i=e.find((t)=>t.type==="runner");if(!i)throw new v(`No runner daemon logs found for "${n.id}"`,"Start the runner first: hydra start");return i}let o=Yn(e,"worker");if(!o)this.noLogs(n.id);if(o.fallback)w.warn(m.yellow("No job (Worker) logs yet; showing the runner daemon log instead"));return o.file}noLogs(r){throw new v(`No logs found for runner "${r}"`,"Logs appear once the runner has started; run hydra start")}printList(r,n){let e=[`${m.bold(r.name)} ${m.dim(r.directory)}`];for(let o of n){let i=o.type==="worker"?m.green("worker"):m.blue("runner");e.push(` ${i} ${o.name} ${m.dim(`${o.mtime.toISOString()} \xB7 ${mr(o.size)}`)}`)}w.info(e.join(`
96
+ `))}async printTail(r,n,e){let o=await kt(n.path,"utf-8"),i=[`${m.bold(r.name)} ${m.dim(Lt[n.type])}`,m.dim(n.path),m.dim(`Last modified: ${n.mtime.toISOString()}`)];w.info(i.join(`
97
+ `)),console.log(Jn(o,e))}async openFile(r){let n=(process.env.EDITOR??"").split(" ").filter(Boolean),e=n[0];if(e){await Bun.spawn([e,...n.slice(1),r.path],{stderr:"inherit",stdin:"inherit",stdout:"inherit"}).exited;return}if(process.platform==="darwin"){await Bun.$`open ${r.path}`.quiet();return}throw new v("No editor configured","Set $EDITOR to open log files")}}var Et=G({name:{description:"Profile name to set as default"}});class _n extends R{name="default";description="Set the default profile";positionals=Et;async execute(r){let n=r.interactive?await O(r.config):r.positionals.name;if(!n)throw new v("Profile name is required","Usage: hydra profile default <name>");let{name:e}=z(r.config,n);if(r.config.get("defaultProfile")===e){w.info(`"${e}" is already the default profile.`);return}r.config.set("defaultProfile",e),w.info(`${m.green("Default profile set to")} "${e}".`)}}class Tn extends R{name="list";description="List profiles";async execute(r){let n=r.config.get("profiles"),e=Object.keys(n);if(e.length===0)throw new v("No profiles configured","Run hydra init to set up a profile");let o=r.config.get("runners")??[],i=r.config.get("defaultProfile");for(let t of e){let a=n[t],c=await x(a).list(),u=o.filter((b)=>b.profile===t),d=new Set(c.filter((b)=>b.status==="running").map((b)=>b.id)),g=u.filter((b)=>d.has(b.id)).length,p=t===i,h=[`${m.dim("URL:")} ${a.url}`,`${m.dim("Provider:")} ${a.provider}`,`${m.dim("OS:")} ${a.os}`,`${m.dim("Name:")} ${a.name}`,`${m.dim("Runners:")} ${u.length}/${a.numberOfMachines} created, ${m.green(`${g} running`)}`];if(a.labels)h.push(`${m.dim("Labels:")} ${a.labels}`);let l=p?`${t} ${m.dim("(default)")}`:t;lr(h.join(`
98
+ `),l)}w.info(m.dim(`${e.length} profile(s)`))}}import{rm as Ht}from"fs/promises";import{join as Ut}from"path";var Nt=G({name:{description:"Profile name to remove"}});class re extends R{name="remove";description="Delete a profile and its runners";positionals=Nt;async execute(r){let n=r.interactive?await O(r.config):r.positionals.name;if(!n)throw new v("Profile name is required","Usage: hydra profile remove <name>");let{profile:e}=z(r.config,n),o=r.config.get("runners")??[],i=o.filter((c)=>c.profile===n);if(i.length>0){if(!await sr({initialValue:!0,message:`This will stop and remove ${i.length} runner(s). Continue?`}))return;await this.removeRunners(e,i.map((d)=>d.id));let u=o.filter((d)=>d.profile!==n);r.config.set("runners",u)}let{[n]:t,...a}=r.config.get("profiles");if(r.config.set("profiles",a),r.config.get("defaultProfile")===n){let c=Object.keys(a);r.config.set("defaultProfile",c[0])}w.info(`${m.green("Removed")} profile "${n}".`)}async removeRunners(r,n){let e=x(r),o=J();for(let i of n)o.start(`Stopping and removing ${i}...`),await e.stop([i]),await e.remove([i]),await Ht(Ut(r.directory,i),{force:!0,recursive:!0}),o.stop(`${m.red("-")} ${i}`)}}class pn extends R{name="profile";description="Manage profiles";init(){this.registerSubcommands([new Tn,new re,new _n])}}import{rm as At}from"fs/promises";import{join as jt}from"path";var Mt=G({profile:{description:"Profile to use"},ids:{description:"Runner IDs (all by default)",variadic:!0}});class mn extends R{name="remove";description="Deregister and delete runners";positionals=Mt;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await O(r.config)):z(r.config,r.positionals.profile),o=r.config.get("runners")??[],i=o.filter((u)=>u.profile===n);if(i.length===0)throw new v(`No runners found for profile "${n}"`,"Run hydra create to provision runners");let t=r.interactive?await this.promptRunnerSelection(i.map((u)=>u.id)):hr(r.positionals.ids??[],i.map((u)=>u.id)),a=x(e),s=J();for(let u of t)s.start(`Stopping and removing ${u}...`),await a.stop([u]),await a.remove([u]),await At(jt(e.directory,u),{force:!0,recursive:!0}),s.stop(`${m.red("-")} ${u}`);let c=o.filter((u)=>!t.includes(u.id));r.config.set("runners",c),w.info(`${m.green("Removed")} ${t.length} runner(s).`)}async promptRunnerSelection(r){return ur({message:"Select runners to remove",options:r.map((n)=>({label:n,value:n})),required:!0})}}var Gt=G({profile:{description:"Profile to use"},ids:{description:"Runner IDs (all by default)",variadic:!0}});class ln extends R{name="start";description="Start runners";positionals=Gt;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await O(r.config)):z(r.config,r.positionals.profile),i=(r.config.get("runners")??[]).filter((p)=>p.profile===n);if(i.length===0)throw new v(`No runners found for profile "${n}"`,"Run hydra create to provision runners");let t=x(e),a=J();a.start("Fetching runner status...");let s=await t.list();a.stop("Runner status fetched");let c=new Set(s.filter((p)=>p.status==="running").map((p)=>p.id)),u=i.map((p)=>p.id).filter((p)=>!c.has(p)),d=r.interactive?await this.promptRunnerSelection(u):hr(r.positionals.ids??[],i.map((p)=>p.id)),g=0;for(let p of d){if(c.has(p)){a.start(""),a.stop(`${m.dim("\u25CF")} ${p} ${m.dim("already running")}`);continue}a.start(`Starting ${p}...`),await t.start([p]),a.stop(`${m.green("\u25B6")} ${p}`),g++}w.info(`${m.green("Started")} ${g} runner(s).`),await Ir(r)}async promptRunnerSelection(r){if(r.length===0)throw new v("All runners are already running");return ur({message:"Select runners to start",options:r.map((n)=>({label:n,value:n})),required:!0})}}var xt={registered:m.yellow,running:m.green,stopped:m.red,unknown:m.dim};class dn extends R{name="status";description="Show status across profiles";async execute(r){let n=r.config.get("profiles"),e=Object.keys(n);if(e.length===0)throw new v("No profiles configured","Run hydra init to set up a profile");let o=r.config.get("runners")??[],i=0,t=0,a=[];for(let s of e){let c=n[s],d=await x(c).list();if(a.length>0)a.push("");a.push(`${m.bold(s)} ${m.dim(c.url)}`);let g=new Set(o.filter((h)=>h.profile===s).map((h)=>h.id)),p=d.filter((h)=>g.has(h.id)).sort((h,l)=>h.name.localeCompare(l.name,void 0,{numeric:!0}));this.formatRunners(p,a),i+=p.length,t+=p.filter((h)=>h.status==="running").length}a.push(""),a.push(m.dim(`${i} runner(s) total, ${t} running`)),w.info(a.join(`
99
+ `))}formatRunners(r,n){if(r.length===0){n.push(m.dim(" No runners."));return}for(let e of r){let o=xt[e.status]??m.dim,i=e.pid?m.dim(` (pid: ${e.pid})`):"";n.push(` ${o("\u25CF")} ${e.name} ${o(e.status)}${i}`)}}}var qt=G({profile:{description:"Profile to use"},ids:{description:"Runner IDs (all by default)",variadic:!0}});class gn extends R{name="stop";description="Stop runners";positionals=qt;async execute(r){let{name:n,profile:e}=r.interactive?z(r.config,await O(r.config)):z(r.config,r.positionals.profile),i=(r.config.get("runners")??[]).filter((p)=>p.profile===n);if(i.length===0)throw new v(`No runners found for profile "${n}"`,"Run hydra create to provision runners");let t=x(e),a=J();a.start("Fetching runner status...");let s=await t.list();a.stop("Runner status fetched");let c=new Set(s.filter((p)=>p.status==="running").map((p)=>p.id)),u=i.map((p)=>p.id).filter((p)=>c.has(p)),d=r.interactive?await this.promptRunnerSelection(u):hr(r.positionals.ids??[],i.map((p)=>p.id)),g=0;for(let p of d){if(!c.has(p)){a.start(""),a.stop(`${m.dim("\u25CF")} ${p} ${m.dim("not running")}`);continue}a.start(`Stopping ${p}...`),await t.stop([p]),a.stop(`${m.red("\u25A0")} ${p}`),g++}w.info(`${m.green("Stopped")} ${g} runner(s).`)}async promptRunnerSelection(r){if(r.length===0)throw new v("No runners are currently running");return ur({message:"Select runners to stop",options:r.map((n)=>({label:n,value:n})),required:!0})}}class hn extends R{name="update";description="Update runner binaries";async execute(r){let n=r.config.get("profiles"),e=r.config.get("runners")??[];if(e.length===0)throw new v("No runners found","Run hydra create to provision runners");let o=J(),i=Map.groupBy(e,(c)=>c.profile),t=null,a="",s=!1;for(let[c,u]of i){let d=n[c],g=u[0];if(!d||!g)continue;let p=x(d);if(!s){if(s=!0,o.start("Checking for updates..."),a=(await p.download()).version,t=await p.currentVersion(g.id),o.stop(`Current: v${t??"unknown"} | Latest: v${a}`),t===a){w.info(`Already on latest version ${m.dim(`(v${a})`)}`),await Ir(r);return}}let h=await p.list(),l=new Set(h.filter((b)=>b.status==="running").map((b)=>b.id));for(let b of u){let F=l.has(b.id);if(o.start(`Updating ${b.id}...`),F)await p.stop([b.id]);if(await p.update([b.id]),F)await p.start([b.id]);let I=F?` ${m.dim("(restarted)")}`:"";o.stop(`${m.green("\u2713")} ${b.id}${I}`)}}w.info(`${m.green("Updated")} ${e.length} runner(s) from v${t} to v${a}`),await Ir(r)}}class Fo extends zn{constructor(){super(new Wn(Be,_e),{bin:Sr,clearOnStart:!0,description:"Manage GitHub Actions runners on this machine.",exitLabel:"Exit",goodbyeMessage:"Heads down.",name:"HYDRA",promptMessage:"What do you need?",version:Se})}init(){this.registerCommands([new un,new cn,new ln,new gn,new dn,new fn,new sn,new mn,new hn,new pn])}}var zt=new Fo;zt.run();
package/package.json CHANGED
@@ -36,5 +36,5 @@
36
36
  },
37
37
  "type": "module",
38
38
  "types": "src/cli.ts",
39
- "version": "0.9.0"
39
+ "version": "0.9.1"
40
40
  }