spawn/cli/cli.js
Sprite 67051bfc48 fix: Monkey-patch stdout.write to force UTF-8 Buffer encoding
Explicitly convert string chunks to Buffer.from(chunk, 'utf8') before
writing to process.stdout. This fixes UTF-8 mojibake (â instead of ◆/│)
seen in some Bun + terminal combinations (e.g. Ghostty on macOS) where
process.stdout.write(string) doesn't encode as UTF-8 by default.

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

118 lines
58 KiB
JavaScript
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bun
// @bun
import{createRequire as w9}from"node:module";var B9=Object.create;var{getPrototypeOf:K9,defineProperty:Zb,getOwnPropertyNames:j9}=Object;var $9=Object.prototype.hasOwnProperty;var l=(b,x,Z)=>{Z=b!=null?B9(K9(b)):{};let J=x||!b||!b.__esModule?Zb(Z,"default",{value:b,enumerable:!0}):Z;for(let Y of j9(b))if(!$9.call(J,Y))Zb(J,Y,{get:()=>b[Y],enumerable:!0});return J};var Jb=(b,x)=>()=>(x||b((x={exports:{}}).exports,x),x.exports);var i=w9(import.meta.url);var r=Jb((Y0,_1)=>{var z1=process||{},Qb=z1.argv||[],Q1=z1.env||{},P9=!(!!Q1.NO_COLOR||Qb.includes("--no-color"))&&(!!Q1.FORCE_COLOR||Qb.includes("--color")||z1.platform==="win32"||(z1.stdout||{}).isTTY&&Q1.TERM!=="dumb"||!!Q1.CI),V9=(b,x,Z=b)=>(J)=>{let Y=""+J,Q=Y.indexOf(x,b.length);return~Q?b+H9(Y,x,Z,Q)+x:b+Y+x},H9=(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)},zb=(b=P9)=>{let x=b?V9:()=>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=zb();_1.exports.createColors=zb});var y1=Jb((Q0,qb)=>{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"},U9={up:(b=1)=>"\x1B[S".repeat(b),down:(b=1)=>"\x1B[T".repeat(b)},O9={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}};qb.exports={cursor:F1,scroll:U9,erase:O9,beep:"\x07"}});var L9=()=>{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},Yb=L9();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:",Yb);if(Yb)process.env.TERM="linux";else{if(!process.env.LANG||!process.env.LANG.includes("UTF-8"))process.env.LANG="en_US.UTF-8";let b=process.stdout.write.bind(process.stdout);process.stdout.write=function(x,Z,J){if(typeof x==="string"){let Y=typeof Z==="string"?Z:"utf8";return b(Buffer.from(x,Y),J??(typeof Z==="function"?Z:void 0))}return b(x,Z,J)}}var K1=l(r(),1),_=l(y1(),1);import{stdout as f1,stdin as jb}from"node:process";import*as p from"node:readline";import T9 from"node:readline";import{ReadStream as Xb}from"node:tty";var D9=(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,k9=(b)=>b===12288||b>=65281&&b<=65376||b>=65504&&b<=65510,R9=(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,C1=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,q1=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,X1=/\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,G1=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,M9=/\p{M}+/gu,S9={limit:1/0,ellipsis:""},$b=(b,x={},Z={})=>{let J=x.limit??1/0,Y=x.ellipsis??"",Q=x?.ellipsisWidth??(Y?$b(Y,S9,Z).width:0),z=Z.ansiWidth??0,q=Z.controlWidth??0,K=Z.tabWidth??8,T=Z.ambiguousWidth??1,k=Z.emojiWidth??2,U=Z.fullWidthWidth??2,V=Z.regularWidth??1,W=Z.wideWidth??2,G=0,X=0,w=b.length,H=0,L=!1,O=w,R=Math.max(0,J-Q),M=0,I=0,j=0,$=0;b:for(;;){if(I>M||X>=w&&X>G){let F=b.slice(M,I)||b.slice(G,X);H=0;for(let A of F.replaceAll(M9,"")){let y=A.codePointAt(0)||0;if(k9(y)?$=U:R9(y)?$=W:T!==V&&D9(y)?$=T:$=V,j+$>R&&(O=Math.min(O,Math.max(M,G)+H)),j+$>J){L=!0;break b}H+=A.length,j+=$}M=I=0}if(X>=w)break;if(G1.lastIndex=X,G1.test(b)){if(H=G1.lastIndex-X,$=H*V,j+$>R&&(O=Math.min(O,X+Math.floor((R-j)/V))),j+$>J){L=!0;break}j+=$,M=G,I=X,X=G=G1.lastIndex;continue}if(C1.lastIndex=X,C1.test(b)){if(j+z>R&&(O=Math.min(O,X)),j+z>J){L=!0;break}j+=z,M=G,I=X,X=G=C1.lastIndex;continue}if(q1.lastIndex=X,q1.test(b)){if(H=q1.lastIndex-X,$=H*q,j+$>R&&(O=Math.min(O,X+Math.floor((R-j)/q))),j+$>J){L=!0;break}j+=$,M=G,I=X,X=G=q1.lastIndex;continue}if(X1.lastIndex=X,X1.test(b)){if(H=X1.lastIndex-X,$=H*K,j+$>R&&(O=Math.min(O,X+Math.floor((R-j)/K))),j+$>J){L=!0;break}j+=$,M=G,I=X,X=G=X1.lastIndex;continue}if(A1.lastIndex=X,A1.test(b)){if(j+k>R&&(O=Math.min(O,X)),j+k>J){L=!0;break}j+=k,M=G,I=X,X=G=A1.lastIndex;continue}X+=1}return{width:L?R:j,index:L?O:w,truncated:L,ellipsed:L&&J>=Q}},I9={limit:1/0,ellipsis:"",ellipsisWidth:0},a=(b,x={})=>$b(b,I9,x).width,$1="\x1B",wb="›",N9=39,m1="\x07",Lb="[",W9="]",Pb="m",u1=`${W9}8;;`,Gb=new RegExp(`(?:\\${Lb}(?<code>\\d+)m|\\${u1}(?<uri>.*)${m1})`,"y"),v9=(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)=>`${$1}${Lb}${b}${Pb}`,Kb=(b)=>`${$1}${u1}${b}${m1}`,_9=(b)=>b.map((x)=>a(x)),E1=(b,x,Z)=>{let J=x[Symbol.iterator](),Y=!1,Q=!1,z=b.at(-1),q=z===void 0?0:a(z),K=J.next(),T=J.next(),k=0;for(;!K.done;){let U=K.value,V=a(U);q+V<=Z?b[b.length-1]+=U:(b.push(U),q=0),(U===$1||U===wb)&&(Y=!0,Q=x.startsWith(u1,k+1)),Y?Q?U===m1&&(Y=!1,Q=!1):U===Pb&&(Y=!1):(q+=V,q===Z&&!T.done&&(b.push(""),q=0)),K=T,T=J.next(),k+=U.length}z=b.at(-1),!q&&z!==void 0&&z.length>0&&b.length>1&&(b[b.length-2]+=b.pop())},F9=(b)=>{let x=b.split(" "),Z=x.length;for(;Z>0&&!(a(x[Z-1])>0);)Z--;return Z===x.length?b:x.slice(0,Z).join(" ")+x.slice(Z).join("")},y9=(b,x,Z={})=>{if(Z.trim!==!1&&b.trim()==="")return"";let J="",Y,Q,z=b.split(" "),q=_9(z),K=[""];for(let[G,X]of z.entries()){Z.trim!==!1&&(K[K.length-1]=(K.at(-1)??"").trimStart());let w=a(K.at(-1)??"");if(G!==0&&(w>=x&&(Z.wordWrap===!1||Z.trim===!1)&&(K.push(""),w=0),(w>0||Z.trim===!1)&&(K[K.length-1]+=" ",w++)),Z.hard&&q[G]>x){let H=x-w,L=1+Math.floor((q[G]-H-1)/x);Math.floor((q[G]-1)/x)<L&&K.push(""),E1(K,X,x);continue}if(w+q[G]>x&&w>0&&q[G]>0){if(Z.wordWrap===!1&&w<x){E1(K,X,x);continue}K.push("")}if(w+q[G]>x&&Z.wordWrap===!1){E1(K,X,x);continue}K[K.length-1]+=X}Z.trim!==!1&&(K=K.map((G)=>F9(G)));let T=K.join(`
`),k=T[Symbol.iterator](),U=k.next(),V=k.next(),W=0;for(;!U.done;){let G=U.value,X=V.value;if(J+=G,G===$1||G===wb){Gb.lastIndex=W+1;let H=Gb.exec(T)?.groups;if(H?.code!==void 0){let L=Number.parseFloat(H.code);Y=L===N9?void 0:L}else H?.uri!==void 0&&(Q=H.uri.length===0?void 0:H.uri)}let w=Y?v9(Y):void 0;X===`
`?(Q&&(J+=Kb("")),Y&&w&&(J+=Bb(w))):G===`
`&&(Y&&w&&(J+=Bb(Y)),Q&&(J+=Kb(Q))),W+=G.length,U=V,V=k.next()}return J};function h1(b,x,Z){return String(b).normalize().replaceAll(`\r
`,`
`).split(`
`).map((J)=>y9(J,x,Z)).join(`
`)}var C9=["up","down","left","right","space","enter","cancel"],u={actions:new Set(C9),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 A9(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 E9=globalThis.process.platform.startsWith("win"),g1=Symbol("clack:cancel");function s(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 Xb&&b.isTTY&&b.setRawMode(!0);let Q=(z,{name:q,sequence:K})=>{let T=String(z);if(p1([T,q,K],"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 Xb&&b.isTTY&&!E9&&b.setRawMode(!1),Y.terminal=!1,Y.close()}}var w1=(b)=>("columns"in b)&&typeof b.columns=="number"?b.columns:80,d1=(b)=>("rows"in b)&&typeof b.rows=="number"?b.rows:20;function L1(b,x,Z,J=Z){let Y=w1(b??f1);return h1(x,Y-Z.length,{hard:!0,trim:!1}).split(`
`).map((Q,z)=>`${z===0?J:Z}${Q}`).join(`
`)}class P1{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=T9.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=A9(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 h9(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 g9(b,x){return(x.label??String(x.value)).toLowerCase().includes(b.toLowerCase())}function f9(b,x){if(x)return b?x:x[0]}class Hb extends P1{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#b=0;#Z="";#J;#x;get cursor(){return this.#b}get userInputWithCursor(){if(!this.userInput)return K1.default.inverse(K1.default.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}`;let b=this.userInput.slice(0,this._cursor),[x,...Z]=this.userInput.slice(this._cursor);return`${b}${K1.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??g9;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=f9(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=h9(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#b]?.value,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}}class Ub extends P1{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 P1{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(r(),1);import h from"node:process";var t=l(y1(),1);function m9(){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=m9(),u9=()=>process.env.CI==="true";var S=(b,x)=>i1?b:x,p9=S("◆","*"),Rb=S("■","x"),Mb=S("▲","x"),a1=S("◇","o"),d9=S("┌","T"),C=S("│","|"),Sb=S("└","—"),H0=S("┐","T"),U0=S("┘","—"),l9=S("●",">"),Ob=S("○"," "),O0=S("◻","[•]"),T0=S("◼","[+]"),D0=S("◻","[ ]"),k0=S("▪","•"),R0=S("─","-"),M0=S("╮","+"),S0=S("├","+"),I0=S("╯","+"),N0=S("╰","+"),W0=S("╭","+"),o9=S("●","•"),n9=S("◆","*"),c9=S("▲","!"),i9=S("■","x"),r9=(b)=>{switch(b){case"initial":case"active":return P.default.cyan(p9);case"cancel":return P.default.red(Rb);case"error":return P.default.yellow(Mb);case"submit":return P.default.green(a1)}},a9=(b)=>{switch(b){case"initial":case"active":return P.default.cyan(C);case"cancel":return P.default.red(C);case"error":return P.default.yellow(C);case"submit":return P.default.green(C)}},s9=(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,e9=(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,H1=/\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,U1=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,b3=/\p{M}+/gu,x3={limit:1/0,ellipsis:""},Ib=(b,x={},Z={})=>{let J=x.limit??1/0,Y=x.ellipsis??"",Q=x?.ellipsisWidth??(Y?Ib(Y,x3,Z).width:0),z=Z.ansiWidth??0,q=Z.controlWidth??0,K=Z.tabWidth??8,T=Z.ambiguousWidth??1,k=Z.emojiWidth??2,U=Z.fullWidthWidth??2,V=Z.regularWidth??1,W=Z.wideWidth??2,G=0,X=0,w=b.length,H=0,L=!1,O=w,R=Math.max(0,J-Q),M=0,I=0,j=0,$=0;b:for(;;){if(I>M||X>=w&&X>G){let F=b.slice(M,I)||b.slice(G,X);H=0;for(let A of F.replaceAll(b3,"")){let y=A.codePointAt(0)||0;if(t9(y)?$=U:e9(y)?$=W:T!==V&&s9(y)?$=T:$=V,j+$>R&&(O=Math.min(O,Math.max(M,G)+H)),j+$>J){L=!0;break b}H+=A.length,j+=$}M=I=0}if(X>=w)break;if(U1.lastIndex=X,U1.test(b)){if(H=U1.lastIndex-X,$=H*V,j+$>R&&(O=Math.min(O,X+Math.floor((R-j)/V))),j+$>J){L=!0;break}j+=$,M=G,I=X,X=G=U1.lastIndex;continue}if(o1.lastIndex=X,o1.test(b)){if(j+z>R&&(O=Math.min(O,X)),j+z>J){L=!0;break}j+=z,M=G,I=X,X=G=o1.lastIndex;continue}if(V1.lastIndex=X,V1.test(b)){if(H=V1.lastIndex-X,$=H*q,j+$>R&&(O=Math.min(O,X+Math.floor((R-j)/q))),j+$>J){L=!0;break}j+=$,M=G,I=X,X=G=V1.lastIndex;continue}if(H1.lastIndex=X,H1.test(b)){if(H=H1.lastIndex-X,$=H*K,j+$>R&&(O=Math.min(O,X+Math.floor((R-j)/K))),j+$>J){L=!0;break}j+=$,M=G,I=X,X=G=H1.lastIndex;continue}if(n1.lastIndex=X,n1.test(b)){if(j+k>R&&(O=Math.min(O,X)),j+k>J){L=!0;break}j+=k,M=G,I=X,X=G=n1.lastIndex;continue}X+=1}return{width:L?R:j,index:L?O:w,truncated:L,ellipsed:L&&J>=Q}},Z3={limit:1/0,ellipsis:"",ellipsisWidth:0},e=(b,x={})=>Ib(b,Z3,x).width,T1="\x1B",Nb="›",J3=39,s1="\x07",Wb="[",Y3="]",vb="m",t1=`${Y3}8;;`,Tb=new RegExp(`(?:\\${Wb}(?<code>\\d+)m|\\${t1}(?<uri>.*)${s1})`,"y"),Q3=(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)=>`${T1}${Wb}${b}${vb}`,kb=(b)=>`${T1}${t1}${b}${s1}`,z3=(b)=>b.map((x)=>e(x)),c1=(b,x,Z)=>{let J=x[Symbol.iterator](),Y=!1,Q=!1,z=b.at(-1),q=z===void 0?0:e(z),K=J.next(),T=J.next(),k=0;for(;!K.done;){let U=K.value,V=e(U);q+V<=Z?b[b.length-1]+=U:(b.push(U),q=0),(U===T1||U===Nb)&&(Y=!0,Q=x.startsWith(t1,k+1)),Y?Q?U===s1&&(Y=!1,Q=!1):U===vb&&(Y=!1):(q+=V,q===Z&&!T.done&&(b.push(""),q=0)),K=T,T=J.next(),k+=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&&!(e(x[Z-1])>0);)Z--;return Z===x.length?b:x.slice(0,Z).join(" ")+x.slice(Z).join("")},X3=(b,x,Z={})=>{if(Z.trim!==!1&&b.trim()==="")return"";let J="",Y,Q,z=b.split(" "),q=z3(z),K=[""];for(let[G,X]of z.entries()){Z.trim!==!1&&(K[K.length-1]=(K.at(-1)??"").trimStart());let w=e(K.at(-1)??"");if(G!==0&&(w>=x&&(Z.wordWrap===!1||Z.trim===!1)&&(K.push(""),w=0),(w>0||Z.trim===!1)&&(K[K.length-1]+=" ",w++)),Z.hard&&q[G]>x){let H=x-w,L=1+Math.floor((q[G]-H-1)/x);Math.floor((q[G]-1)/x)<L&&K.push(""),c1(K,X,x);continue}if(w+q[G]>x&&w>0&&q[G]>0){if(Z.wordWrap===!1&&w<x){c1(K,X,x);continue}K.push("")}if(w+q[G]>x&&Z.wordWrap===!1){c1(K,X,x);continue}K[K.length-1]+=X}Z.trim!==!1&&(K=K.map((G)=>q3(G)));let T=K.join(`
`),k=T[Symbol.iterator](),U=k.next(),V=k.next(),W=0;for(;!U.done;){let G=U.value,X=V.value;if(J+=G,G===T1||G===Nb){Tb.lastIndex=W+1;let H=Tb.exec(T)?.groups;if(H?.code!==void 0){let L=Number.parseFloat(H.code);Y=L===J3?void 0:L}else H?.uri!==void 0&&(Q=H.uri.length===0?void 0:H.uri)}let w=Y?Q3(Y):void 0;X===`
`?(Q&&(J+=kb("")),Y&&w&&(J+=Db(w))):G===`
`&&(Y&&w&&(J+=Db(Y)),Q&&(J+=kb(Q))),W+=G.length,U=V,V=k.next()}return J};function r1(b,x,Z){return String(b).normalize().replaceAll(`\r
`,`
`).split(`
`).map((J)=>X3(J,x,Z)).join(`
`)}var G3=(b,x,Z,J,Y)=>{let Q=x,z=0;for(let q=Z;q<J;q++){let K=b[q];if(Q=Q-K.length,z++,Q<=Y)break}return{lineCount:Q,removals:z}},B3=(b)=>{let{cursor:x,options:Z,style:J}=b,Y=b.output??process.stdout,Q=w1(Y),z=b.columnPadding??0,q=b.rowPadding??4,K=Q-z,T=d1(Y),k=P.default.dim("..."),U=b.maxItems??Number.POSITIVE_INFINITY,V=Math.max(T-q,0),W=Math.max(Math.min(U,V),5),G=0;x>=W-3&&(G=Math.max(Math.min(x-W+3,Z.length-W),0));let X=W<Z.length&&G>0,w=W<Z.length&&G+W<Z.length,H=Math.min(G+W,Z.length),L=[],O=0;X&&O++,w&&O++;let R=G+(X?1:0),M=H-(w?1:0);for(let j=R;j<M;j++){let $=r1(J(Z[j],j===x),K,{hard:!0,trim:!1}).split(`
`);L.push($),O+=$.length}if(O>V){let j=0,$=0,F=O,A=x-R,y=(d,N)=>G3(L,F,d,N,V);X?({lineCount:F,removals:j}=y(0,A),F>V&&({lineCount:F,removals:$}=y(A+1,L.length))):({lineCount:F,removals:$}=y(A+1,L.length),F>V&&({lineCount:F,removals:j}=y(0,A))),j>0&&(X=!0,L.splice(0,j)),$>0&&(w=!0,L.splice(L.length-$,$))}let I=[];X&&I.push(k);for(let j of L)for(let $ of j)I.push($);return w&&I.push(k),I};var D={message:(b=[],{symbol:x=P.default.gray(C),secondarySymbol:Z=P.default.gray(C),output:J=process.stdout,spacing:Y=1,withGuide:Q}={})=>{let z=[],q=(Q??u.withGuide)!==!1,K=q?Z:"",T=q?`${x} `:"",k=q?`${Z} `:"";for(let V=0;V<Y;V++)z.push(K);let U=Array.isArray(b)?b:b.split(`
`);if(U.length>0){let[V,...W]=U;V.length>0?z.push(`${T}${V}`):z.push(q?x:"");for(let G of W)G.length>0?z.push(`${k}${G}`):z.push(q?Z:"")}J.write(`${z.join(`
`)}
`)},info:(b,x)=>{D.message(b,{...x,symbol:P.default.blue(o9)})},success:(b,x)=>{D.message(b,{...x,symbol:P.default.green(n9)})},step:(b,x)=>{D.message(b,{...x,symbol:P.default.green(a1)})},warn:(b,x)=>{D.message(b,{...x,symbol:P.default.yellow(c9)})},warning:(b,x)=>{D.warn(b,x)},error:(b,x)=>{D.message(b,{...x,symbol:P.default.red(i9)})}};var _b=(b="",x)=>{(x?.output??process.stdout).write(`${P.default.gray(d9)} ${b}
`)},Fb=(b="",x)=>{(x?.output??process.stdout).write(`${P.default.gray(C)}
${P.default.gray(Sb)} ${b}
`)};var K3=P.default.magenta,D1=({indicator:b="dots",onCancel:x,output:Z=process.stdout,cancelMessage:J,errorMessage:Y,frames:Q=i1?["◒","◐","◓","◑"]:["•","o","O","0"],delay:z=i1?80:120,signal:q,...K}={})=>{let T=u9(),k,U,V=!1,W=!1,G="",X,w=performance.now(),H=w1(Z),L=K?.styleFrame??K3,O=(N)=>{let E=N>1?Y??u.messages.error:J??u.messages.cancel;W=N===1,V&&(d(E,N),W&&typeof x=="function"&&x())},R=()=>O(2),M=()=>O(1),I=()=>{process.on("uncaughtExceptionMonitor",R),process.on("unhandledRejection",R),process.on("SIGINT",M),process.on("SIGTERM",M),process.on("exit",O),q&&q.addEventListener("abort",M)},j=()=>{process.removeListener("uncaughtExceptionMonitor",R),process.removeListener("unhandledRejection",R),process.removeListener("SIGINT",M),process.removeListener("SIGTERM",M),process.removeListener("exit",O),q&&q.removeEventListener("abort",M)},$=()=>{if(X===void 0)return;T&&Z.write(`
`);let N=r1(X,H,{hard:!0,trim:!1}).split(`
`);N.length>1&&Z.write(t.cursor.up(N.length-1)),Z.write(t.cursor.to(0)),Z.write(t.erase.down())},F=(N)=>N.replace(/\.+$/,""),A=(N)=>{let E=(performance.now()-N)/1000,f=Math.floor(E/60),m=Math.floor(E%60);return f>0?`[${f}m ${m}s]`:`[${m}s]`},y=(N="")=>{V=!0,k=Vb({output:Z}),G=F(N),w=performance.now(),Z.write(`${P.default.gray(C)}
`);let E=0,f=0;I(),U=setInterval(()=>{if(T&&G===X)return;$(),X=G;let m=L(Q[E]),Y1;if(T)Y1=`${m} ${G}...`;else if(b==="timer")Y1=`${m} ${G} ${A(w)}`;else{let G9=".".repeat(Math.floor(f)).slice(0,3);Y1=`${m} ${G}${G9}`}let X9=r1(Y1,H,{hard:!0,trim:!1});Z.write(X9),E=E+1<Q.length?E+1:0,f=f<4?f+0.125:0},z)},d=(N="",E=0,f=!1)=>{if(!V)return;V=!1,clearInterval(U),$();let m=E===0?P.default.green(a1):E===1?P.default.red(Rb):P.default.red(Mb);G=N??G,f||(b==="timer"?Z.write(`${m} ${G} ${A(w)}
`):Z.write(`${m} ${G}
`)),j(),k()};return{start:y,stop:(N="")=>d(N,0),message:(N="")=>{G=F(N??G)},cancel:(N="")=>d(N,1),error:(N="")=>d(N,2),clear:()=>d("",0,!0),get isCancelled(){return W}}},v0={light:S("─","-"),heavy:S("━","="),block:S("█","#")};var O1=(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(Ob)} ${O1(Y,P.default.gray)}${Z.hint?` ${P.default.dim(`(${Z.hint??"disabled"})`)}`:""}`;case"selected":return`${O1(Y,P.default.dim)}`;case"active":return`${P.default.green(l9)} ${Y}${Z.hint?` ${P.default.dim(`(${Z.hint})`)}`:""}`;case"cancelled":return`${O1(Y,(Q)=>P.default.strikethrough(P.default.dim(Q)))}`;default:return`${P.default.dim(Ob)} ${O1(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=`${r9(this.state)} `,J=`${a9(this.state)} `,Y=L1(b.output,b.message,J,Z),Q=`${P.default.gray(C)}
${Y}
`;switch(this.state){case"submit":{let z=`${P.default.gray(C)} `,q=L1(b.output,x(this.options[this.cursor],"selected"),z);return`${Q}${q}`}case"cancel":{let z=`${P.default.gray(C)} `,q=L1(b.output,x(this.options[this.cursor],"cancelled"),z);return`${Q}${q}
${P.default.gray(C)}`}default:{let z=`${P.default.cyan(C)} `,q=Q.split(`
`).length;return`${Q}${z}${B3({output:b.output,cursor:this.cursor,options:this.options,maxItems:b.maxItems,columnPadding:z.length,rowPadding:q+2,style:(K,T)=>x(K,K.disabled?"disabled":T?"active":"inactive")}).join(`
${z}`)}
${P.default.cyan(Sb)}
`}}}}).prompt()};var _0=`${P.default.gray(C)} `;var B=l(r(),1);import{spawn as ob}from"child_process";import{existsSync as $3,mkdirSync as w3,readFileSync as yb,writeFileSync as L3,statSync as P3}from"fs";import{join as R1}from"path";import{homedir as V3}from"os";var S1="OpenRouterTeam/spawn",g=`https://raw.githubusercontent.com/${S1}/main`,I1=R1(process.env.XDG_CACHE_HOME||R1(V3(),".cache"),"spawn"),M1=R1(I1,"manifest.json"),H3=3600,U3=1e4;function O3(){try{let b=P3(M1);return(Date.now()-b.mtimeMs)/1000}catch(b){return 1/0}}function k1(b,x){let Z=x instanceof Error?x.message:String(x);console.error(x?`${b}: ${Z}`:b)}function Cb(){try{return JSON.parse(yb(M1,"utf-8"))}catch(b){return k1(`Failed to read cache from ${M1}`,b),null}}function T3(b){w3(I1,{recursive:!0}),L3(M1,JSON.stringify(b,null,2),"utf-8")}function Ab(b){return b&&b.agents&&b.clouds&&b.matrix}async function D3(){try{let b=await fetch(`${g}/manifest.json`,{signal:AbortSignal.timeout(U3)});if(!b.ok)return k1(`Failed to fetch manifest from GitHub: HTTP ${b.status} ${b.statusText}`),null;let x=await b.json();if(!Ab(x))return k1("Manifest structure validation failed: missing required fields (agents, clouds, or matrix)"),null;return x}catch(b){return k1("Network error fetching manifest",b),null}}var o=null;function k3(){if(O3()>=H3)return null;return Cb()}function R3(b){return T3(b),o=b,b}function M3(){try{let b=R1(process.cwd(),"manifest.json");if($3(b)){let x=JSON.parse(yb(b,"utf-8"));if(Ab(x))return x}}catch(b){}return null}async function Eb(b=!1){if(o&&!b)return o;let x=M3();if(x)return o=x,x;if(!b){let Y=k3();if(Y)return o=Y,Y}let Z=await D3();if(Z)return R3(Z);let J=Cb();if(J)return o=J,J;throw Error("Cannot load manifest. Check your internet connection.")}function b1(b){return Object.keys(b.agents)}function x1(b){return Object.keys(b.clouds)}function n(b,x,Z){return b.matrix[`${x}/${Z}`]??"missing"}function hb(b){let x=0;for(let Z of Object.values(b.matrix))if(Z==="implemented")x++;return x}var N1={name:"@openrouter/spawn",version:"0.2.10",type:"module",bin:{spawn:"cli.js"},scripts:{dev:"bun run src/index.ts",build:"bun build src/index.ts --outfile cli.js --target node --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 I3=/^[a-z0-9_-]+$/;function W1(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(!I3.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 gb(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"},{pattern:/curl.*\|\s*(bash|sh)/,description:"nested curl|bash execution"},{pattern:/wget.*\|\s*(bash|sh)/,description:"nested wget|bash execution"}];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 fb(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=N1.version,N3=1e4;function Z1(b){return b&&typeof b==="object"&&"message"in b?String(b.message):String(b)}function mb(){console.error(B.default.red("Operation cancelled.")),process.exit(0)}function ub(b,x,Z){return new Promise((J,Y)=>{let Q=ob("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(B.default.red("Failed")),J}}async function J1(){return W3("Loading manifest...",Eb)}function nb(b,x,Z){if(!b||b.trim()==="")D.error(`${x} is required but was not provided`),D.info(`Run ${B.default.cyan(Z)} to see all available ${x.toLowerCase()}s.`),process.exit(1)}function pb(b,x){return b.map((Z)=>({value:Z,label:x[Z].name,hint:x[Z].description}))}function bb(b,x){return x1(b).filter((Z)=>n(b,Z,x)==="implemented")}function v3(b,x){if(!b.agents[x])D.error(`Unknown agent: ${B.default.bold(x)}`),D.info(`Run ${B.default.cyan("spawn agents")} to see available agents.`),process.exit(1)}async function cb(b){try{W1(b,"Agent name")}catch(Z){D.error(Z1(Z)),process.exit(1)}nb(b,"Agent name","spawn agents");let x=await J1();return v3(x,b),[x,b]}function _3(b,x){if(!b.clouds[x])D.error(`Unknown cloud: ${B.default.bold(x)}`),D.info(`Run ${B.default.cyan("spawn clouds")} to see available clouds.`),process.exit(1)}function F3(b,x,Z){if(n(b,x,Z)!=="implemented"){let Y=b.agents[Z].name,Q=b.clouds[x].name;D.error(`${Y} on ${Q} is not yet implemented.`);let z=bb(b,Z);if(z.length>0){let q=z.slice(0,3).map((K)=>`spawn ${Z} ${K}`);D.info(`${Y} is available on ${z.length} cloud${z.length>1?"s":""}. Try one of these instead:`);for(let K of q)D.info(` ${B.default.cyan(K)}`);if(z.length>3)D.info(`Run ${B.default.cyan(`spawn ${Z}`)} to see all ${z.length} options.`)}else D.info("This agent has no implemented cloud providers yet."),D.info(`Run ${B.default.cyan("spawn list")} to see the full availability matrix.`);process.exit(1)}}async function ib(){_b(B.default.inverse(` spawn v${v1} `));let b=await J1(),x=b1(b),Z=await e1({message:"Select an agent",options:pb(x,b.agents)});if(s(Z))mb();let J=bb(b,Z);if(J.length===0)D.error(`No clouds available for ${b.agents[Z].name}`),D.info("This agent has no implemented cloud providers yet."),D.info(`Run ${B.default.cyan("spawn list")} to see the full availability matrix.`),process.exit(1);let Y=await e1({message:"Select a cloud provider",options:pb(J,b.clouds)});if(s(Y))mb();let Q=b.agents[Z].name,z=b.clouds[Y].name;D.step(`Launching ${B.default.bold(Q)} on ${B.default.bold(z)}`),D.info(`Next time, run directly: ${B.default.cyan(`spawn ${Z} ${Y}`)}`),Fb("Handing off to spawn script..."),await ab(Y,Z)}async function rb(b,x,Z){try{if(W1(b,"Agent name"),W1(x,"Cloud name"),Z)fb(Z)}catch(q){D.error(Z1(q)),process.exit(1)}nb(x,"Cloud name","spawn clouds");let[J,Y]=await cb(b);_3(J,x),F3(J,x,Y);let Q=J.agents[Y].name,z=J.clouds[x].name;if(Z)D.step(`Launching ${B.default.bold(Q)} on ${B.default.bold(z)} with prompt...`);else D.step(`Launching ${B.default.bold(Q)} on ${B.default.bold(z)}...`);await ab(x,Y,Z)}function db(b){return b===404?"not found":`HTTP ${b}`}async function y3(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(B.default.red("Download failed")),C3(b,x,J.status,Y.status),process.exit(1);return Z.stop("Script downloaded (fallback)"),Y.text()}catch(J){throw Z.stop(B.default.red("Download failed")),J}}function C3(b,x,Z,J){if(D.error("Script download failed"),console.error(`
Primary source (${b}): ${db(Z)}`),console.error(`Fallback source (${x}): ${db(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: ${B.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 ab(b,x,Z){let J=`https://openrouter.ai/lab/spawn/${b}/${x}.sh`,Y=`${g}/${b}/${x}.sh`;try{let Q=await y3(J,Y);await A3(Q,Z)}catch(Q){D.error("Failed to download or execute spawn script"),console.error(`
Error:`,Z1(Q)),console.error(`
Troubleshooting:`),console.error(` 1. Verify this combination exists: ${B.default.cyan("spawn list")}`),console.error(" 2. Check your internet connection"),console.error(` 3. Try accessing the script directly: ${Y}`),process.exit(1)}}function A3(b,x){gb(b);let Z={...process.env};if(x)Z.SPAWN_PROMPT=x,Z.SPAWN_MODE="non-interactive";return new Promise((J,Y)=>{let Q=ob("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 E3=16,h3=10,sb=2,c=18;function lb(b,x){let Z=x;for(let J of b){let Y=J.length+sb;if(Y>Z)Z=Y}return Z}function g3(b,x,Z,J){let Y="".padEnd(Z);for(let Q of b)Y+=B.default.bold(x.clouds[Q].name.padEnd(J));return Y}function f3(b,x,Z){let J="".padEnd(x);for(let Y of b)J+=B.default.dim("-".repeat(Z-sb)+" ");return J}function m3(b,x,Z,J,Y){let Q=B.default.bold(Z.agents[b].name.padEnd(J));for(let z of x){let q=n(Z,z,b),K=q==="implemented"?" +":" -",T=q==="implemented"?B.default.green:B.default.dim;Q+=T(K.padEnd(Y))}return Q}async function tb(){let b=await J1(),x=b1(b),Z=x1(b),J=lb(x.map((q)=>b.agents[q].name),E3),Y=lb(Z.map((q)=>b.clouds[q].name),h3);console.log(),console.log(g3(Z,b,J,Y)),console.log(f3(Z,J,Y));for(let q of x)console.log(m3(q,Z,b,J,Y));let Q=hb(b),z=x.length*Z.length;console.log(),console.log(`${B.default.green("+")} implemented ${B.default.dim("-")} not yet available`),console.log(B.default.green(`${Q}/${z} combinations implemented`)),console.log()}function u3(b,x){return b1(b).filter((Z)=>n(b,x,Z)==="implemented")}async function eb(){let b=await J1();console.log(),console.log(B.default.bold("Agents")),console.log();for(let x of b1(b)){let Z=b.agents[x],J=bb(b,x).length;console.log(` ${B.default.green(x.padEnd(c))} ${Z.name.padEnd(c)} ${B.default.dim(`${J} clouds ${Z.description}`)}`)}console.log(),console.log(B.default.dim(` Run ${B.default.cyan("spawn <agent>")} for details, or ${B.default.cyan("spawn <agent> <cloud>")} to launch.`)),console.log()}async function b9(){let b=await J1();console.log(),console.log(B.default.bold("Cloud Providers")),console.log();for(let x of x1(b)){let Z=b.clouds[x],J=u3(b,x).length;console.log(` ${B.default.green(x.padEnd(c))} ${Z.name.padEnd(c)} ${B.default.dim(`${J} agents ${Z.description}`)}`)}console.log(),console.log(B.default.dim(` Run ${B.default.cyan("spawn <agent> <cloud>")} to launch.`)),console.log()}async function x9(b){let[x,Z]=await cb(b),J=x.agents[Z];console.log(),console.log(`${B.default.bold(J.name)} ${B.default.dim("--")} ${J.description}`),console.log(),console.log(B.default.bold("Available clouds:")),console.log();let Y=!1;for(let Q of x1(x))if(n(x,Q,Z)==="implemented"){let q=x.clouds[Q];console.log(` ${B.default.green(Q.padEnd(c))} ${q.name.padEnd(c)} ${B.default.dim("spawn "+Z+" "+Q)}`),Y=!0}if(!Y)console.log(B.default.dim(" No implemented clouds yet."));console.log()}function p3(b){return b("./improve.sh")&&b("./manifest.json")}async function d3(b,x){let{join:Z}=await import("path"),{execSync:J}=await import("child_process");if(x(Z(b,".git"))){D.step("Updating spawn repo...");try{J("git pull --ff-only",{cwd:b,stdio:"pipe"})}catch(Y){console.error("Warning: Failed to update repo:",Z1(Y))}}else D.step("Cloning spawn repo..."),J(`git clone https://github.com/${S1}.git ${b}`,{stdio:"inherit"})}async function Z9(b){let{existsSync:x}=await import("fs");if(p3(x))return ub("improve.sh",b,".");let{join:Z}=await import("path"),J=Z(I1,"repo");return await d3(J,x),ub("improve.sh",b,J)}async function J9(){let b=D1();b.start("Checking for updates...");try{let x=await fetch(`${g}/cli/package.json`,{signal:AbortSignal.timeout(N3)});if(!x.ok)throw Error("fetch failed");let J=(await x.json()).version;if(J===v1){b.stop(`Already up to date ${B.default.dim(`(v${v1})`)}`);return}b.message(`Found v${J}...`);let Y=await fetch(`${g}/cli/install.sh`);if(!Y.ok)throw Error("fetch install.sh failed");let Q=await Y.text();b.stop(`Update available: v${v1} -> v${J}`),D.info("Run this to update:"),console.log(),console.log(` ${B.default.cyan(`curl -fsSL ${g}/cli/install.sh | bash`)}`),console.log()}catch(x){b.stop(B.default.red("Failed to check for updates")),console.error("Error:",Z1(x))}}function xb(){console.log(`
${B.default.bold("spawn")} -- Launch any AI coding agent on any cloud
${B.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
${B.default.bold("EXAMPLES")}
spawn ${B.default.dim("# Pick interactively")}
spawn claude sprite ${B.default.dim("# Launch Claude Code on Sprite")}
spawn aider hetzner ${B.default.dim("# Launch Aider on Hetzner Cloud")}
spawn claude sprite --prompt "Fix all linter errors"
${B.default.dim("# Execute Claude with prompt and exit")}
spawn aider sprite -p "Add tests" ${B.default.dim("# Short form of --prompt")}
spawn claude sprite --prompt-file instructions.txt
${B.default.dim("# Read prompt from file")}
spawn claude ${B.default.dim("# Show which clouds support Claude")}
spawn list ${B.default.dim("# See the full agent x cloud matrix")}
${B.default.bold("AUTHENTICATION")}
All agents use OpenRouter for LLM access. Get your API key at:
${B.default.cyan("https://openrouter.ai/settings/keys")}
For non-interactive use, set environment variables:
${B.default.dim("OPENROUTER_API_KEY")}=sk-or-v1-... spawn claude sprite
Each cloud provider has its own auth requirements.
Run ${B.default.cyan("spawn <agent> <cloud>")} to see specific instructions.
${B.default.bold("INSTALL")}
curl -fsSL ${g}/cli/install.sh | bash
${B.default.bold("TROUBLESHOOTING")}
${B.default.dim("*")} Script not found: Run ${B.default.cyan("spawn list")} to verify the combination exists
${B.default.dim("*")} Missing credentials: Check cloud-specific READMEs in the repo
${B.default.dim("*")} Update issues: Try ${B.default.cyan("spawn update")} or reinstall manually
${B.default.dim("*")} Garbled unicode: Set ${B.default.cyan("SPAWN_NO_UNICODE=1")} for ASCII-only output
${B.default.bold("MORE INFO")}
Repository: https://github.com/${S1}
OpenRouter: https://openrouter.ai
`)}var Y9={name:"@openrouter/spawn",version:"0.2.10",type:"module",bin:{spawn:"cli.js"},scripts:{dev:"bun run src/index.ts",build:"bun build src/index.ts --outfile cli.js --target node --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 v=l(r(),1);import{execSync as o3}from"child_process";var Q9=N1.version,n3={execSync:(b,x)=>o3(b,x)},c3=5000;async function i3(){try{let b=await fetch(`${g}/cli/package.json`,{signal:AbortSignal.timeout(c3)});if(!b.ok)return null;return(await b.json()).version}catch{return null}}function r3(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 a3(b){console.error(),console.error(v.default.yellow("+------------------------------------------------------------+")),console.error(v.default.yellow("| ")+v.default.bold(`Update available: v${Q9} -> `)+v.default.green(v.default.bold(`v${b}`))+v.default.yellow(" |")),console.error(v.default.yellow("| ")+v.default.bold("Updating automatically...")+v.default.yellow(" |")),console.error(v.default.yellow("+------------------------------------------------------------+")),console.error();try{n3.execSync(`curl -fsSL ${g}/cli/install.sh | bash`,{stdio:"inherit",shell:"/bin/bash"}),console.error(),console.error(v.default.green(v.default.bold("✓ Updated successfully!"))),console.error(v.default.dim(" Restart your command to use the new version.")),console.error(),process.exit(0)}catch(x){console.error(),console.error(v.default.red(v.default.bold("✗ 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 z9(){if(process.env.SPAWN_NO_UPDATE_CHECK==="1")return;try{let b=await i3();if(!b)return;if(r3(Q9,b))a3(b)}catch{}}var s3=Y9.version;function t3(){return process.stdin.isTTY&&process.stdout.isTTY}function e3(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 q9(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 b0(b,x,Z){if(x)await rb(b,x,Z);else await x9(b)}async function x0(){let b=process.argv.slice(2);await z9();let[x,Z]=q9(b,["--prompt","-p"],"prompt",'spawn <agent> <cloud> --prompt "your prompt here"'),[J,Y]=q9(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:z}=await import("fs");try{x=z(J,"utf-8")}catch(q){let K=q&&typeof q==="object"&&"message"in q?q.message:String(q);console.error(`Error reading prompt file '${J}': ${K}`),console.error(`
Make sure the file exists and is readable.`),process.exit(1)}}let Q=Z[0];try{if(!Q){if(t3())await ib();else xb();return}switch(Q){case"help":case"--help":case"-h":xb();break;case"version":case"--version":case"-v":case"-V":console.log(`spawn v${s3}`);break;case"list":case"ls":await tb();break;case"agents":await eb();break;case"clouds":await b9();break;case"improve":await Z9(Z.slice(1));break;case"update":await J9();break;default:await b0(Z[0],Z[1],x);break}}catch(z){e3(z)}}x0();