spawn/cli/cli.js
Sprite 18b5aa4a32 fix: Remove curl|bash script validation that blocks spawn scripts
The spawn scripts themselves use curl|bash to install agents (e.g.
Claude Code). The validateScriptContent check was blocking our own
legitimate scripts. Removed curl|bash and wget|bash from the
dangerous patterns list since the scripts are already fetched from
our trusted GitHub repo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 09:40:16 +00:00

120 lines
58 KiB
JavaScript
Executable file

#!/usr/bin/env bun
// @bun
var G9=Object.create;var{getPrototypeOf:K9,defineProperty:Jb,getOwnPropertyNames:B9}=Object;var $9=Object.prototype.hasOwnProperty;var l=(b,x,Z)=>{Z=b!=null?G9(K9(b)):{};let J=x||!b||!b.__esModule?Jb(Z,"default",{value:b,enumerable:!0}):Z;for(let Y of B9(b))if(!$9.call(J,Y))Jb(J,Y,{get:()=>b[Y],enumerable:!0});return J};var Yb=(b,x)=>()=>(x||b((x={exports:{}}).exports,x),x.exports);var o=import.meta.require;var a=Yb((x4,_1)=>{var q1=process||{},zb=q1.argv||[],z1=q1.env||{},L9=!(!!z1.NO_COLOR||zb.includes("--no-color"))&&(!!z1.FORCE_COLOR||zb.includes("--color")||q1.platform==="win32"||(q1.stdout||{}).isTTY&&z1.TERM!=="dumb"||!!z1.CI),O9=(b,x,Z=b)=>(J)=>{let Y=""+J,Q=Y.indexOf(x,b.length);return~Q?b+P9(Y,x,Z,Q)+x:b+Y+x},P9=(b,x,Z,J)=>{let Y="",Q=0;do Y+=b.substring(Q,J)+Z,Q=J+x.length,J=b.indexOf(x,Q);while(~J);return Y+b.substring(Q)},qb=(b=L9)=>{let x=b?O9:()=>String;return{isColorSupported:b,reset:x("\x1B[0m","\x1B[0m"),bold:x("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:x("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:x("\x1B[3m","\x1B[23m"),underline:x("\x1B[4m","\x1B[24m"),inverse:x("\x1B[7m","\x1B[27m"),hidden:x("\x1B[8m","\x1B[28m"),strikethrough:x("\x1B[9m","\x1B[29m"),black:x("\x1B[30m","\x1B[39m"),red:x("\x1B[31m","\x1B[39m"),green:x("\x1B[32m","\x1B[39m"),yellow:x("\x1B[33m","\x1B[39m"),blue:x("\x1B[34m","\x1B[39m"),magenta:x("\x1B[35m","\x1B[39m"),cyan:x("\x1B[36m","\x1B[39m"),white:x("\x1B[37m","\x1B[39m"),gray:x("\x1B[90m","\x1B[39m"),bgBlack:x("\x1B[40m","\x1B[49m"),bgRed:x("\x1B[41m","\x1B[49m"),bgGreen:x("\x1B[42m","\x1B[49m"),bgYellow:x("\x1B[43m","\x1B[49m"),bgBlue:x("\x1B[44m","\x1B[49m"),bgMagenta:x("\x1B[45m","\x1B[49m"),bgCyan:x("\x1B[46m","\x1B[49m"),bgWhite:x("\x1B[47m","\x1B[49m"),blackBright:x("\x1B[90m","\x1B[39m"),redBright:x("\x1B[91m","\x1B[39m"),greenBright:x("\x1B[92m","\x1B[39m"),yellowBright:x("\x1B[93m","\x1B[39m"),blueBright:x("\x1B[94m","\x1B[39m"),magentaBright:x("\x1B[95m","\x1B[39m"),cyanBright:x("\x1B[96m","\x1B[39m"),whiteBright:x("\x1B[97m","\x1B[39m"),bgBlackBright:x("\x1B[100m","\x1B[49m"),bgRedBright:x("\x1B[101m","\x1B[49m"),bgGreenBright:x("\x1B[102m","\x1B[49m"),bgYellowBright:x("\x1B[103m","\x1B[49m"),bgBlueBright:x("\x1B[104m","\x1B[49m"),bgMagentaBright:x("\x1B[105m","\x1B[49m"),bgCyanBright:x("\x1B[106m","\x1B[49m"),bgWhiteBright:x("\x1B[107m","\x1B[49m")}};_1.exports=qb();_1.exports.createColors=qb});var C1=Yb((Z4,Xb)=>{var F1={to(b,x){if(!x)return`\x1B[${b+1}G`;return`\x1B[${x+1};${b+1}H`},move(b,x){let Z="";if(b<0)Z+=`\x1B[${-b}D`;else if(b>0)Z+=`\x1B[${b}C`;if(x<0)Z+=`\x1B[${-x}A`;else if(x>0)Z+=`\x1B[${x}B`;return Z},up:(b=1)=>`\x1B[${b}A`,down:(b=1)=>`\x1B[${b}B`,forward:(b=1)=>`\x1B[${b}C`,backward:(b=1)=>`\x1B[${b}D`,nextLine:(b=1)=>"\x1B[E".repeat(b),prevLine:(b=1)=>"\x1B[F".repeat(b),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},H9={up:(b=1)=>"\x1B[S".repeat(b),down:(b=1)=>"\x1B[T".repeat(b)},V9={screen:"\x1B[2J",up:(b=1)=>"\x1B[1J".repeat(b),down:(b=1)=>"\x1B[J".repeat(b),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(b){let x="";for(let Z=0;Z<b;Z++)x+=this.line+(Z<b-1?F1.up():"");if(b)x+=F1.left;return x}};Xb.exports={cursor:F1,scroll:H9,erase:V9,beep:"\x07"}});var j9=()=>{if(process.env.SPAWN_UNICODE==="1")return!1;if(process.env.SPAWN_NO_UNICODE==="1"||process.env.SPAWN_ASCII==="1")return!0;if(process.env.TERM==="dumb"||!process.env.TERM)return!0;if(process.env.SSH_CONNECTION||process.env.SSH_CLIENT||process.env.SSH_TTY)return!0;return!1},Qb=j9();if(process.env.SPAWN_DEBUG==="1")console.error("[unicode-detect] TERM:",process.env.TERM),console.error("[unicode-detect] SSH_CONNECTION:",process.env.SSH_CONNECTION),console.error("[unicode-detect] SSH_CLIENT:",process.env.SSH_CLIENT),console.error("[unicode-detect] SSH_TTY:",process.env.SSH_TTY),console.error("[unicode-detect] Force ASCII:",Qb);if(Qb)process.env.TERM="linux";var $1=l(a(),1),_=l(C1(),1);import{stdout as f1,stdin as jb}from"process";import*as p from"readline";import U9 from"readline";import{ReadStream as Gb}from"tty";var w9=(b)=>b===161||b===164||b===167||b===168||b===170||b===173||b===174||b>=176&&b<=180||b>=182&&b<=186||b>=188&&b<=191||b===198||b===208||b===215||b===216||b>=222&&b<=225||b===230||b>=232&&b<=234||b===236||b===237||b===240||b===242||b===243||b>=247&&b<=250||b===252||b===254||b===257||b===273||b===275||b===283||b===294||b===295||b===299||b>=305&&b<=307||b===312||b>=319&&b<=322||b===324||b>=328&&b<=331||b===333||b===338||b===339||b===358||b===359||b===363||b===462||b===464||b===466||b===468||b===470||b===472||b===474||b===476||b===593||b===609||b===708||b===711||b>=713&&b<=715||b===717||b===720||b>=728&&b<=731||b===733||b===735||b>=768&&b<=879||b>=913&&b<=929||b>=931&&b<=937||b>=945&&b<=961||b>=963&&b<=969||b===1025||b>=1040&&b<=1103||b===1105||b===8208||b>=8211&&b<=8214||b===8216||b===8217||b===8220||b===8221||b>=8224&&b<=8226||b>=8228&&b<=8231||b===8240||b===8242||b===8243||b===8245||b===8251||b===8254||b===8308||b===8319||b>=8321&&b<=8324||b===8364||b===8451||b===8453||b===8457||b===8467||b===8470||b===8481||b===8482||b===8486||b===8491||b===8531||b===8532||b>=8539&&b<=8542||b>=8544&&b<=8555||b>=8560&&b<=8569||b===8585||b>=8592&&b<=8601||b===8632||b===8633||b===8658||b===8660||b===8679||b===8704||b===8706||b===8707||b===8711||b===8712||b===8715||b===8719||b===8721||b===8725||b===8730||b>=8733&&b<=8736||b===8739||b===8741||b>=8743&&b<=8748||b===8750||b>=8756&&b<=8759||b===8764||b===8765||b===8776||b===8780||b===8786||b===8800||b===8801||b>=8804&&b<=8807||b===8810||b===8811||b===8814||b===8815||b===8834||b===8835||b===8838||b===8839||b===8853||b===8857||b===8869||b===8895||b===8978||b>=9312&&b<=9449||b>=9451&&b<=9547||b>=9552&&b<=9587||b>=9600&&b<=9615||b>=9618&&b<=9621||b===9632||b===9633||b>=9635&&b<=9641||b===9650||b===9651||b===9654||b===9655||b===9660||b===9661||b===9664||b===9665||b>=9670&&b<=9672||b===9675||b>=9678&&b<=9681||b>=9698&&b<=9701||b===9711||b===9733||b===9734||b===9737||b===9742||b===9743||b===9756||b===9758||b===9792||b===9794||b===9824||b===9825||b>=9827&&b<=9829||b>=9831&&b<=9834||b===9836||b===9837||b===9839||b===9886||b===9887||b===9919||b>=9926&&b<=9933||b>=9935&&b<=9939||b>=9941&&b<=9953||b===9955||b===9960||b===9961||b>=9963&&b<=9969||b===9972||b>=9974&&b<=9977||b===9979||b===9980||b===9982||b===9983||b===10045||b>=10102&&b<=10111||b>=11094&&b<=11097||b>=12872&&b<=12879||b>=57344&&b<=63743||b>=65024&&b<=65039||b===65533||b>=127232&&b<=127242||b>=127248&&b<=127277||b>=127280&&b<=127337||b>=127344&&b<=127373||b===127375||b===127376||b>=127387&&b<=127404||b>=917760&&b<=917999||b>=983040&&b<=1048573||b>=1048576&&b<=1114109,T9=(b)=>b===12288||b>=65281&&b<=65376||b>=65504&&b<=65510,k9=(b)=>b>=4352&&b<=4447||b===8986||b===8987||b===9001||b===9002||b>=9193&&b<=9196||b===9200||b===9203||b===9725||b===9726||b===9748||b===9749||b>=9800&&b<=9811||b===9855||b===9875||b===9889||b===9898||b===9899||b===9917||b===9918||b===9924||b===9925||b===9934||b===9940||b===9962||b===9970||b===9971||b===9973||b===9978||b===9981||b===9989||b===9994||b===9995||b===10024||b===10060||b===10062||b>=10067&&b<=10069||b===10071||b>=10133&&b<=10135||b===10160||b===10175||b===11035||b===11036||b===11088||b===11093||b>=11904&&b<=11929||b>=11931&&b<=12019||b>=12032&&b<=12245||b>=12272&&b<=12287||b>=12289&&b<=12350||b>=12353&&b<=12438||b>=12441&&b<=12543||b>=12549&&b<=12591||b>=12593&&b<=12686||b>=12688&&b<=12771||b>=12783&&b<=12830||b>=12832&&b<=12871||b>=12880&&b<=19903||b>=19968&&b<=42124||b>=42128&&b<=42182||b>=43360&&b<=43388||b>=44032&&b<=55203||b>=63744&&b<=64255||b>=65040&&b<=65049||b>=65072&&b<=65106||b>=65108&&b<=65126||b>=65128&&b<=65131||b>=94176&&b<=94180||b===94192||b===94193||b>=94208&&b<=100343||b>=100352&&b<=101589||b>=101632&&b<=101640||b>=110576&&b<=110579||b>=110581&&b<=110587||b===110589||b===110590||b>=110592&&b<=110882||b===110898||b>=110928&&b<=110930||b===110933||b>=110948&&b<=110951||b>=110960&&b<=111355||b===126980||b===127183||b===127374||b>=127377&&b<=127386||b>=127488&&b<=127490||b>=127504&&b<=127547||b>=127552&&b<=127560||b===127568||b===127569||b>=127584&&b<=127589||b>=127744&&b<=127776||b>=127789&&b<=127797||b>=127799&&b<=127868||b>=127870&&b<=127891||b>=127904&&b<=127946||b>=127951&&b<=127955||b>=127968&&b<=127984||b===127988||b>=127992&&b<=128062||b===128064||b>=128066&&b<=128252||b>=128255&&b<=128317||b>=128331&&b<=128334||b>=128336&&b<=128359||b===128378||b===128405||b===128406||b===128420||b>=128507&&b<=128591||b>=128640&&b<=128709||b===128716||b>=128720&&b<=128722||b>=128725&&b<=128727||b>=128732&&b<=128735||b===128747||b===128748||b>=128756&&b<=128764||b>=128992&&b<=129003||b===129008||b>=129292&&b<=129338||b>=129340&&b<=129349||b>=129351&&b<=129535||b>=129648&&b<=129660||b>=129664&&b<=129672||b>=129680&&b<=129725||b>=129727&&b<=129733||b>=129742&&b<=129755||b>=129760&&b<=129768||b>=129776&&b<=129784||b>=131072&&b<=196605||b>=196608&&b<=262141,y1=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,X1=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,G1=/\t{1,1000}/y,A1=/[\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,K1=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,D9=/\p{M}+/gu,R9={limit:1/0,ellipsis:""},Lb=(b,x={},Z={})=>{let J=x.limit??1/0,Y=x.ellipsis??"",Q=x?.ellipsisWidth??(Y?Lb(Y,R9,Z).width:0),z=Z.ansiWidth??0,q=Z.controlWidth??0,B=Z.tabWidth??8,k=Z.ambiguousWidth??1,D=Z.emojiWidth??2,U=Z.fullWidthWidth??2,H=Z.regularWidth??1,N=Z.wideWidth??2,G=0,X=0,L=b.length,V=0,O=!1,w=L,R=Math.max(0,J-Q),M=0,W=0,$=0,j=0;b:for(;;){if(W>M||X>=L&&X>G){let F=b.slice(M,W)||b.slice(G,X);V=0;for(let A of F.replaceAll(D9,"")){let C=A.codePointAt(0)||0;if(T9(C)?j=U:k9(C)?j=N:k!==H&&w9(C)?j=k:j=H,$+j>R&&(w=Math.min(w,Math.max(M,G)+V)),$+j>J){O=!0;break b}V+=A.length,$+=j}M=W=0}if(X>=L)break;if(K1.lastIndex=X,K1.test(b)){if(V=K1.lastIndex-X,j=V*H,$+j>R&&(w=Math.min(w,X+Math.floor((R-$)/H))),$+j>J){O=!0;break}$+=j,M=G,W=X,X=G=K1.lastIndex;continue}if(y1.lastIndex=X,y1.test(b)){if($+z>R&&(w=Math.min(w,X)),$+z>J){O=!0;break}$+=z,M=G,W=X,X=G=y1.lastIndex;continue}if(X1.lastIndex=X,X1.test(b)){if(V=X1.lastIndex-X,j=V*q,$+j>R&&(w=Math.min(w,X+Math.floor((R-$)/q))),$+j>J){O=!0;break}$+=j,M=G,W=X,X=G=X1.lastIndex;continue}if(G1.lastIndex=X,G1.test(b)){if(V=G1.lastIndex-X,j=V*B,$+j>R&&(w=Math.min(w,X+Math.floor((R-$)/B))),$+j>J){O=!0;break}$+=j,M=G,W=X,X=G=G1.lastIndex;continue}if(A1.lastIndex=X,A1.test(b)){if($+D>R&&(w=Math.min(w,X)),$+D>J){O=!0;break}$+=D,M=G,W=X,X=G=A1.lastIndex;continue}X+=1}return{width:O?R:$,index:O?w:L,truncated:O,ellipsed:O&&J>=Q}},M9={limit:1/0,ellipsis:"",ellipsisWidth:0},s=(b,x={})=>Lb(b,M9,x).width,L1="\x1B",Ob="\x9B",S9=39,m1="\x07",Pb="[",W9="]",Hb="m",u1=`${W9}8;;`,Kb=new RegExp(`(?:\\${Pb}(?<code>\\d+)m|\\${u1}(?<uri>.*)${m1})`,"y"),I9=(b)=>{if(b>=30&&b<=37||b>=90&&b<=97)return 39;if(b>=40&&b<=47||b>=100&&b<=107)return 49;if(b===1||b===2)return 22;if(b===3)return 23;if(b===4)return 24;if(b===7)return 27;if(b===8)return 28;if(b===9)return 29;if(b===0)return 0},Bb=(b)=>`${L1}${Pb}${b}${Hb}`,$b=(b)=>`${L1}${u1}${b}${m1}`,N9=(b)=>b.map((x)=>s(x)),E1=(b,x,Z)=>{let J=x[Symbol.iterator](),Y=!1,Q=!1,z=b.at(-1),q=z===void 0?0:s(z),B=J.next(),k=J.next(),D=0;for(;!B.done;){let U=B.value,H=s(U);q+H<=Z?b[b.length-1]+=U:(b.push(U),q=0),(U===L1||U===Ob)&&(Y=!0,Q=x.startsWith(u1,D+1)),Y?Q?U===m1&&(Y=!1,Q=!1):U===Hb&&(Y=!1):(q+=H,q===Z&&!k.done&&(b.push(""),q=0)),B=k,k=J.next(),D+=U.length}z=b.at(-1),!q&&z!==void 0&&z.length>0&&b.length>1&&(b[b.length-2]+=b.pop())},v9=(b)=>{let x=b.split(" "),Z=x.length;for(;Z>0&&!(s(x[Z-1])>0);)Z--;return Z===x.length?b:x.slice(0,Z).join(" ")+x.slice(Z).join("")},_9=(b,x,Z={})=>{if(Z.trim!==!1&&b.trim()==="")return"";let J="",Y,Q,z=b.split(" "),q=N9(z),B=[""];for(let[G,X]of z.entries()){Z.trim!==!1&&(B[B.length-1]=(B.at(-1)??"").trimStart());let L=s(B.at(-1)??"");if(G!==0&&(L>=x&&(Z.wordWrap===!1||Z.trim===!1)&&(B.push(""),L=0),(L>0||Z.trim===!1)&&(B[B.length-1]+=" ",L++)),Z.hard&&q[G]>x){let V=x-L,O=1+Math.floor((q[G]-V-1)/x);Math.floor((q[G]-1)/x)<O&&B.push(""),E1(B,X,x);continue}if(L+q[G]>x&&L>0&&q[G]>0){if(Z.wordWrap===!1&&L<x){E1(B,X,x);continue}B.push("")}if(L+q[G]>x&&Z.wordWrap===!1){E1(B,X,x);continue}B[B.length-1]+=X}Z.trim!==!1&&(B=B.map((G)=>v9(G)));let k=B.join(`
`),D=k[Symbol.iterator](),U=D.next(),H=D.next(),N=0;for(;!U.done;){let G=U.value,X=H.value;if(J+=G,G===L1||G===Ob){Kb.lastIndex=N+1;let V=Kb.exec(k)?.groups;if(V?.code!==void 0){let O=Number.parseFloat(V.code);Y=O===S9?void 0:O}else V?.uri!==void 0&&(Q=V.uri.length===0?void 0:V.uri)}let L=Y?I9(Y):void 0;X===`
`?(Q&&(J+=$b("")),Y&&L&&(J+=Bb(L))):G===`
`&&(Y&&L&&(J+=Bb(Y)),Q&&(J+=$b(Q))),N+=G.length,U=H,H=D.next()}return J};function h1(b,x,Z){return String(b).normalize().replaceAll(`\r
`,`
`).split(`
`).map((J)=>_9(J,x,Z)).join(`
`)}var F9=["up","down","left","right","space","enter","cancel"],u={actions:new Set(F9),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0};function p1(b,x){if(typeof b=="string")return u.aliases.get(b)===x;for(let Z of b)if(Z!==void 0&&p1(Z,x))return!0;return!1}function C9(b,x){if(b===x)return;let Z=b.split(`
`),J=x.split(`
`),Y=Math.max(Z.length,J.length),Q=[];for(let z=0;z<Y;z++)Z[z]!==J[z]&&Q.push(z);return{lines:Q,numLinesBefore:Z.length,numLinesAfter:J.length,numLines:Y}}var y9=globalThis.process.platform.startsWith("win"),g1=Symbol("clack:cancel");function t(b){return b===g1}function B1(b,x){let Z=b;Z.isTTY&&Z.setRawMode(x)}function Vb({input:b=jb,output:x=f1,overwrite:Z=!0,hideCursor:J=!0}={}){let Y=p.createInterface({input:b,output:x,prompt:"",tabSize:1});p.emitKeypressEvents(b,Y),b instanceof Gb&&b.isTTY&&b.setRawMode(!0);let Q=(z,{name:q,sequence:B})=>{let k=String(z);if(p1([k,q,B],"cancel")){J&&x.write(_.cursor.show),process.exit(0);return}if(!Z)return;p.moveCursor(x,q==="return"?0:-1,q==="return"?-1:0,()=>{p.clearLine(x,1,()=>{b.once("keypress",Q)})})};return J&&x.write(_.cursor.hide),b.once("keypress",Q),()=>{b.off("keypress",Q),J&&x.write(_.cursor.show),b instanceof Gb&&b.isTTY&&!y9&&b.setRawMode(!1),Y.terminal=!1,Y.close()}}var O1=(b)=>("columns"in b)&&typeof b.columns=="number"?b.columns:80,d1=(b)=>("rows"in b)&&typeof b.rows=="number"?b.rows:20;function P1(b,x,Z,J=Z){let Y=O1(b??f1);return h1(x,Y-Z.length,{hard:!0,trim:!1}).split(`
`).map((Q,z)=>`${z===0?J:Z}${Q}`).join(`
`)}class H1{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(b,x=!0){let{input:Z=jb,output:J=f1,render:Y,signal:Q,...z}=b;this.opts=z,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=Y.bind(this),this._track=x,this._abortSignal=Q,this.input=Z,this.output=J}unsubscribe(){this._subscribers.clear()}setSubscriber(b,x){let Z=this._subscribers.get(b)??[];Z.push(x),this._subscribers.set(b,Z)}on(b,x){this.setSubscriber(b,{cb:x})}once(b,x){this.setSubscriber(b,{cb:x,once:!0})}emit(b,...x){let Z=this._subscribers.get(b)??[],J=[];for(let Y of Z)Y.cb(...x),Y.once&&J.push(()=>Z.splice(Z.indexOf(Y),1));for(let Y of J)Y()}prompt(){return new Promise((b)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),b(g1);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=U9.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),B1(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(_.cursor.show),this.output.off("resize",this.render),B1(this.input,!1),b(this.value)}),this.once("cancel",()=>{this.output.write(_.cursor.show),this.output.off("resize",this.render),B1(this.input,!1),b(g1)})})}_isActionKey(b,x){return b==="\t"}_setValue(b){this.value=b,this.emit("value",this.value)}_setUserInput(b,x){this.userInput=b??"",this.emit("userInput",this.userInput),x&&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(b,x){if(this._track&&x.name!=="return"&&(x.name&&this._isActionKey(b,x)&&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"),x?.name&&(!this._track&&u.aliases.has(x.name)&&this.emit("cursor",u.aliases.get(x.name)),u.actions.has(x.name)&&this.emit("cursor",x.name)),b&&(b.toLowerCase()==="y"||b.toLowerCase()==="n")&&this.emit("confirm",b.toLowerCase()==="y"),this.emit("key",b?.toLowerCase(),x),x?.name==="return"){if(this.opts.validate){let Z=this.opts.validate(this.value);Z&&(this.error=Z instanceof Error?Z.message:Z,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}p1([b,x?.name,x?.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(`
`),B1(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let b=h1(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
`).length-1;this.output.write(_.cursor.move(-999,b*-1))}render(){let b=h1(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(b!==this._prevFrame){if(this.state==="initial")this.output.write(_.cursor.hide);else{let x=C9(this._prevFrame,b),Z=d1(this.output);if(this.restoreCursor(),x){let J=Math.max(0,x.numLinesAfter-Z),Y=Math.max(0,x.numLinesBefore-Z),Q=x.lines.find((z)=>z>=J);if(Q===void 0){this._prevFrame=b;return}if(x.lines.length===1){this.output.write(_.cursor.move(0,Q-Y)),this.output.write(_.erase.lines(1));let z=b.split(`
`);this.output.write(z[Q]),this._prevFrame=b,this.output.write(_.cursor.move(0,z.length-Q-1));return}else if(x.lines.length>1){if(J<Y)Q=J;else{let q=Q-Y;q>0&&this.output.write(_.cursor.move(0,q))}this.output.write(_.erase.down());let z=b.split(`
`).slice(Q);this.output.write(z.join(`
`)),this._prevFrame=b;return}}this.output.write(_.erase.down())}this.output.write(b),this.state==="initial"&&(this.state="active"),this._prevFrame=b}}}function A9(b,x){if(b===void 0||x.length===0)return 0;let Z=x.findIndex((J)=>J.value===b);return Z!==-1?Z:0}function E9(b,x){return(x.label??String(x.value)).toLowerCase().includes(b.toLowerCase())}function h9(b,x){if(x)return b?x:x[0]}class Ub extends H1{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#b=0;#Z="";#J;#x;get cursor(){return this.#b}get userInputWithCursor(){if(!this.userInput)return $1.default.inverse($1.default.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let b=this.userInput.slice(0,this._cursor),[x,...Z]=this.userInput.slice(this._cursor);return`${b}${$1.default.inverse(x)}${Z.join("")}`}get options(){return typeof this.#x=="function"?this.#x():this.#x}constructor(b){super(b),this.#x=b.options;let x=this.options;this.filteredOptions=[...x],this.multiple=b.multiple===!0,this.#J=b.filter??E9;let Z;if(b.initialValue&&Array.isArray(b.initialValue)?this.multiple?Z=b.initialValue:Z=b.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(Z=[this.options[0].value]),Z)for(let J of Z){let Y=x.findIndex((Q)=>Q.value===J);Y!==-1&&(this.toggleSelected(J),this.#b=Y)}this.focusedValue=this.options[this.#b]?.value,this.on("key",(J,Y)=>this.#Y(J,Y)),this.on("userInput",(J)=>this.#Q(J))}_isActionKey(b,x){return b==="\t"||this.multiple&&this.isNavigating&&x.name==="space"&&b!==void 0&&b!==""}#Y(b,x){let Z=x.name==="up",J=x.name==="down",Y=x.name==="return";Z||J?(this.#b=Math.max(0,Math.min(this.#b+(Z?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#b]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):Y?this.value=h9(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(x.name==="tab"||this.isNavigating&&x.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(b){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(b)?this.selectedValues=this.selectedValues.filter((x)=>x!==b):this.selectedValues=[...this.selectedValues,b]:this.selectedValues=[b])}#Q(b){if(b!==this.#Z){this.#Z=b;let x=this.options;b?this.filteredOptions=x.filter((Z)=>this.#J(b,Z)):this.filteredOptions=[...x],this.#b=A9(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#b]?.value,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}}class wb extends H1{options;cursor=0;#b;getGroupItems(b){return this.options.filter((x)=>x.group===b)}isGroupSelected(b){let x=this.getGroupItems(b),Z=this.value;return Z===void 0?!1:x.every((J)=>Z.includes(J.value))}toggleValue(){let b=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),b.group===!0){let x=b.value,Z=this.getGroupItems(x);this.isGroupSelected(x)?this.value=this.value.filter((J)=>Z.findIndex((Y)=>Y.value===J)===-1):this.value=[...this.value,...Z.map((J)=>J.value)],this.value=Array.from(new Set(this.value))}else{let x=this.value.includes(b.value);this.value=x?this.value.filter((Z)=>Z!==b.value):[...this.value,b.value]}}constructor(b){super(b,!1);let{options:x}=b;this.#b=b.selectableGroups!==!1,this.options=Object.entries(x).flatMap(([Z,J])=>[{value:Z,group:!0,label:Z},...J.map((Y)=>({...Y,group:Z}))]),this.value=[...b.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Z})=>Z===b.cursorAt),this.#b?0:1),this.on("cursor",(Z)=>{switch(Z){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let J=this.options[this.cursor]?.group===!0;!this.#b&&J&&(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 J=this.options[this.cursor]?.group===!0;!this.#b&&J&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}}function j1(b,x,Z){let J=b+x,Y=Math.max(Z.length-1,0),Q=J<0?Y:J>Y?0:J;return Z[Q].disabled?j1(Q,x<0?-1:1,Z):Q}class l1 extends H1{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(b){super(b,!1),this.options=b.options;let x=this.options.findIndex(({value:J})=>J===b.initialValue),Z=x===-1?0:x;this.cursor=this.options[Z].disabled?j1(Z,1,this.options):Z,this.changeValue(),this.on("cursor",(J)=>{switch(J){case"left":case"up":this.cursor=j1(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=j1(this.cursor,1,this.options);break}this.changeValue()})}}var P=l(a(),1);import h from"process";var e=l(C1(),1);function g9(){return h.platform!=="win32"?h.env.TERM!=="linux":!!h.env.CI||!!h.env.WT_SESSION||!!h.env.TERMINUS_SUBLIME||h.env.ConEmuTask==="{cmd::Cmder}"||h.env.TERM_PROGRAM==="Terminus-Sublime"||h.env.TERM_PROGRAM==="vscode"||h.env.TERM==="xterm-256color"||h.env.TERM==="alacritty"||h.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var i1=g9(),f9=()=>process.env.CI==="true";var S=(b,x)=>i1?b:x,m9=S("\u25C6","*"),Mb=S("\u25A0","x"),Sb=S("\u25B2","x"),a1=S("\u25C7","o"),u9=S("\u250C","T"),y=S("\u2502","|"),Wb=S("\u2514","\u2014"),O4=S("\u2510","T"),P4=S("\u2518","\u2014"),p9=S("\u25CF",">"),Tb=S("\u25CB"," "),H4=S("\u25FB","[\u2022]"),V4=S("\u25FC","[+]"),U4=S("\u25FB","[ ]"),w4=S("\u25AA","\u2022"),T4=S("\u2500","-"),k4=S("\u256E","+"),D4=S("\u251C","+"),R4=S("\u256F","+"),M4=S("\u2570","+"),S4=S("\u256D","+"),d9=S("\u25CF","\u2022"),l9=S("\u25C6","*"),o9=S("\u25B2","!"),n9=S("\u25A0","x"),c9=(b)=>{switch(b){case"initial":case"active":return P.default.cyan(m9);case"cancel":return P.default.red(Mb);case"error":return P.default.yellow(Sb);case"submit":return P.default.green(a1)}},i9=(b)=>{switch(b){case"initial":case"active":return P.default.cyan(y);case"cancel":return P.default.red(y);case"error":return P.default.yellow(y);case"submit":return P.default.green(y)}},r9=(b)=>b===161||b===164||b===167||b===168||b===170||b===173||b===174||b>=176&&b<=180||b>=182&&b<=186||b>=188&&b<=191||b===198||b===208||b===215||b===216||b>=222&&b<=225||b===230||b>=232&&b<=234||b===236||b===237||b===240||b===242||b===243||b>=247&&b<=250||b===252||b===254||b===257||b===273||b===275||b===283||b===294||b===295||b===299||b>=305&&b<=307||b===312||b>=319&&b<=322||b===324||b>=328&&b<=331||b===333||b===338||b===339||b===358||b===359||b===363||b===462||b===464||b===466||b===468||b===470||b===472||b===474||b===476||b===593||b===609||b===708||b===711||b>=713&&b<=715||b===717||b===720||b>=728&&b<=731||b===733||b===735||b>=768&&b<=879||b>=913&&b<=929||b>=931&&b<=937||b>=945&&b<=961||b>=963&&b<=969||b===1025||b>=1040&&b<=1103||b===1105||b===8208||b>=8211&&b<=8214||b===8216||b===8217||b===8220||b===8221||b>=8224&&b<=8226||b>=8228&&b<=8231||b===8240||b===8242||b===8243||b===8245||b===8251||b===8254||b===8308||b===8319||b>=8321&&b<=8324||b===8364||b===8451||b===8453||b===8457||b===8467||b===8470||b===8481||b===8482||b===8486||b===8491||b===8531||b===8532||b>=8539&&b<=8542||b>=8544&&b<=8555||b>=8560&&b<=8569||b===8585||b>=8592&&b<=8601||b===8632||b===8633||b===8658||b===8660||b===8679||b===8704||b===8706||b===8707||b===8711||b===8712||b===8715||b===8719||b===8721||b===8725||b===8730||b>=8733&&b<=8736||b===8739||b===8741||b>=8743&&b<=8748||b===8750||b>=8756&&b<=8759||b===8764||b===8765||b===8776||b===8780||b===8786||b===8800||b===8801||b>=8804&&b<=8807||b===8810||b===8811||b===8814||b===8815||b===8834||b===8835||b===8838||b===8839||b===8853||b===8857||b===8869||b===8895||b===8978||b>=9312&&b<=9449||b>=9451&&b<=9547||b>=9552&&b<=9587||b>=9600&&b<=9615||b>=9618&&b<=9621||b===9632||b===9633||b>=9635&&b<=9641||b===9650||b===9651||b===9654||b===9655||b===9660||b===9661||b===9664||b===9665||b>=9670&&b<=9672||b===9675||b>=9678&&b<=9681||b>=9698&&b<=9701||b===9711||b===9733||b===9734||b===9737||b===9742||b===9743||b===9756||b===9758||b===9792||b===9794||b===9824||b===9825||b>=9827&&b<=9829||b>=9831&&b<=9834||b===9836||b===9837||b===9839||b===9886||b===9887||b===9919||b>=9926&&b<=9933||b>=9935&&b<=9939||b>=9941&&b<=9953||b===9955||b===9960||b===9961||b>=9963&&b<=9969||b===9972||b>=9974&&b<=9977||b===9979||b===9980||b===9982||b===9983||b===10045||b>=10102&&b<=10111||b>=11094&&b<=11097||b>=12872&&b<=12879||b>=57344&&b<=63743||b>=65024&&b<=65039||b===65533||b>=127232&&b<=127242||b>=127248&&b<=127277||b>=127280&&b<=127337||b>=127344&&b<=127373||b===127375||b===127376||b>=127387&&b<=127404||b>=917760&&b<=917999||b>=983040&&b<=1048573||b>=1048576&&b<=1114109,a9=(b)=>b===12288||b>=65281&&b<=65376||b>=65504&&b<=65510,s9=(b)=>b>=4352&&b<=4447||b===8986||b===8987||b===9001||b===9002||b>=9193&&b<=9196||b===9200||b===9203||b===9725||b===9726||b===9748||b===9749||b>=9800&&b<=9811||b===9855||b===9875||b===9889||b===9898||b===9899||b===9917||b===9918||b===9924||b===9925||b===9934||b===9940||b===9962||b===9970||b===9971||b===9973||b===9978||b===9981||b===9989||b===9994||b===9995||b===10024||b===10060||b===10062||b>=10067&&b<=10069||b===10071||b>=10133&&b<=10135||b===10160||b===10175||b===11035||b===11036||b===11088||b===11093||b>=11904&&b<=11929||b>=11931&&b<=12019||b>=12032&&b<=12245||b>=12272&&b<=12287||b>=12289&&b<=12350||b>=12353&&b<=12438||b>=12441&&b<=12543||b>=12549&&b<=12591||b>=12593&&b<=12686||b>=12688&&b<=12771||b>=12783&&b<=12830||b>=12832&&b<=12871||b>=12880&&b<=19903||b>=19968&&b<=42124||b>=42128&&b<=42182||b>=43360&&b<=43388||b>=44032&&b<=55203||b>=63744&&b<=64255||b>=65040&&b<=65049||b>=65072&&b<=65106||b>=65108&&b<=65126||b>=65128&&b<=65131||b>=94176&&b<=94180||b===94192||b===94193||b>=94208&&b<=100343||b>=100352&&b<=101589||b>=101632&&b<=101640||b>=110576&&b<=110579||b>=110581&&b<=110587||b===110589||b===110590||b>=110592&&b<=110882||b===110898||b>=110928&&b<=110930||b===110933||b>=110948&&b<=110951||b>=110960&&b<=111355||b===126980||b===127183||b===127374||b>=127377&&b<=127386||b>=127488&&b<=127490||b>=127504&&b<=127547||b>=127552&&b<=127560||b===127568||b===127569||b>=127584&&b<=127589||b>=127744&&b<=127776||b>=127789&&b<=127797||b>=127799&&b<=127868||b>=127870&&b<=127891||b>=127904&&b<=127946||b>=127951&&b<=127955||b>=127968&&b<=127984||b===127988||b>=127992&&b<=128062||b===128064||b>=128066&&b<=128252||b>=128255&&b<=128317||b>=128331&&b<=128334||b>=128336&&b<=128359||b===128378||b===128405||b===128406||b===128420||b>=128507&&b<=128591||b>=128640&&b<=128709||b===128716||b>=128720&&b<=128722||b>=128725&&b<=128727||b>=128732&&b<=128735||b===128747||b===128748||b>=128756&&b<=128764||b>=128992&&b<=129003||b===129008||b>=129292&&b<=129338||b>=129340&&b<=129349||b>=129351&&b<=129535||b>=129648&&b<=129660||b>=129664&&b<=129672||b>=129680&&b<=129725||b>=129727&&b<=129733||b>=129742&&b<=129755||b>=129760&&b<=129768||b>=129776&&b<=129784||b>=131072&&b<=196605||b>=196608&&b<=262141,o1=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,V1=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,U1=/\t{1,1000}/y,n1=/[\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,w1=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,t9=/\p{M}+/gu,e9={limit:1/0,ellipsis:""},Ib=(b,x={},Z={})=>{let J=x.limit??1/0,Y=x.ellipsis??"",Q=x?.ellipsisWidth??(Y?Ib(Y,e9,Z).width:0),z=Z.ansiWidth??0,q=Z.controlWidth??0,B=Z.tabWidth??8,k=Z.ambiguousWidth??1,D=Z.emojiWidth??2,U=Z.fullWidthWidth??2,H=Z.regularWidth??1,N=Z.wideWidth??2,G=0,X=0,L=b.length,V=0,O=!1,w=L,R=Math.max(0,J-Q),M=0,W=0,$=0,j=0;b:for(;;){if(W>M||X>=L&&X>G){let F=b.slice(M,W)||b.slice(G,X);V=0;for(let A of F.replaceAll(t9,"")){let C=A.codePointAt(0)||0;if(a9(C)?j=U:s9(C)?j=N:k!==H&&r9(C)?j=k:j=H,$+j>R&&(w=Math.min(w,Math.max(M,G)+V)),$+j>J){O=!0;break b}V+=A.length,$+=j}M=W=0}if(X>=L)break;if(w1.lastIndex=X,w1.test(b)){if(V=w1.lastIndex-X,j=V*H,$+j>R&&(w=Math.min(w,X+Math.floor((R-$)/H))),$+j>J){O=!0;break}$+=j,M=G,W=X,X=G=w1.lastIndex;continue}if(o1.lastIndex=X,o1.test(b)){if($+z>R&&(w=Math.min(w,X)),$+z>J){O=!0;break}$+=z,M=G,W=X,X=G=o1.lastIndex;continue}if(V1.lastIndex=X,V1.test(b)){if(V=V1.lastIndex-X,j=V*q,$+j>R&&(w=Math.min(w,X+Math.floor((R-$)/q))),$+j>J){O=!0;break}$+=j,M=G,W=X,X=G=V1.lastIndex;continue}if(U1.lastIndex=X,U1.test(b)){if(V=U1.lastIndex-X,j=V*B,$+j>R&&(w=Math.min(w,X+Math.floor((R-$)/B))),$+j>J){O=!0;break}$+=j,M=G,W=X,X=G=U1.lastIndex;continue}if(n1.lastIndex=X,n1.test(b)){if($+D>R&&(w=Math.min(w,X)),$+D>J){O=!0;break}$+=D,M=G,W=X,X=G=n1.lastIndex;continue}X+=1}return{width:O?R:$,index:O?w:L,truncated:O,ellipsed:O&&J>=Q}},b3={limit:1/0,ellipsis:"",ellipsisWidth:0},b1=(b,x={})=>Ib(b,b3,x).width,k1="\x1B",Nb="\x9B",x3=39,s1="\x07",vb="[",Z3="]",_b="m",t1=`${Z3}8;;`,kb=new RegExp(`(?:\\${vb}(?<code>\\d+)m|\\${t1}(?<uri>.*)${s1})`,"y"),J3=(b)=>{if(b>=30&&b<=37||b>=90&&b<=97)return 39;if(b>=40&&b<=47||b>=100&&b<=107)return 49;if(b===1||b===2)return 22;if(b===3)return 23;if(b===4)return 24;if(b===7)return 27;if(b===8)return 28;if(b===9)return 29;if(b===0)return 0},Db=(b)=>`${k1}${vb}${b}${_b}`,Rb=(b)=>`${k1}${t1}${b}${s1}`,Y3=(b)=>b.map((x)=>b1(x)),c1=(b,x,Z)=>{let J=x[Symbol.iterator](),Y=!1,Q=!1,z=b.at(-1),q=z===void 0?0:b1(z),B=J.next(),k=J.next(),D=0;for(;!B.done;){let U=B.value,H=b1(U);q+H<=Z?b[b.length-1]+=U:(b.push(U),q=0),(U===k1||U===Nb)&&(Y=!0,Q=x.startsWith(t1,D+1)),Y?Q?U===s1&&(Y=!1,Q=!1):U===_b&&(Y=!1):(q+=H,q===Z&&!k.done&&(b.push(""),q=0)),B=k,k=J.next(),D+=U.length}z=b.at(-1),!q&&z!==void 0&&z.length>0&&b.length>1&&(b[b.length-2]+=b.pop())},Q3=(b)=>{let x=b.split(" "),Z=x.length;for(;Z>0&&!(b1(x[Z-1])>0);)Z--;return Z===x.length?b:x.slice(0,Z).join(" ")+x.slice(Z).join("")},z3=(b,x,Z={})=>{if(Z.trim!==!1&&b.trim()==="")return"";let J="",Y,Q,z=b.split(" "),q=Y3(z),B=[""];for(let[G,X]of z.entries()){Z.trim!==!1&&(B[B.length-1]=(B.at(-1)??"").trimStart());let L=b1(B.at(-1)??"");if(G!==0&&(L>=x&&(Z.wordWrap===!1||Z.trim===!1)&&(B.push(""),L=0),(L>0||Z.trim===!1)&&(B[B.length-1]+=" ",L++)),Z.hard&&q[G]>x){let V=x-L,O=1+Math.floor((q[G]-V-1)/x);Math.floor((q[G]-1)/x)<O&&B.push(""),c1(B,X,x);continue}if(L+q[G]>x&&L>0&&q[G]>0){if(Z.wordWrap===!1&&L<x){c1(B,X,x);continue}B.push("")}if(L+q[G]>x&&Z.wordWrap===!1){c1(B,X,x);continue}B[B.length-1]+=X}Z.trim!==!1&&(B=B.map((G)=>Q3(G)));let k=B.join(`
`),D=k[Symbol.iterator](),U=D.next(),H=D.next(),N=0;for(;!U.done;){let G=U.value,X=H.value;if(J+=G,G===k1||G===Nb){kb.lastIndex=N+1;let V=kb.exec(k)?.groups;if(V?.code!==void 0){let O=Number.parseFloat(V.code);Y=O===x3?void 0:O}else V?.uri!==void 0&&(Q=V.uri.length===0?void 0:V.uri)}let L=Y?J3(Y):void 0;X===`
`?(Q&&(J+=Rb("")),Y&&L&&(J+=Db(L))):G===`
`&&(Y&&L&&(J+=Db(Y)),Q&&(J+=Rb(Q))),N+=G.length,U=H,H=D.next()}return J};function r1(b,x,Z){return String(b).normalize().replaceAll(`\r
`,`
`).split(`
`).map((J)=>z3(J,x,Z)).join(`
`)}var q3=(b,x,Z,J,Y)=>{let Q=x,z=0;for(let q=Z;q<J;q++){let B=b[q];if(Q=Q-B.length,z++,Q<=Y)break}return{lineCount:Q,removals:z}},X3=(b)=>{let{cursor:x,options:Z,style:J}=b,Y=b.output??process.stdout,Q=O1(Y),z=b.columnPadding??0,q=b.rowPadding??4,B=Q-z,k=d1(Y),D=P.default.dim("..."),U=b.maxItems??Number.POSITIVE_INFINITY,H=Math.max(k-q,0),N=Math.max(Math.min(U,H),5),G=0;x>=N-3&&(G=Math.max(Math.min(x-N+3,Z.length-N),0));let X=N<Z.length&&G>0,L=N<Z.length&&G+N<Z.length,V=Math.min(G+N,Z.length),O=[],w=0;X&&w++,L&&w++;let R=G+(X?1:0),M=V-(L?1:0);for(let $=R;$<M;$++){let j=r1(J(Z[$],$===x),B,{hard:!0,trim:!1}).split(`
`);O.push(j),w+=j.length}if(w>H){let $=0,j=0,F=w,A=x-R,C=(d,I)=>q3(O,F,d,I,H);X?({lineCount:F,removals:$}=C(0,A),F>H&&({lineCount:F,removals:j}=C(A+1,O.length))):({lineCount:F,removals:j}=C(A+1,O.length),F>H&&({lineCount:F,removals:$}=C(0,A))),$>0&&(X=!0,O.splice(0,$)),j>0&&(L=!0,O.splice(O.length-j,j))}let W=[];X&&W.push(D);for(let $ of O)for(let j of $)W.push(j);return L&&W.push(D),W};var T={message:(b=[],{symbol:x=P.default.gray(y),secondarySymbol:Z=P.default.gray(y),output:J=process.stdout,spacing:Y=1,withGuide:Q}={})=>{let z=[],q=(Q??u.withGuide)!==!1,B=q?Z:"",k=q?`${x} `:"",D=q?`${Z} `:"";for(let H=0;H<Y;H++)z.push(B);let U=Array.isArray(b)?b:b.split(`
`);if(U.length>0){let[H,...N]=U;H.length>0?z.push(`${k}${H}`):z.push(q?x:"");for(let G of N)G.length>0?z.push(`${D}${G}`):z.push(q?Z:"")}J.write(`${z.join(`
`)}
`)},info:(b,x)=>{T.message(b,{...x,symbol:P.default.blue(d9)})},success:(b,x)=>{T.message(b,{...x,symbol:P.default.green(l9)})},step:(b,x)=>{T.message(b,{...x,symbol:P.default.green(a1)})},warn:(b,x)=>{T.message(b,{...x,symbol:P.default.yellow(o9)})},warning:(b,x)=>{T.warn(b,x)},error:(b,x)=>{T.message(b,{...x,symbol:P.default.red(n9)})}};var Fb=(b="",x)=>{(x?.output??process.stdout).write(`${P.default.gray(u9)} ${b}
`)},Cb=(b="",x)=>{(x?.output??process.stdout).write(`${P.default.gray(y)}
${P.default.gray(Wb)} ${b}
`)};var G3=P.default.magenta,D1=({indicator:b="dots",onCancel:x,output:Z=process.stdout,cancelMessage:J,errorMessage:Y,frames:Q=i1?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:z=i1?80:120,signal:q,...B}={})=>{let k=f9(),D,U,H=!1,N=!1,G="",X,L=performance.now(),V=O1(Z),O=B?.styleFrame??G3,w=(I)=>{let E=I>1?Y??u.messages.error:J??u.messages.cancel;N=I===1,H&&(d(E,I),N&&typeof x=="function"&&x())},R=()=>w(2),M=()=>w(1),W=()=>{process.on("uncaughtExceptionMonitor",R),process.on("unhandledRejection",R),process.on("SIGINT",M),process.on("SIGTERM",M),process.on("exit",w),q&&q.addEventListener("abort",M)},$=()=>{process.removeListener("uncaughtExceptionMonitor",R),process.removeListener("unhandledRejection",R),process.removeListener("SIGINT",M),process.removeListener("SIGTERM",M),process.removeListener("exit",w),q&&q.removeEventListener("abort",M)},j=()=>{if(X===void 0)return;k&&Z.write(`
`);let I=r1(X,V,{hard:!0,trim:!1}).split(`
`);I.length>1&&Z.write(e.cursor.up(I.length-1)),Z.write(e.cursor.to(0)),Z.write(e.erase.down())},F=(I)=>I.replace(/\.+$/,""),A=(I)=>{let E=(performance.now()-I)/1000,f=Math.floor(E/60),m=Math.floor(E%60);return f>0?`[${f}m ${m}s]`:`[${m}s]`},C=(I="")=>{H=!0,D=Vb({output:Z}),G=F(I),L=performance.now(),Z.write(`${P.default.gray(y)}
`);let E=0,f=0;W(),U=setInterval(()=>{if(k&&G===X)return;j(),X=G;let m=O(Q[E]),Q1;if(k)Q1=`${m} ${G}...`;else if(b==="timer")Q1=`${m} ${G} ${A(L)}`;else{let X9=".".repeat(Math.floor(f)).slice(0,3);Q1=`${m} ${G}${X9}`}let q9=r1(Q1,V,{hard:!0,trim:!1});Z.write(q9),E=E+1<Q.length?E+1:0,f=f<4?f+0.125:0},z)},d=(I="",E=0,f=!1)=>{if(!H)return;H=!1,clearInterval(U),j();let m=E===0?P.default.green(a1):E===1?P.default.red(Mb):P.default.red(Sb);G=I??G,f||(b==="timer"?Z.write(`${m} ${G} ${A(L)}
`):Z.write(`${m} ${G}
`)),$(),D()};return{start:C,stop:(I="")=>d(I,0),message:(I="")=>{G=F(I??G)},cancel:(I="")=>d(I,1),error:(I="")=>d(I,2),clear:()=>d("",0,!0),get isCancelled(){return N}}},W4={light:S("\u2500","-"),heavy:S("\u2501","="),block:S("\u2588","#")};var T1=(b,x)=>b.includes(`
`)?b.split(`
`).map((Z)=>x(Z)).join(`
`):x(b),e1=(b)=>{let x=(Z,J)=>{let Y=Z.label??String(Z.value);switch(J){case"disabled":return`${P.default.gray(Tb)} ${T1(Y,P.default.gray)}${Z.hint?` ${P.default.dim(`(${Z.hint??"disabled"})`)}`:""}`;case"selected":return`${T1(Y,P.default.dim)}`;case"active":return`${P.default.green(p9)} ${Y}${Z.hint?` ${P.default.dim(`(${Z.hint})`)}`:""}`;case"cancelled":return`${T1(Y,(Q)=>P.default.strikethrough(P.default.dim(Q)))}`;default:return`${P.default.dim(Tb)} ${T1(Y,P.default.dim)}`}};return new l1({options:b.options,signal:b.signal,input:b.input,output:b.output,initialValue:b.initialValue,render(){let Z=`${c9(this.state)} `,J=`${i9(this.state)} `,Y=P1(b.output,b.message,J,Z),Q=`${P.default.gray(y)}
${Y}
`;switch(this.state){case"submit":{let z=`${P.default.gray(y)} `,q=P1(b.output,x(this.options[this.cursor],"selected"),z);return`${Q}${q}`}case"cancel":{let z=`${P.default.gray(y)} `,q=P1(b.output,x(this.options[this.cursor],"cancelled"),z);return`${Q}${q}
${P.default.gray(y)}`}default:{let z=`${P.default.cyan(y)} `,q=Q.split(`
`).length;return`${Q}${z}${X3({output:b.output,cursor:this.cursor,options:this.options,maxItems:b.maxItems,columnPadding:z.length,rowPadding:q+2,style:(B,k)=>x(B,B.disabled?"disabled":k?"active":"inactive")}).join(`
${z}`)}
${P.default.cyan(Wb)}
`}}}}).prompt()};var I4=`${P.default.gray(y)} `;var K=l(a(),1);import{spawn as nb}from"child_process";import{existsSync as B3,mkdirSync as $3,readFileSync as yb,writeFileSync as j3,statSync as L3}from"fs";import{join as M1}from"path";import{homedir as O3}from"os";var W1="OpenRouterTeam/spawn",g=`https://raw.githubusercontent.com/${W1}/main`,I1=M1(process.env.XDG_CACHE_HOME||M1(O3(),".cache"),"spawn"),S1=M1(I1,"manifest.json"),P3=3600,H3=1e4;function V3(){try{let b=L3(S1);return(Date.now()-b.mtimeMs)/1000}catch(b){return 1/0}}function R1(b,x){let Z=x instanceof Error?x.message:String(x);console.error(x?`${b}: ${Z}`:b)}function Ab(){try{return JSON.parse(yb(S1,"utf-8"))}catch(b){return R1(`Failed to read cache from ${S1}`,b),null}}function U3(b){$3(I1,{recursive:!0}),j3(S1,JSON.stringify(b,null,2),"utf-8")}function Eb(b){return b&&b.agents&&b.clouds&&b.matrix}async function w3(){try{let b=await fetch(`${g}/manifest.json`,{signal:AbortSignal.timeout(H3)});if(!b.ok)return R1(`Failed to fetch manifest from GitHub: HTTP ${b.status} ${b.statusText}`),null;let x=await b.json();if(!Eb(x))return R1("Manifest structure validation failed: missing required fields (agents, clouds, or matrix)"),null;return x}catch(b){return R1("Network error fetching manifest",b),null}}var n=null;function T3(){if(V3()>=P3)return null;return Ab()}function k3(b){return U3(b),n=b,b}function D3(){try{let b=M1(process.cwd(),"manifest.json");if(B3(b)){let x=JSON.parse(yb(b,"utf-8"));if(Eb(x))return x}}catch(b){}return null}async function hb(b=!1){if(n&&!b)return n;let x=D3();if(x)return n=x,x;if(!b){let Y=T3();if(Y)return n=Y,Y}let Z=await w3();if(Z)return k3(Z);let J=Ab();if(J)return n=J,J;throw Error("Cannot load manifest. Check your internet connection.")}function x1(b){return Object.keys(b.agents)}function Z1(b){return Object.keys(b.clouds)}function c(b,x,Z){return b.matrix[`${x}/${Z}`]??"missing"}function gb(b){let x=0;for(let Z of Object.values(b.matrix))if(Z==="implemented")x++;return x}var i={name:"@openrouter/spawn",version:"0.2.12",type:"module",bin:{spawn:"cli.js"},scripts:{dev:"bun run src/index.ts",build:"bun build src/index.ts --outfile cli.js --target bun --minify",compile:"bun build src/index.ts --compile --outfile spawn",test:"bun test","test:watch":"bun test --watch"},dependencies:{"@clack/prompts":"^1.0.0",picocolors:"^1.1.1"},devDependencies:{"@types/bun":"^1.3.8"}};var M3=/^[a-z0-9_-]+$/;function N1(b,x){if(!b||b.trim()==="")throw Error(`${x} cannot be empty`);if(b.length>64)throw Error(`${x} exceeds maximum length of 64 characters`);if(!M3.test(b))throw Error(`${x} "${b}" contains invalid characters.
Only lowercase letters, numbers, hyphens, and underscores are allowed.
Run 'spawn agents' or 'spawn clouds' to see valid names.`);if(b.includes("..")||b.includes("/")||b.includes("\\"))throw Error(`${x} contains path traversal characters`)}function fb(b){if(!b||b.trim()==="")throw Error("Script content is empty");let x=[{pattern:/rm\s+-rf\s+\/(?!\w)/,description:"destructive filesystem operation (rm -rf /)"},{pattern:/mkfs\./,description:"filesystem formatting command"},{pattern:/dd\s+if=/,description:"raw disk operation"},{pattern:/:(){:|:&};:/,description:"fork bomb pattern"}];for(let{pattern:Z,description:J}of x)if(Z.test(b))throw Error(`Script blocked: contains potentially dangerous pattern (${J})`);if(!b.trim().startsWith("#!"))throw Error("Script must start with a valid shebang (e.g., #!/bin/bash)")}function mb(b){if(!b||b.trim()==="")throw Error("Prompt cannot be empty");let x=10240;if(b.length>x)throw Error(`Prompt exceeds maximum length of ${x} characters`);let Z=[{pattern:/\$\(.*\)/,description:"command substitution $()"},{pattern:/`[^`]*`/,description:"command substitution backticks"},{pattern:/;\s*rm\s+-rf/,description:"command chaining with rm -rf"},{pattern:/\|\s*bash/,description:"piping to bash"},{pattern:/\|\s*sh/,description:"piping to sh"}];for(let{pattern:J,description:Y}of Z)if(J.test(b))throw Error(`Prompt blocked: contains potentially dangerous pattern (${Y}).
If this is a false positive, use --prompt-file instead:
echo "your prompt" > prompt.txt
spawn <agent> <cloud> --prompt-file prompt.txt`)}var v1=i.version,S3=1e4;function J1(b){return b&&typeof b==="object"&&"message"in b?String(b.message):String(b)}function ub(){console.error(K.default.red("Operation cancelled.")),process.exit(0)}function pb(b,x,Z){return new Promise((J,Y)=>{let Q=nb("bash",[b,...x],{cwd:Z||process.cwd(),stdio:"inherit",env:process.env});Q.on("close",(z)=>{if(z===0)J();else Y(Error(`${b} exited with code ${z}`))}),Q.on("error",Y)})}async function W3(b,x){let Z=D1();Z.start(b);try{let J=await x();return Z.stop(b),J}catch(J){throw Z.stop(K.default.red("Failed")),J}}async function Y1(){return W3("Loading manifest...",hb)}function cb(b,x,Z){if(!b||b.trim()==="")T.error(`${x} is required but was not provided`),T.info(`Run ${K.default.cyan(Z)} to see all available ${x.toLowerCase()}s.`),process.exit(1)}function db(b,x){return b.map((Z)=>({value:Z,label:x[Z].name,hint:x[Z].description}))}function bb(b,x){return Z1(b).filter((Z)=>c(b,Z,x)==="implemented")}function I3(b,x){if(!b.agents[x])T.error(`Unknown agent: ${K.default.bold(x)}`),T.info(`Run ${K.default.cyan("spawn agents")} to see available agents.`),process.exit(1)}async function ib(b){try{N1(b,"Agent name")}catch(Z){T.error(J1(Z)),process.exit(1)}cb(b,"Agent name","spawn agents");let x=await Y1();return I3(x,b),[x,b]}function N3(b,x){if(!b.clouds[x])T.error(`Unknown cloud: ${K.default.bold(x)}`),T.info(`Run ${K.default.cyan("spawn clouds")} to see available clouds.`),process.exit(1)}function v3(b,x,Z){if(c(b,x,Z)!=="implemented"){let Y=b.agents[Z].name,Q=b.clouds[x].name;T.error(`${Y} on ${Q} is not yet implemented.`);let z=bb(b,Z);if(z.length>0){let q=z.slice(0,3).map((B)=>`spawn ${Z} ${B}`);T.info(`${Y} is available on ${z.length} cloud${z.length>1?"s":""}. Try one of these instead:`);for(let B of q)T.info(` ${K.default.cyan(B)}`);if(z.length>3)T.info(`Run ${K.default.cyan(`spawn ${Z}`)} to see all ${z.length} options.`)}else T.info("This agent has no implemented cloud providers yet."),T.info(`Run ${K.default.cyan("spawn list")} to see the full availability matrix.`);process.exit(1)}}async function rb(){Fb(K.default.inverse(` spawn v${v1} `));let b=await Y1(),x=x1(b),Z=await e1({message:"Select an agent",options:db(x,b.agents)});if(t(Z))ub();let J=bb(b,Z);if(J.length===0)T.error(`No clouds available for ${b.agents[Z].name}`),T.info("This agent has no implemented cloud providers yet."),T.info(`Run ${K.default.cyan("spawn list")} to see the full availability matrix.`),process.exit(1);let Y=await e1({message:"Select a cloud provider",options:db(J,b.clouds)});if(t(Y))ub();let Q=b.agents[Z].name,z=b.clouds[Y].name;T.step(`Launching ${K.default.bold(Q)} on ${K.default.bold(z)}`),T.info(`Next time, run directly: ${K.default.cyan(`spawn ${Z} ${Y}`)}`),Cb("Handing off to spawn script..."),await sb(Y,Z)}async function ab(b,x,Z){try{if(N1(b,"Agent name"),N1(x,"Cloud name"),Z)mb(Z)}catch(q){T.error(J1(q)),process.exit(1)}cb(x,"Cloud name","spawn clouds");let[J,Y]=await ib(b);N3(J,x),v3(J,x,Y);let Q=J.agents[Y].name,z=J.clouds[x].name;if(Z)T.step(`Launching ${K.default.bold(Q)} on ${K.default.bold(z)} with prompt...`);else T.step(`Launching ${K.default.bold(Q)} on ${K.default.bold(z)}...`);await sb(x,Y,Z)}function lb(b){return b===404?"not found":`HTTP ${b}`}async function _3(b,x){let Z=D1();Z.start("Downloading spawn script...");try{let J=await fetch(b);if(J.ok)return Z.stop("Script downloaded"),J.text();Z.message("Trying fallback source...");let Y=await fetch(x);if(!Y.ok)Z.stop(K.default.red("Download failed")),F3(b,x,J.status,Y.status),process.exit(1);return Z.stop("Script downloaded (fallback)"),Y.text()}catch(J){throw Z.stop(K.default.red("Download failed")),J}}function F3(b,x,Z,J){if(T.error("Script download failed"),console.error(`
Primary source (${b}): ${lb(Z)}`),console.error(`Fallback source (${x}): ${lb(J)}`),Z===404&&J===404)console.error(`
This agent + cloud combination doesn't exist yet.`),console.error(`
What to do:`),console.error(` 1. Check the matrix: ${K.default.cyan("spawn list")}`),console.error(" 2. Verify the combination is implemented (marked with +)"),console.error(" 3. Check for typos in agent or cloud name");else console.error(`
Network or server error - try again in a few moments.`)}async function sb(b,x,Z){let J=`https://openrouter.ai/lab/spawn/${b}/${x}.sh`,Y=`${g}/${b}/${x}.sh`;try{let Q=await _3(J,Y);await C3(Q,Z)}catch(Q){T.error("Failed to download or execute spawn script"),console.error(`
Error:`,J1(Q)),console.error(`
Troubleshooting:`),console.error(` 1. Verify this combination exists: ${K.default.cyan("spawn list")}`),console.error(" 2. Check your internet connection"),console.error(` 3. Try accessing the script directly: ${Y}`),process.exit(1)}}function C3(b,x){fb(b);let Z={...process.env};if(x)Z.SPAWN_PROMPT=x,Z.SPAWN_MODE="non-interactive";return new Promise((J,Y)=>{let Q=nb("bash",["-c",b],{stdio:"inherit",env:Z});Q.on("close",(z)=>{if(z===0)J();else Y(Error(`Script exited with code ${z}`))}),Q.on("error",Y)})}var y3=16,A3=10,tb=2,r=18;function ob(b,x){let Z=x;for(let J of b){let Y=J.length+tb;if(Y>Z)Z=Y}return Z}function E3(b,x,Z,J){let Y="".padEnd(Z);for(let Q of b)Y+=K.default.bold(x.clouds[Q].name.padEnd(J));return Y}function h3(b,x,Z){let J="".padEnd(x);for(let Y of b)J+=K.default.dim("-".repeat(Z-tb)+" ");return J}function g3(b,x,Z,J,Y){let Q=K.default.bold(Z.agents[b].name.padEnd(J));for(let z of x){let q=c(Z,z,b),B=q==="implemented"?" +":" -",k=q==="implemented"?K.default.green:K.default.dim;Q+=k(B.padEnd(Y))}return Q}async function eb(){let b=await Y1(),x=x1(b),Z=Z1(b),J=ob(x.map((q)=>b.agents[q].name),y3),Y=ob(Z.map((q)=>b.clouds[q].name),A3);console.log(),console.log(E3(Z,b,J,Y)),console.log(h3(Z,J,Y));for(let q of x)console.log(g3(q,Z,b,J,Y));let Q=gb(b),z=x.length*Z.length;console.log(),console.log(`${K.default.green("+")} implemented ${K.default.dim("-")} not yet available`),console.log(K.default.green(`${Q}/${z} combinations implemented`)),console.log()}function f3(b,x){return x1(b).filter((Z)=>c(b,x,Z)==="implemented")}async function b9(){let b=await Y1();console.log(),console.log(K.default.bold("Agents")),console.log();for(let x of x1(b)){let Z=b.agents[x],J=bb(b,x).length;console.log(` ${K.default.green(x.padEnd(r))} ${Z.name.padEnd(r)} ${K.default.dim(`${J} clouds ${Z.description}`)}`)}console.log(),console.log(K.default.dim(` Run ${K.default.cyan("spawn <agent>")} for details, or ${K.default.cyan("spawn <agent> <cloud>")} to launch.`)),console.log()}async function x9(){let b=await Y1();console.log(),console.log(K.default.bold("Cloud Providers")),console.log();for(let x of Z1(b)){let Z=b.clouds[x],J=f3(b,x).length;console.log(` ${K.default.green(x.padEnd(r))} ${Z.name.padEnd(r)} ${K.default.dim(`${J} agents ${Z.description}`)}`)}console.log(),console.log(K.default.dim(` Run ${K.default.cyan("spawn <agent> <cloud>")} to launch.`)),console.log()}async function Z9(b){let[x,Z]=await ib(b),J=x.agents[Z];console.log(),console.log(`${K.default.bold(J.name)} ${K.default.dim("--")} ${J.description}`),console.log(),console.log(K.default.bold("Available clouds:")),console.log();let Y=!1;for(let Q of Z1(x))if(c(x,Q,Z)==="implemented"){let q=x.clouds[Q];console.log(` ${K.default.green(Q.padEnd(r))} ${q.name.padEnd(r)} ${K.default.dim("spawn "+Z+" "+Q)}`),Y=!0}if(!Y)console.log(K.default.dim(" No implemented clouds yet."));console.log()}function m3(b){return b("./improve.sh")&&b("./manifest.json")}async function u3(b,x){let{join:Z}=await import("path"),{execSync:J}=await import("child_process");if(x(Z(b,".git"))){T.step("Updating spawn repo...");try{J("git pull --ff-only",{cwd:b,stdio:"pipe"})}catch(Y){console.error("Warning: Failed to update repo:",J1(Y))}}else T.step("Cloning spawn repo..."),J(`git clone https://github.com/${W1}.git ${b}`,{stdio:"inherit"})}async function J9(b){let{existsSync:x}=await import("fs");if(m3(x))return pb("improve.sh",b,".");let{join:Z}=await import("path"),J=Z(I1,"repo");return await u3(J,x),pb("improve.sh",b,J)}async function Y9(){let b=D1();b.start("Checking for updates...");try{let x=await fetch(`${g}/cli/package.json`,{signal:AbortSignal.timeout(S3)});if(!x.ok)throw Error("fetch failed");let J=(await x.json()).version;if(J===v1){b.stop(`Already up to date ${K.default.dim(`(v${v1})`)}`);return}b.stop(`Updating: v${v1} -> v${J}`);let{execSync:Y}=await import("child_process");try{Y(`curl -fsSL ${g}/cli/install.sh | bash`,{stdio:"inherit",shell:"/bin/bash"}),console.log(),T.success(`Updated to v${J}`),T.info("Restart your command to use the new version.")}catch{T.error("Auto-update failed. Update manually:"),console.log(),console.log(` ${K.default.cyan(`curl -fsSL ${g}/cli/install.sh | bash`)}`),console.log()}}catch(x){b.stop(K.default.red("Failed to check for updates")),console.error("Error:",J1(x))}}function xb(){console.log(`
${K.default.bold("spawn")} -- Launch any AI coding agent on any cloud
${K.default.bold("USAGE")}
spawn Interactive agent + cloud picker
spawn <agent> <cloud> Launch agent on cloud directly
spawn <agent> <cloud> --prompt "text"
Execute agent with prompt (non-interactive)
spawn <agent> <cloud> --prompt-file <file>
Execute agent with prompt from file
spawn <agent> Show available clouds for agent
spawn list Full matrix table
spawn agents List all agents with descriptions
spawn clouds List all cloud providers
spawn improve [--loop] Run improvement system
spawn update Check for CLI updates
spawn version Show version
spawn help Show this help message
${K.default.bold("EXAMPLES")}
spawn ${K.default.dim("# Pick interactively")}
spawn claude sprite ${K.default.dim("# Launch Claude Code on Sprite")}
spawn aider hetzner ${K.default.dim("# Launch Aider on Hetzner Cloud")}
spawn claude sprite --prompt "Fix all linter errors"
${K.default.dim("# Execute Claude with prompt and exit")}
spawn aider sprite -p "Add tests" ${K.default.dim("# Short form of --prompt")}
spawn claude sprite --prompt-file instructions.txt
${K.default.dim("# Read prompt from file")}
spawn claude ${K.default.dim("# Show which clouds support Claude")}
spawn list ${K.default.dim("# See the full agent x cloud matrix")}
${K.default.bold("AUTHENTICATION")}
All agents use OpenRouter for LLM access. Get your API key at:
${K.default.cyan("https://openrouter.ai/settings/keys")}
For non-interactive use, set environment variables:
${K.default.dim("OPENROUTER_API_KEY")}=sk-or-v1-... spawn claude sprite
Each cloud provider has its own auth requirements.
Run ${K.default.cyan("spawn <agent> <cloud>")} to see specific instructions.
${K.default.bold("INSTALL")}
curl -fsSL ${g}/cli/install.sh | bash
${K.default.bold("TROUBLESHOOTING")}
${K.default.dim("*")} Script not found: Run ${K.default.cyan("spawn list")} to verify the combination exists
${K.default.dim("*")} Missing credentials: Check cloud-specific READMEs in the repo
${K.default.dim("*")} Update issues: Try ${K.default.cyan("spawn update")} or reinstall manually
${K.default.dim("*")} Garbled unicode: Set ${K.default.cyan("SPAWN_NO_UNICODE=1")} for ASCII-only output
${K.default.bold("MORE INFO")}
Repository: https://github.com/${W1}
OpenRouter: https://openrouter.ai
`)}var v=l(a(),1);import{execSync as p3}from"child_process";var Zb=i.version,d3={execSync:(b,x)=>p3(b,x)},l3=5000;async function o3(){try{let b=await fetch(`${g}/cli/package.json`,{signal:AbortSignal.timeout(l3)});if(!b.ok)return null;return(await b.json()).version}catch{return null}}function n3(b,x){let Z=(Q)=>Q.split(".").map((z)=>parseInt(z,10)||0),J=Z(b),Y=Z(x);for(let Q=0;Q<3;Q++){if((Y[Q]||0)>(J[Q]||0))return!0;if((Y[Q]||0)<(J[Q]||0))return!1}return!1}function c3(b){let x=`Update available: v${Zb} -> v${b}`,Z="Updating automatically...",J=Math.max(x.length,25)+4,Y="+"+"-".repeat(J)+"+";console.error(),console.error(v.default.yellow(Y)),console.error(v.default.yellow("| ")+v.default.bold(`Update available: v${Zb} -> `)+v.default.green(v.default.bold(`v${b}`))+" ".repeat(J-2-x.length)+v.default.yellow(" |")),console.error(v.default.yellow("| ")+v.default.bold("Updating automatically...")+" ".repeat(J-2-25)+v.default.yellow(" |")),console.error(v.default.yellow(Y)),console.error();try{d3.execSync(`curl -fsSL ${g}/cli/install.sh | bash`,{stdio:"inherit",shell:"/bin/bash"}),console.error(),console.error(v.default.green(v.default.bold("\u2713 Updated successfully!"))),console.error(v.default.dim(" Restart your command to use the new version.")),console.error(),process.exit(0)}catch(Q){console.error(),console.error(v.default.red(v.default.bold("\u2717 Auto-update failed"))),console.error(v.default.dim(" Please update manually:")),console.error(),console.error(v.default.cyan(` curl -fsSL ${g}/cli/install.sh | bash`)),console.error()}}async function Q9(){if(process.env.SPAWN_NO_UPDATE_CHECK==="1")return;try{let b=await o3();if(!b)return;if(n3(Zb,b))c3(b)}catch{}}var i3=i.version;function r3(){return process.stdin.isTTY&&process.stdout.isTTY}function a3(b){if(b&&typeof b==="object"&&"message"in b)console.error(`Error: ${b.message}`);else console.error(`Error: ${String(b)}`);console.error(`
Run 'spawn help' for usage information.`),process.exit(1)}function z9(b,x,Z,J){let Y=b.findIndex((q)=>x.includes(q));if(Y===-1)return[void 0,b];if(!b[Y+1]||b[Y+1].startsWith("-"))console.error(`Error: ${b[Y]} requires a value`),console.error(`
Usage: ${J}`),process.exit(1);let Q=b[Y+1],z=[...b];return z.splice(Y,2),[Q,z]}async function s3(b,x,Z){if(x)await ab(b,x,Z);else{if(Z)console.error("Error: --prompt requires both <agent> and <cloud>"),console.error(`
Usage: spawn ${b} <cloud> --prompt "your prompt here"`),process.exit(1);await Z9(b)}}async function t3(b){let[x,Z]=z9(b,["--prompt","-p"],"prompt",'spawn <agent> <cloud> --prompt "your prompt here"'),[J,Y]=z9(Z,["--prompt-file"],"prompt file","spawn <agent> <cloud> --prompt-file instructions.txt");if(Z=Y,x&&J)console.error("Error: --prompt and --prompt-file cannot be used together"),console.error(`
Use one or the other:`),console.error(' spawn <agent> <cloud> --prompt "your prompt here"'),console.error(" spawn <agent> <cloud> --prompt-file instructions.txt"),process.exit(1);if(J){let{readFileSync:Q}=await import("fs");try{x=Q(J,"utf-8")}catch(z){let q=z&&typeof z==="object"&&"message"in z?z.message:String(z);console.error(`Error reading prompt file '${J}': ${q}`),console.error(`
Make sure the file exists and is readable.`),process.exit(1)}}return[x,Z]}async function e3(){let b=process.argv.slice(2);await Q9();let[x,Z]=await t3(b),J=Z[0];try{if(!J){if(x)console.error("Error: --prompt requires both <agent> and <cloud>"),console.error(`
Usage: spawn <agent> <cloud> --prompt "your prompt here"`),process.exit(1);if(r3())await rb();else xb();return}switch(J){case"help":case"--help":case"-h":xb();break;case"version":case"--version":case"-v":case"-V":console.log(`spawn v${i3}`);break;case"list":case"ls":await eb();break;case"agents":await b9();break;case"clouds":await x9();break;case"improve":await J9(Z.slice(1));break;case"update":await Y9();break;default:await s3(Z[0],Z[1],x);break}}catch(Y){a3(Y)}}e3();