tako-cli 0.2.53 → 0.2.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +4 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -619,15 +619,15 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
619
619
  `)}patchConsole(){if(this.options.debug)return;this.restoreConsole=s7((Q,E)=>{if(Q==="stdout")this.writeToStdout(E);if(Q==="stderr"){if(!E.startsWith("The above error occurred"))this.writeToStderr(E)}})}initKittyKeyboard(){if(!this.options.kittyKeyboard)return;let Q=this.options.kittyKeyboard,E=Q.mode??"auto";if(E==="disabled"||!this.options.stdin.isTTY||!this.options.stdout.isTTY)return;let g=Q.flags??["disambiguateEscapeCodes"];if(E==="enabled"){this.enableKittyProtocol(g);return}let F=A4.env.TERM??"",N=A4.env.TERM_PROGRAM??"",J="KITTY_WINDOW_ID"in A4.env||F==="xterm-kitty"||N==="WezTerm"||N==="ghostty";if(!tD&&J)this.confirmKittySupport(g)}confirmKittySupport(Q){let{stdin:E,stdout:g}=this.options,F=[],N=()=>{this.cancelKittyDetection=void 0,clearTimeout(R),E.removeListener("data",J);let Y=kz(F);if(F=[],Y.length>0)E.unshift(Buffer.from(Y))},J=(Y)=>{let O=typeof Y==="string"?Buffer.from(Y):Y;for(let k of O)F.push(k);if(Sz(F)){if(N(),!this.isUnmounted)this.enableKittyProtocol(Q)}};E.on("data",J);let R=setTimeout(N,200);this.cancelKittyDetection=N,g.write("\x1B[?u")}enableKittyProtocol(Q){this.options.stdout.write(`\x1B[>${UK(Q)}u`),this.kittyProtocolEnabled=!0}}var yz=(Q,E)=>{let g={stdout:X5.stdout,stdin:X5.stdin,stderr:X5.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,maxFps:30,incrementalRendering:!1,concurrent:!1,...Vz(E)},F=Tz(g.stdout,()=>new Z5(g),g.concurrent??!1);return F.render(Q),{rerender:F.render,unmount(){F.unmount()},waitUntilExit:F.waitUntilExit,cleanup:()=>ew.delete(g.stdout),clear:F.clear}},k1=yz,Vz=(Q={})=>{if(Q instanceof $z)return{stdout:Q,stdin:X5.stdin};return Q},Tz=(Q,E,g)=>{let F=ew.get(Q);if(!F)F=E(),ew.set(Q,F);else if(F.isConcurrent!==g)console.warn(`Warning: render() was called with concurrent: ${g}, but the existing instance for this stdout uses concurrent: ${F.isConcurrent}. The concurrent option only takes effect on the first render. Call unmount() first if you need to change the rendering mode.`);return F};var Pz=SB(_9(),1);var u5=SB(pQ(),1);var MK=SB(pQ(),1);var vz=SB(pQ(),1);var mz=SB(pQ(),1);var tJ=SB(pQ(),1);import{Buffer as _z}from"buffer";var jz=/^(?:\x1b)([a-zA-Z0-9])$/,hz=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,WK={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},KK=[...Object.values(WK),"backspace"],bz=(Q)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(Q)},fz=(Q)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(Q)},YK=/^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/,xz=/^\x1b\[(\d+);(\d+):(\d+)([A-Za-z~])$/,pz={A:"up",B:"down",C:"right",D:"left",E:"clear",F:"end",H:"home",P:"f1",Q:"f2",R:"f3",S:"f4"},dz={2:"insert",3:"delete",5:"pageup",6:"pagedown",7:"home",8:"end",11:"f1",12:"f2",13:"f3",14:"f4",15:"f5",17:"f6",18:"f7",19:"f8",20:"f9",21:"f10",23:"f11",24:"f12"},RK={27:"escape",9:"tab",127:"delete",8:"backspace",57358:"capslock",57359:"scrolllock",57360:"numlock",57361:"printscreen",57362:"pause",57363:"menu",57376:"f13",57377:"f14",57378:"f15",57379:"f16",57380:"f17",57381:"f18",57382:"f19",57383:"f20",57384:"f21",57385:"f22",57386:"f23",57387:"f24",57388:"f25",57389:"f26",57390:"f27",57391:"f28",57392:"f29",57393:"f30",57394:"f31",57395:"f32",57396:"f33",57397:"f34",57398:"f35",57399:"kp0",57400:"kp1",57401:"kp2",57402:"kp3",57403:"kp4",57404:"kp5",57405:"kp6",57406:"kp7",57407:"kp8",57408:"kp9",57409:"kpdecimal",57410:"kpdivide",57411:"kpmultiply",57412:"kpsubtract",57413:"kpadd",57414:"kpenter",57415:"kpequal",57416:"kpseparator",57417:"kpleft",57418:"kpright",57419:"kpup",57420:"kpdown",57421:"kppageup",57422:"kppagedown",57423:"kphome",57424:"kpend",57425:"kpinsert",57426:"kpdelete",57427:"kpbegin",57428:"mediaplay",57429:"mediapause",57430:"mediaplaypause",57431:"mediareverse",57432:"mediastop",57433:"mediafastforward",57434:"mediarewind",57435:"mediatracknext",57436:"mediatrackprevious",57437:"mediarecord",57438:"lowervolume",57439:"raisevolume",57440:"mutevolume",57441:"leftshift",57442:"leftcontrol",57443:"leftalt",57444:"leftsuper",57445:"lefthyper",57446:"leftmeta",57447:"rightshift",57448:"rightcontrol",57449:"rightalt",57450:"rightsuper",57451:"righthyper",57452:"rightmeta",57453:"isoLevel3Shift",57454:"isoLevel5Shift"},ZK=(Q)=>Q>=0&&Q<=1114111&&!(Q>=55296&&Q<=57343),rJ=(Q)=>ZK(Q)?String.fromCodePoint(Q):"?";function XK(Q){if(Q===3)return"release";if(Q===2)return"repeat";return"press"}function uK(Q){return{ctrl:!!(Q&B2.ctrl),shift:!!(Q&B2.shift),meta:!!(Q&B2.meta),option:!!(Q&B2.alt),super:!!(Q&B2.super),hyper:!!(Q&B2.hyper),capsLock:!!(Q&B2.capsLock),numLock:!!(Q&B2.numLock)}}var iz=(Q)=>{let E=YK.exec(Q);if(!E)return null;let g=parseInt(E[1],10),F=E[2]?Math.max(0,parseInt(E[2],10)-1):0,N=E[3]?parseInt(E[3],10):1,J=E[4];if(!ZK(g))return null;let R;if(J)R=J.split(":").map((k)=>rJ(parseInt(k,10))).join("");let Y,O;if(g===32)Y="space",O=!0;else if(g===13)Y="return",O=!0;else if(RK[g])Y=RK[g],O=!1;else if(g>=1&&g<=26)Y=String.fromCodePoint(g+96),O=!1;else Y=rJ(g).toLowerCase(),O=!0;if(O&&!R)R=rJ(g);return{name:Y,...uK(F),eventType:XK(N),sequence:Q,raw:Q,isKittyProtocol:!0,isPrintable:O,text:R}},cz=(Q)=>{let E=xz.exec(Q);if(!E)return null;let g=parseInt(E[1],10),F=Math.max(0,parseInt(E[2],10)-1),N=parseInt(E[3],10),J=E[4],R=J==="~"?dz[g]:pz[J];if(!R)return null;return{name:R,...uK(F),eventType:XK(N),sequence:Q,raw:Q,isKittyProtocol:!0,isPrintable:!1}},lz=(Q="")=>{let E;if(_z.isBuffer(Q))if(Q[0]>127&&Q[1]===void 0)Q[0]-=128,Q="\x1B"+String(Q);else Q=String(Q);else if(Q!==void 0&&typeof Q!=="string")Q=String(Q);else if(!Q)Q="";let g=iz(Q);if(g)return g;let F=cz(Q);if(F)return F;if(YK.test(Q))return{name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:Q,raw:Q,isKittyProtocol:!0,isPrintable:!1};let N={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:Q,raw:Q};if(N.sequence=N.sequence||Q||N.name,Q==="\r"||Q==="\x1B\r")N.raw=void 0,N.name="return",N.option=Q.length===2;else if(Q===`
620
620
  `)N.name="enter";else if(Q==="\t")N.name="tab";else if(Q==="\b"||Q==="\x1B\b")N.name="backspace",N.meta=Q.charAt(0)==="\x1B";else if(Q==="\x7F"||Q==="\x1B\x7F")N.name="delete",N.meta=Q.charAt(0)==="\x1B";else if(Q==="\x1B"||Q==="\x1B\x1B")N.name="escape",N.meta=Q.length===2;else if(Q===" "||Q==="\x1B ")N.name="space",N.meta=Q.length===2;else if(Q.length===1&&Q<="\x1A")N.name=String.fromCharCode(Q.charCodeAt(0)+97-1),N.ctrl=!0;else if(Q.length===1&&Q>="0"&&Q<="9")N.name="number";else if(Q.length===1&&Q>="a"&&Q<="z")N.name=Q;else if(Q.length===1&&Q>="A"&&Q<="Z")N.name=Q.toLowerCase(),N.shift=!0;else if(E=jz.exec(Q))N.meta=!0,N.shift=/^[A-Z]$/.test(E[1]);else if(E=hz.exec(Q)){let J=[...Q];if(J[0]==="\x1B"&&J[1]==="\x1B")N.option=!0;let R=[E[1],E[2],E[4],E[6]].filter(Boolean).join(""),Y=(E[3]||E[5]||1)-1;N.ctrl=!!(Y&4),N.meta=!!(Y&10),N.shift=!!(Y&1),N.code=R,N.name=WK[R],N.shift=bz(R)||N.shift,N.ctrl=fz(R)||N.ctrl}return N},qK=lz;var OK=SB(pQ(),1);var az=()=>OK.useContext(H5),B4=az;var oz=(Q,E={})=>{let{stdin:g,setRawMode:F,internal_exitOnCtrlC:N,internal_eventEmitter:J}=B4();tJ.useEffect(()=>{if(E.isActive===!1)return;return F(!0),()=>{F(!1)}},[E.isActive,F]),tJ.useEffect(()=>{if(E.isActive===!1)return;let R=(Y)=>{let O=qK(Y),k={upArrow:O.name==="up",downArrow:O.name==="down",leftArrow:O.name==="left",rightArrow:O.name==="right",pageDown:O.name==="pagedown",pageUp:O.name==="pageup",home:O.name==="home",end:O.name==="end",return:O.name==="return",escape:O.name==="escape",ctrl:O.ctrl,shift:O.shift,tab:O.name==="tab",backspace:O.name==="backspace",delete:O.name==="delete",meta:O.meta||O.name==="escape"||O.option,super:O.super??!1,hyper:O.hyper??!1,capsLock:O.capsLock??!1,numLock:O.numLock??!1,eventType:O.eventType},i;if(O.isKittyProtocol)if(O.isPrintable)i=O.text??O.name;else if(O.ctrl&&O.name.length===1)i=O.name;else i="";else if(O.ctrl)i=O.name;else i=O.sequence;if(!O.isKittyProtocol&&KK.includes(O.name))i="";if(i.startsWith("\x1B"))i=i.slice(1);if(i.length===1&&typeof i[0]==="string"&&/[A-Z]/.test(i[0]))k.shift=!0;if(!(i==="c"&&k.ctrl)||!N)zg.batchedUpdates(()=>{Q(i,k)})};return J?.on("input",R),()=>{J?.removeListener("input",R)}},[E.isActive,g,N,Q])},I0=oz;var nz=SB(pQ(),1);var zK=SB(pQ(),1);var sz=()=>zK.useContext(U5),eJ=sz;var rz=SB(pQ(),1);var AM=SB(pQ(),1);var tz=SB(pQ(),1);var ez=SB(pQ(),1);var q5=SB(pQ(),1);var eC=SB(sI(),1);function BS({message:Q,defaultValue:E,onResult:g}){let[F,N]=SK.useState(E);return I0((J,R)=>{if(R.leftArrow||R.rightArrow||J==="h"||J==="l"){N((Y)=>!Y);return}if(J==="y"||J==="Y"){g(!0);return}if(J==="n"||J==="N"){g(!1);return}if(R.return){g(F);return}if(R.escape){g(!1);return}}),eC.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[eC.jsxDEV(PA,{gap:1,children:[eC.jsxDEV(f,{color:"yellow",bold:!0,children:"?"},void 0,!1,void 0,this),eC.jsxDEV(f,{bold:!0,children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this),eC.jsxDEV(PA,{marginTop:1,gap:3,children:[eC.jsxDEV(PA,{gap:1,children:eC.jsxDEV(f,{color:F?"green":void 0,bold:F,inverse:F,children:F?" Yes ":" Yes "},void 0,!1,void 0,this)},void 0,!1,void 0,this),eC.jsxDEV(PA,{gap:1,children:eC.jsxDEV(f,{color:!F?"red":void 0,bold:!F,inverse:!F,children:!F?" No ":" No "},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),eC.jsxDEV(PA,{marginTop:1,children:eC.jsxDEV(f,{dimColor:!0,children:"\u2190\u2192 \u5207\u6362 y/n \u5FEB\u6377\u9009\u62E9 Enter \u786E\u8BA4 Esc \u53D6\u6D88"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function O5(Q){return new Promise((E)=>{let g=null;g=k1(eC.jsxDEV(BS,{message:Q.message,defaultValue:Q.defaultValue??!0,onResult:(F)=>{g?.clear(),g?.unmount(),g=null,E(F)}},void 0,!1,void 0,this))})}K0();var _K=WS(RS(),".claude","settings.json"),KS=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];function YS(Q){if(Q.startsWith("ANTHROPIC_"))return!0;return KS.includes(Q)}async function ZS(){let Q=await import("fs/promises"),E;try{E=await Q.readFile(_K,"utf-8")}catch{return}let g;try{g=JSON.parse(E)}catch{return}let F=[];if(g.env&&typeof g.env==="object"){for(let J of Object.keys(g.env))if(YS(J))F.push(J),delete g.env[J];if(Object.keys(g.env).length===0)delete g.env}if(F.length===0)return;if(RQ.warn(tB("claudeCode.settingsDetected",{fields:F.join(", ")})),!await O5({message:tB("claudeCode.confirmClean"),defaultValue:!0})){RQ.info(tB("claudeCode.cleanSkipped"));return}await Q.writeFile(_K,JSON.stringify(g,null,2)+`
621
621
  `),RQ.success(tB("claudeCode.settingsCleaned"))}async function XS(Q){let{readClaudeAuth:E,writeClaudeAuth:g}=await Promise.resolve().then(() => (k5(),S5)),{getProviders:F,updateProvider:N}=await Promise.resolve().then(() => (Q2(),mK)),J=Q.authData?.credentials,R=Q.authData?.oauthAccount;if(!J){RQ.warn(tB("claudeCode.subscriptionMissingAuth"));return}let Y=await E(),O=Y.oauthAccount?.emailAddress;if(O&&Y.credentials){let n=(await F()).find((z)=>z.type==="claude-subscription"&&z.email===O);if(n){let z={credentials:Y.credentials,oauthAccount:Y.oauthAccount};if(JSON.stringify(n.authData)!==JSON.stringify(z))await N(n.id,{authData:z})}else if(O!==R?.emailAddress)RQ.warn(tB("claudeCode.unknownCurrentAccount",{email:O}))}await g({credentials:J,oauthAccount:R});let k=R?.emailAddress||"?";RQ.info(tB("claudeCode.subscriptionSwitched",{email:k}))}var uS={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(Q){let E={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"},g=Q.model?FM(Q.model):void 0;switch(Q.type){case"claude-subscription":return E;case"tako":return{...E,ANTHROPIC_BASE_URL:`${Q.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"anthropic":return{...E,ANTHROPIC_API_KEY:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"deepseek":return{...E,ANTHROPIC_BASE_URL:mL,ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"custom":return{...E,ANTHROPIC_BASE_URL:Q.baseUrl,ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};default:return E}},async setupConfigFiles(Q){if(Q.type==="tako"||Q.type==="custom")await ZS();if(Q.type==="claude-subscription")await XS(Q)},launchOptions:(Q)=>VS(Q)},qS=[{id:"skip-permissions",label:{en:"Skip Permissions",zh:"\u8DF3\u8FC7\u6743\u9650\u786E\u8BA4"},shortLabel:"Skip Perms",description:{en:"Auto-execute all operations without confirmation",zh:"\u5141\u8BB8\u81EA\u52A8\u6267\u884C\u6240\u6709\u64CD\u4F5C\uFF0C\u65E0\u9700\u786E\u8BA4"},flag:"--dangerously-skip-permissions",args:["--dangerously-skip-permissions"]},{id:"worktree",label:{en:"Git Worktree",zh:"Git Worktree"},shortLabel:"Worktree",description:{en:"Run in an isolated worktree",zh:"\u5728\u9694\u79BB\u7684 worktree \u4E2D\u8FD0\u884C"},flag:"--worktree",args:["--worktree"]}],OS=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],zS=["deepseek-v4-flash","deepseek-v4-pro"];function SS(Q){let E=Q.match(/^claude-(haiku|sonnet|opus)-(\d{1,2})-(\d{1,2})$/);if(E)return`${E[1].charAt(0).toUpperCase()+E[1].slice(1)} ${E[2]}.${E[3]}`;return rC.find((F)=>F.id===Q)?.displayName??Q}function FM(Q){if(!Q)return Q;if(Q.endsWith("[1m]")||/:1m$/i.test(Q))return Q;if(!/^(claude|deepseek|kimi)[-_]/i.test(Q))return Q;let E=rC.find((g)=>g.id===Q);if(!E||E.contextWindow<1e6)return Q;return`${Q}[1m]`}function jK(Q){if(Q>=1e6)return"1M";if(Q>0)return`${Math.round(Q/1000)}k`;return"?"}function kS(Q){return/^(gpt[-_]|chatgpt[-_]|o\d+([-_]|$)|davinci[-_]|text-davinci[-_]|openai[-_/])/i.test(Q)}function $S(Q){if(!Q.baseUrl)return null;let E=vw(Q.baseUrl,"claude");if(!E||E.length===0)return null;let g=E.filter((F)=>!kS(F.id));if(g.length===0)return null;return g.map((F)=>{let N=FM(F.id);return{id:`model-${F.id}`,label:{en:F.displayName,zh:F.displayName},shortLabel:F.displayName,description:{en:`Use ${F.displayName} (${jK(F.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${F.displayName}\uFF08\u4E0A\u4E0B\u6587 ${jK(F.contextWindow)}\uFF09`},flag:`--model ${N}`,args:["--model",N],group:"model"}})}function yS(Q){if(AF(),Q&&(Q.type==="tako"||Q.type==="custom")){let F=$S(Q);if(F)return F}let E=Q?.type==="deepseek"?zS:OS,g=[];for(let F of E){let J=rC.find((k)=>k.id===F)?.contextWindow??0,R=J>=1e6?"1M":J>0?`${Math.round(J/1000)}k`:"?",Y=SS(F),O=FM(F);g.push({id:`model-${F}`,label:{en:Y,zh:Y},shortLabel:Y,description:{en:`Use ${Y} (${R} ctx)`,zh:`\u4F7F\u7528 ${Y}\uFF08\u4E0A\u4E0B\u6587 ${R}\uFF09`},flag:`--model ${O}`,args:["--model",O],group:"model"})}return g}function VS(Q){return[...qS,...yS(Q)]}Tw(uS);import{homedir as TS}from"os";import{join as bK}from"path";var fK=bK(TS(),".gemini"),hK=bK(fK,"settings.json");async function PS(){let Q=await import("fs/promises");try{await Q.mkdir(fK,{recursive:!0})}catch{}let E={};try{E=JSON.parse(await Q.readFile(hK,"utf-8"))}catch{}let g=E.security?.auth||{};if(g.selectedType==="gemini-api-key")return;E.selectedAuthType="gemini-api-key",E.security={...E.security,auth:{...g,selectedType:"gemini-api-key"}},await Bun.write(hK,JSON.stringify(E,null,2)+`
622
- `)}var vS={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(Q){return{GEMINI_API_KEY:Q.apiKey,GOOGLE_GEMINI_BASE_URL:Q.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:PS};Tw(vS);import{join as C0}from"path";B0();K0();import{readFileSync as mS,writeFileSync as _S,mkdirSync as jS}from"fs";import{join as pK}from"path";import{homedir as dK}from"os";var Q4=null,$5=null,iK=pK(dK(),".tako","region.json"),hS=2592000000,y5={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}};function bS(){let Q=process.env.TAKO_REGION?.trim().toLowerCase();if(Q==="cn"||Q==="china")return"cn";if(Q==="global"||Q==="intl"||Q==="international")return"global";return null}function fS(){try{let Q=mS(iK,"utf-8"),E=JSON.parse(Q);if(E.region!=="cn"&&E.region!=="global")return null;if(typeof E.detectedAt!=="number")return null;if(Date.now()-E.detectedAt>hS)return null;return E.region}catch{return null}}function xK(Q){try{jS(pK(dK(),".tako"),{recursive:!0}),_S(iK,JSON.stringify({region:Q,detectedAt:Date.now()}),"utf-8")}catch{}}function xS(){try{let E=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(E)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(E))return"cn"}}catch{}let Q=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(Q.startsWith("zh_cn")||Q.startsWith("zh-cn"))return"cn";return null}async function pS(){if($5)return $5;return $5=(async()=>{let E=[dS,iS,cS].map((g)=>g().then((F)=>F?F:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(E),new Promise((F,N)=>setTimeout(()=>N(Error("net-timeout")),1200))])}catch{return"cn"}})(),$5}async function I4(){if(Q4)return Q4;let Q=bS();if(Q)return Q4=Q,Q;let E=fS();if(E)return Q4=E,E;let g=xS();if(g)return Q4=g,xK(g),g;let F=await pS();return Q4=F,xK(F),F}async function dS(){try{let Q=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function iS(){try{let Q=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country==="CN"?"cn":"global"}catch{return null}}async function cS(){try{let Q=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function lS(){let Q=await I4();return y5[Q]}async function kg(){return(await lS()).npm}function cK(){return"curl -fsSL https://bun.sh/install | bash"}async function aS(){let Q=y5.cn.bunBinary,E=await fetch(`${Q}/`,{signal:AbortSignal.timeout(1e4)});if(!E.ok)throw Error(`Failed to fetch bun versions: ${E.status}`);let F=(await E.json()).map((N)=>N.name.replace(/\/$/,"")).filter((N)=>/^bun-v\d+\.\d+\.\d+$/.test(N)).sort((N,J)=>{let R=N.replace("bun-v","").split(".").map(Number),Y=J.replace("bun-v","").split(".").map(Number);for(let O=0;O<3;O++)if(R[O]!==Y[O])return Y[O]-R[O];return 0});if(F.length===0)throw Error("No bun versions found on mirror");return F[0]}async function lK(){let Q=y5.cn.bunBinary,E=await aS(),F={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",N=process.arch==="arm64"?"aarch64":"x64",J=`bun-${F}-${N}`;return`${Q}/${E}/${J}.zip`}async function aK(){let Q=await I4(),E=y5[Q];if(Q==="cn")RQ.info(`${tB("region.usingChinaMirror")} npm: ${E.npm}`);else RQ.info(tB("region.usingGlobalMirror"))}var oS=class{constructor(Q){this.baseUrl=Q.baseUrl,this.headers={"Content-Type":"application/json",...Q.defaultHeaders},this.maxRetries=Q.maxRetries??3,this.initialRetryDelay=Q.initialRetryDelay??500}async resolveHeaders(){let Q={};for(let[E,g]of Object.entries(this.headers)){let F=await g;F!==null&&(Q[E]=F)}return Q}addHeader(Q,E){this.headers[Q]=E}async post(Q,E,g,F){try{let N=await fetch(Q,{method:"POST",headers:await this.resolveHeaders(),body:E?JSON.stringify(E??{}):void 0,keepalive:!0,...g});if(N.status===401)return null;if(N.status!==200&&N.status!==202)throw Error(`HTTP error! status: ${N.status}`);let J=await N.text();return J?JSON.parse(J):null}catch(N){if(F<this.maxRetries){let J=this.initialRetryDelay*2**F;return await new Promise((R)=>setTimeout(R,J)),this.post(Q,E,g,F+1)}return console.error("Max retries reached:",N),null}}async fetch(Q,E,g={}){let F=`${this.baseUrl}${Q}`;return this.post(F,E,g,0)}},oK=class{constructor(Q){this.options=Q,this.queue=[];let E={"openpanel-client-id":Q.clientId};Q.clientSecret&&(E["openpanel-client-secret"]=Q.clientSecret),E["openpanel-sdk-name"]=Q.sdk||"node",E["openpanel-sdk-version"]=Q.sdkVersion||"1.0.4",this.api=new oS({baseUrl:Q.apiUrl||"https://api.openpanel.dev",defaultHeaders:E})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(Q){return this.options.disabled||this.options.filter&&!this.options.filter(Q)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(Q),Promise.resolve()):this.api.fetch("/track",Q)}setGlobalProperties(Q){this.global={...this.global,...Q}}async track(Q,E){return this.log("track event",Q,E),this.send({type:"track",payload:{name:Q,profileId:E?.profileId??this.profileId,properties:{...this.global??{},...E??{}}}})}async identify(Q){if(this.log("identify user",Q),Q.profileId&&(this.profileId=Q.profileId,this.flush()),Object.keys(Q).length>1)return this.send({type:"identify",payload:{...Q,properties:{...this.global,...Q.properties}}})}async alias(Q){}async increment(Q){return this.send({type:"increment",payload:Q})}async decrement(Q){return this.send({type:"decrement",payload:Q})}async revenue(Q,E){let g=E?.deviceId;return delete E?.deviceId,this.track("revenue",{...E??{},...g?{__deviceId:g}:{},__revenue:Q})}async fetchDeviceId(){return(await this.api.fetch("/track/device-id",void 0,{method:"GET",keepalive:!1}))?.deviceId??""}clear(){this.profileId=void 0}flush(){this.queue.forEach((Q)=>{this.send({...Q,payload:{...Q.payload,profileId:Q.payload.profileId??this.profileId}})}),this.queue=[]}log(...Q){this.options.debug&&console.log("[OpenPanel.dev]",...Q)}};var nS="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",sS="sec_1e0ea34016bc3a5f8ef5",rS="https://op.shiroha.tech/api",E4=null;function nK(){if(!E4)E4=new oK({clientId:nS,clientSecret:sS,apiUrl:rS});return E4}var V5=[];function sK(Q,E,g){let F=nK().track(Q,{profileId:E,...g}).catch(()=>{});V5.push(F)}function rK(Q,E){let{email:g,...F}=E,N=nK().identify({profileId:Q,...typeof g==="string"?{email:g}:{},firstName:String(F.platform||""),properties:F}).catch(()=>{});V5.push(N)}async function tK(){if(await Promise.allSettled(V5),V5.length=0,E4){try{E4.flush()}catch{}E4=null}}B0();K0();K0();var tS="0.2.53";function eK(){return{cli_version:tS,platform:process.platform,arch:process.arch,locale:y1(),node_version:process.version}}function AY(Q){return Bun.hash(Q).toString(16).slice(0,8)}var eS="0.2.53",wM=!1,C4=null;async function BY(){if(C4!==null)return C4;try{return C4=(await oQ()).telemetryEnabled!==!1,C4}catch{return C4=!1,!1}}async function QY(){try{let Q=await oQ();if(Q.apiId)return Q.apiId;let E=Q.providers??[],g=Q.defaultProviderId,F=g?E.find((N)=>N.id===g):E[0];if(F){if(F.apiId)return F.apiId;if(F.email)return F.email;return F.id}return"anonymous"}catch{return"anonymous"}}async function RD(){if(wM)return;try{if(!await BY())return;let Q=await oQ(),E=await QY();if(E==="anonymous")return;let F=(Q.providers??[]).find((J)=>J.email)?.email,N=await I4();rK(E,{...F?{email:F}:{},region:N,locale:y1(),first_seen_version:eS,platform:process.platform,arch:process.arch}),wM=!0}catch{}}function E0(Q,E){Ak(Q,E).catch(()=>{})}async function Ak(Q,E){try{if(!await BY())return;let g=await QY();sK(Q,g,{...eK(),...E})}catch{}}async function FN(){await tK()}function EF(){C4=null,wM=!1}var Bk=/^Resolving dependencies/,IY=/^Resolved, downloaded and extracted \[(\d+)\]/,Qk=/^Saved lockfile/,Ik=/^(\d+) packages? installed/;function Ek(Q,E){let g=[];if(E.phase)g.push(E.phase);if(E.pkgCount>0)g.push(`\u5DF2\u5904\u7406 ${E.pkgCount} \u4E2A\u5305`);return g.push(`${E.elapsedSec}s`),`${Q} \xB7 ${g.join(" \xB7 ")}`}async function T5(Q,E,g){let F=Date.now(),N={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},J=[],R=()=>{N.elapsedSec=Math.floor((Date.now()-F)/1000),g(Ek(E,N))};R();let Y=setInterval(R,1000),O=(i)=>{if(!i)return;if(J.push(i),Bk.test(i))N.phase="\u89E3\u6790\u4F9D\u8D56";else if(IY.test(i)){N.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let n=i.match(IY);if(n)N.pkgCount=parseInt(n[1],10)}else if(Qk.test(i))N.phase="\u5199\u5165 lockfile";else if(Ik.test(i))N.phase="\u5B8C\u6210";R()},k=async(i)=>{if(!i)return;let n=i.getReader(),z=new TextDecoder,_="";try{while(!0){let{done:b,value:j}=await n.read();if(b)break;_+=z.decode(j,{stream:!0}).replace(/\r/g,"");let c=_.split(`
622
+ `)}var vS={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(Q){return{GEMINI_API_KEY:Q.apiKey,GOOGLE_GEMINI_BASE_URL:Q.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:PS};Tw(vS);import{join as C0}from"path";B0();K0();import{readFileSync as mS,writeFileSync as _S,mkdirSync as jS}from"fs";import{join as pK}from"path";import{homedir as dK}from"os";var Q4=null,$5=null,iK=pK(dK(),".tako","region.json"),hS=2592000000,y5={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}};function bS(){let Q=process.env.TAKO_REGION?.trim().toLowerCase();if(Q==="cn"||Q==="china")return"cn";if(Q==="global"||Q==="intl"||Q==="international")return"global";return null}function fS(){try{let Q=mS(iK,"utf-8"),E=JSON.parse(Q);if(E.region!=="cn"&&E.region!=="global")return null;if(typeof E.detectedAt!=="number")return null;if(Date.now()-E.detectedAt>hS)return null;return E.region}catch{return null}}function xK(Q){try{jS(pK(dK(),".tako"),{recursive:!0}),_S(iK,JSON.stringify({region:Q,detectedAt:Date.now()}),"utf-8")}catch{}}function xS(){try{let E=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(E)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(E))return"cn"}}catch{}let Q=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(Q.startsWith("zh_cn")||Q.startsWith("zh-cn"))return"cn";return null}async function pS(){if($5)return $5;return $5=(async()=>{let E=[dS,iS,cS].map((g)=>g().then((F)=>F?F:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(E),new Promise((F,N)=>setTimeout(()=>N(Error("net-timeout")),1200))])}catch{return"cn"}})(),$5}async function I4(){if(Q4)return Q4;let Q=bS();if(Q)return Q4=Q,Q;let E=fS();if(E)return Q4=E,E;let g=xS();if(g)return Q4=g,xK(g),g;let F=await pS();return Q4=F,xK(F),F}async function dS(){try{let Q=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function iS(){try{let Q=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country==="CN"?"cn":"global"}catch{return null}}async function cS(){try{let Q=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function lS(){let Q=await I4();return y5[Q]}async function kg(){return(await lS()).npm}function cK(){return"curl -fsSL https://bun.sh/install | bash"}async function aS(){let Q=y5.cn.bunBinary,E=await fetch(`${Q}/`,{signal:AbortSignal.timeout(1e4)});if(!E.ok)throw Error(`Failed to fetch bun versions: ${E.status}`);let F=(await E.json()).map((N)=>N.name.replace(/\/$/,"")).filter((N)=>/^bun-v\d+\.\d+\.\d+$/.test(N)).sort((N,J)=>{let R=N.replace("bun-v","").split(".").map(Number),Y=J.replace("bun-v","").split(".").map(Number);for(let O=0;O<3;O++)if(R[O]!==Y[O])return Y[O]-R[O];return 0});if(F.length===0)throw Error("No bun versions found on mirror");return F[0]}async function lK(){let Q=y5.cn.bunBinary,E=await aS(),F={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",N=process.arch==="arm64"?"aarch64":"x64",J=`bun-${F}-${N}`;return`${Q}/${E}/${J}.zip`}async function aK(){let Q=await I4(),E=y5[Q];if(Q==="cn")RQ.info(`${tB("region.usingChinaMirror")} npm: ${E.npm}`);else RQ.info(tB("region.usingGlobalMirror"))}var oS=class{constructor(Q){this.baseUrl=Q.baseUrl,this.headers={"Content-Type":"application/json",...Q.defaultHeaders},this.maxRetries=Q.maxRetries??3,this.initialRetryDelay=Q.initialRetryDelay??500}async resolveHeaders(){let Q={};for(let[E,g]of Object.entries(this.headers)){let F=await g;F!==null&&(Q[E]=F)}return Q}addHeader(Q,E){this.headers[Q]=E}async post(Q,E,g,F){try{let N=await fetch(Q,{method:"POST",headers:await this.resolveHeaders(),body:E?JSON.stringify(E??{}):void 0,keepalive:!0,...g});if(N.status===401)return null;if(N.status!==200&&N.status!==202)throw Error(`HTTP error! status: ${N.status}`);let J=await N.text();return J?JSON.parse(J):null}catch(N){if(F<this.maxRetries){let J=this.initialRetryDelay*2**F;return await new Promise((R)=>setTimeout(R,J)),this.post(Q,E,g,F+1)}return console.error("Max retries reached:",N),null}}async fetch(Q,E,g={}){let F=`${this.baseUrl}${Q}`;return this.post(F,E,g,0)}},oK=class{constructor(Q){this.options=Q,this.queue=[];let E={"openpanel-client-id":Q.clientId};Q.clientSecret&&(E["openpanel-client-secret"]=Q.clientSecret),E["openpanel-sdk-name"]=Q.sdk||"node",E["openpanel-sdk-version"]=Q.sdkVersion||"1.0.4",this.api=new oS({baseUrl:Q.apiUrl||"https://api.openpanel.dev",defaultHeaders:E})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(Q){return this.options.disabled||this.options.filter&&!this.options.filter(Q)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(Q),Promise.resolve()):this.api.fetch("/track",Q)}setGlobalProperties(Q){this.global={...this.global,...Q}}async track(Q,E){return this.log("track event",Q,E),this.send({type:"track",payload:{name:Q,profileId:E?.profileId??this.profileId,properties:{...this.global??{},...E??{}}}})}async identify(Q){if(this.log("identify user",Q),Q.profileId&&(this.profileId=Q.profileId,this.flush()),Object.keys(Q).length>1)return this.send({type:"identify",payload:{...Q,properties:{...this.global,...Q.properties}}})}async alias(Q){}async increment(Q){return this.send({type:"increment",payload:Q})}async decrement(Q){return this.send({type:"decrement",payload:Q})}async revenue(Q,E){let g=E?.deviceId;return delete E?.deviceId,this.track("revenue",{...E??{},...g?{__deviceId:g}:{},__revenue:Q})}async fetchDeviceId(){return(await this.api.fetch("/track/device-id",void 0,{method:"GET",keepalive:!1}))?.deviceId??""}clear(){this.profileId=void 0}flush(){this.queue.forEach((Q)=>{this.send({...Q,payload:{...Q.payload,profileId:Q.payload.profileId??this.profileId}})}),this.queue=[]}log(...Q){this.options.debug&&console.log("[OpenPanel.dev]",...Q)}};var nS="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",sS="sec_1e0ea34016bc3a5f8ef5",rS="https://op.shiroha.tech/api",E4=null;function nK(){if(!E4)E4=new oK({clientId:nS,clientSecret:sS,apiUrl:rS});return E4}var V5=[];function sK(Q,E,g){let F=nK().track(Q,{profileId:E,...g}).catch(()=>{});V5.push(F)}function rK(Q,E){let{email:g,...F}=E,N=nK().identify({profileId:Q,...typeof g==="string"?{email:g}:{},firstName:String(F.platform||""),properties:F}).catch(()=>{});V5.push(N)}async function tK(){if(await Promise.allSettled(V5),V5.length=0,E4){try{E4.flush()}catch{}E4=null}}B0();K0();K0();var tS="0.2.54";function eK(){return{cli_version:tS,platform:process.platform,arch:process.arch,locale:y1(),node_version:process.version}}function AY(Q){return Bun.hash(Q).toString(16).slice(0,8)}var eS="0.2.54",wM=!1,C4=null;async function BY(){if(C4!==null)return C4;try{return C4=(await oQ()).telemetryEnabled!==!1,C4}catch{return C4=!1,!1}}async function QY(){try{let Q=await oQ();if(Q.apiId)return Q.apiId;let E=Q.providers??[],g=Q.defaultProviderId,F=g?E.find((N)=>N.id===g):E[0];if(F){if(F.apiId)return F.apiId;if(F.email)return F.email;return F.id}return"anonymous"}catch{return"anonymous"}}async function RD(){if(wM)return;try{if(!await BY())return;let Q=await oQ(),E=await QY();if(E==="anonymous")return;let F=(Q.providers??[]).find((J)=>J.email)?.email,N=await I4();rK(E,{...F?{email:F}:{},region:N,locale:y1(),first_seen_version:eS,platform:process.platform,arch:process.arch}),wM=!0}catch{}}function E0(Q,E){Ak(Q,E).catch(()=>{})}async function Ak(Q,E){try{if(!await BY())return;let g=await QY();sK(Q,g,{...eK(),...E})}catch{}}async function FN(){await tK()}function EF(){C4=null,wM=!1}var Bk=/^Resolving dependencies/,IY=/^Resolved, downloaded and extracted \[(\d+)\]/,Qk=/^Saved lockfile/,Ik=/^(\d+) packages? installed/;function Ek(Q,E){let g=[];if(E.phase)g.push(E.phase);if(E.pkgCount>0)g.push(`\u5DF2\u5904\u7406 ${E.pkgCount} \u4E2A\u5305`);return g.push(`${E.elapsedSec}s`),`${Q} \xB7 ${g.join(" \xB7 ")}`}async function T5(Q,E,g){let F=Date.now(),N={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},J=[],R=()=>{N.elapsedSec=Math.floor((Date.now()-F)/1000),g(Ek(E,N))};R();let Y=setInterval(R,1000),O=(i)=>{if(!i)return;if(J.push(i),Bk.test(i))N.phase="\u89E3\u6790\u4F9D\u8D56";else if(IY.test(i)){N.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let n=i.match(IY);if(n)N.pkgCount=parseInt(n[1],10)}else if(Qk.test(i))N.phase="\u5199\u5165 lockfile";else if(Ik.test(i))N.phase="\u5B8C\u6210";R()},k=async(i)=>{if(!i)return;let n=i.getReader(),z=new TextDecoder,_="";try{while(!0){let{done:b,value:j}=await n.read();if(b)break;_+=z.decode(j,{stream:!0}).replace(/\r/g,"");let c=_.split(`
623
623
  `);_=c.pop()??"";for(let ZA of c)O(ZA)}if(_)O(_)}finally{n.releaseLock()}};try{await Promise.all([k(Q.stderr),k(Q.stdout)])}finally{clearInterval(Y)}return J.join(`
624
- `)}var v1=null;function Ck(Q){return Q.startsWith(D8)}async function gk(){try{if(!await Bun.file(p0).exists())return null;let E=Bun.spawn([p0,"--version"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode!==0)return null;return(await new Response(E.stdout).text()).trim()}catch{return null}}async function EY(){return await gk()!==null}async function Dk(){if(process.platform==="win32")return!0;try{let E=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode===0)return!0}catch{}RQ.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let Q=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let E of Q)try{let g=Bun.spawn(["bash","-c",`sudo ${E} 2>/dev/null || ${E}`],{stdout:"pipe",stderr:"pipe"});if(await g.exited,g.exitCode===0)return!0}catch{}return!1}async function Fk(Q){let E=await import("fs/promises"),{join:g}=await import("path"),F=process.platform==="win32",N=F?"bun.exe":"bun",J=await lK();RQ.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${J}`);let R=await fetch(J);if(!R.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${R.status}`);let Y=g(Q,"bun-download.zip");await Bun.write(Y,R);let O=g(Q,"bin");if(await E.mkdir(O,{recursive:!0}),F){let i=`Expand-Archive -Path "${Y}" -DestinationPath "${Q}" -Force`,n=Bun.spawn(["powershell","-Command",i],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let i=Bun.spawn(["unzip","-oq",Y,"-d",Q],{stdout:"pipe",stderr:"pipe"});if(await i.exited,i.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let k=await E.readdir(Q);for(let i of k){let n=g(Q,i);if((await E.stat(n)).isDirectory()&&i.startsWith("bun-")){let _=g(n,N);try{if(await E.access(_),await E.rename(_,g(O,N)),!F)await E.chmod(g(O,N),493);await E.rm(n,{recursive:!0,force:!0});break}catch{}}}return await E.rm(Y,{force:!0}),!0}async function wk(){let Q=jw();if(!await Dk())return RQ.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await aK(),Q.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(D8,{recursive:!0}),await I4()==="cn")await Fk(D8);else if(process.platform==="win32"){let F=`$env:BUN_INSTALL="${D8}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let F=`BUN_INSTALL="${D8}" ${cK()}`;if(await Bun.spawn(["bash","-c",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return v1=p0,Q.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),RQ.info(`\u5B89\u88C5\u4F4D\u7F6E: ${D8}`),!0}catch(E){return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Gk(){if(await EY())return v1=p0,!0;return RQ.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),RQ.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await wk()}async function wN(){if(v1){if(!Ck(v1))v1=p0;return v1}if(await EY())return v1=p0,p0;return p0}async function JM(Q){try{let E=await kg(),g=await fetch(`${E}/${Q}/latest`);if(!g.ok)return null;return(await g.json()).version}catch{return null}}async function Nk(Q){return(await oQ()).installedClients[Q.id]?.version||null}async function CY(Q){let E=F8(Q.id),g=C0(E,"package.json");try{return await Bun.file(g).exists()}catch{return!1}}async function gY(Q){let E=await Nk(Q);if(!E)return!0;let g=await JM(Q.package);if(!g)return!1;return E!==g}function DY(Q){let{platform:E,arch:g}=process,F=`${E}-${g}`;for(let[N,J]of Object.entries(Q))if(N.endsWith(F))return{pkg:N,version:J};return null}async function FY(Q,E,g,F){let N=C0(E,"node_modules",Q.package,"package.json");try{let J=Bun.file(N);if(!await J.exists())return;let Y=(await J.json()).optionalDependencies;if(!Y||typeof Y!=="object")return;let O=DY(Y);if(!O)return;let i=process.platform==="win32"?`${Q.command}.exe`:Q.command,n=C0(E,"node_modules",O.pkg,i),z=Bun.file(n);if(await z.exists()&&z.size>1024)return;RQ.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${O.pkg}...`);for(let _ of[O.version,"latest"]){let b=Bun.spawn([g,"add",`${O.pkg}@${_}`],{cwd:E,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:F}});if(await b.exited,b.exitCode===0)break;if(_==="latest"){let j=await new Response(b.stderr).text();RQ.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${j.slice(0,200)}`)}}}catch(J){RQ.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function HM(Q,E){let g=await import("fs/promises"),F=C0(E,"node_modules",Q.package,"package.json");try{let N=Bun.file(F);if(!await N.exists())return!1;let J=await N.json(),R=J.optionalDependencies;if(!R)return!0;let Y=DY(R);if(!Y)return RQ.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let O=J.bin,k=typeof O==="string"?O:O?.[Q.command];if(!k)return!1;let i=C0(E,"node_modules",Q.package,k),n=process.platform==="win32",z=n?`${Q.command}.exe`:Q.command,_=C0(E,"node_modules",Y.pkg,z),b=Bun.file(_);if(await b.exists()&&b.size>1024){if(await Bun.write(i,b),!n)await g.chmod(i,493);return!0}let j=C0(E,"node_modules",Q.package,"install.cjs");if(await Bun.file(j).exists()){RQ.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let ZA=await wN(),SA=Bun.spawn([ZA,j],{cwd:C0(E,"node_modules",Q.package),stdout:"pipe",stderr:"pipe"});if(await SA.exited,SA.exitCode!==0){let vA=await new Response(SA.stderr).text();RQ.warn(`postinstall \u5931\u8D25: ${vA.slice(0,200)}`)}let wA=Bun.file(i);if(await wA.exists()&&wA.size>1024){if(!n)await g.chmod(i,493);return!0}}RQ.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await kg();for(let ZA of[Y.version,"latest"])try{let SA=await fetch(`${c}/${Y.pkg}/${ZA}`);if(!SA.ok)continue;let vA=(await SA.json()).dist?.tarball;if(!vA)continue;let TA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(TA,{recursive:!0});let WA=C0(TA,"pkg.tgz"),KA=Bun.spawn(["curl","-fsSL","-o",WA,vA],{stdout:"pipe",stderr:"pipe"});if(await KA.exited,KA.exitCode!==0){let AB=await new Response(KA.stderr).text();RQ.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${AB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let kA=Bun.file(WA).size;if(kA<1024){RQ.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${kA} bytes, url: ${vA.slice(0,100)})`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let $A=Bun.spawn(["tar","xzf",WA,"-C",TA,`package/${z}`],{stdout:"pipe",stderr:"pipe"});await $A.exited;let GB=C0(TA,"package",z),nA=Bun.file(GB);if(await nA.exists()&&nA.size>1024){if(await Bun.write(i,nA),!n)await g.chmod(i,493);return await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{}),!0}let CB=await new Response($A.stderr).text();RQ.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${kA} bytes, exit=${$A.exitCode}): ${CB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{})}catch(SA){RQ.warn(`\u4E0B\u8F7D\u5931\u8D25: ${SA instanceof Error?SA.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(c!=="https://registry.npmjs.org")try{let ZA=`https://registry.npmjs.org/${Y.pkg}/-/${Y.pkg.split("/").pop()}-${Y.version}.tgz`;RQ.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let SA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(SA,{recursive:!0});let wA=C0(SA,"pkg.tgz"),vA=Bun.spawn(["curl","-fsSL","-o",wA,ZA],{stdout:"pipe",stderr:"pipe"});if(await vA.exited,vA.exitCode===0&&Bun.file(wA).size>1024){await Bun.spawn(["tar","xzf",wA,"-C",SA,`package/${z}`],{stdout:"pipe",stderr:"pipe"}).exited;let WA=Bun.file(C0(SA,"package",z));if(await WA.exists()&&WA.size>1024){if(await Bun.write(i,WA),!n)await g.chmod(i,493);return await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{}),!0}}await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(N){return RQ.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function UM(Q,E=!1){let g=jw(),F=F8(Q.id);try{if(!await Gk())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let N=await CY(Q),J=E||await gY(Q);if(N&&!J)return{success:!0};let R=N?"\u66F4\u65B0":"\u5B89\u88C5",Y=`\u6B63\u5728${R} ${Q.name}`;g.start(Y);let O=await import("fs/promises");await O.mkdir(F,{recursive:!0});let k=C0(F,"package.json");if(!await Bun.file(k).exists())await Bun.write(k,JSON.stringify({name:`tako-${Q.id}`,private:!0,dependencies:{}},null,2));let n=await wN(),z=await kg();if(N){let SA=C0(F,"bun.lock");try{await O.unlink(SA)}catch{}}let _=Bun.spawn([n,"add",`${Q.package}@latest`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:z}}),b=await T5(_,Y,(SA)=>g.update(SA));if(await _.exited!==0)return g.stop(`${R} ${Q.name} \u5931\u8D25`),{success:!1,error:b||"\u672A\u77E5\u9519\u8BEF"};await FY(Q,F,n,z),await HM(Q,F);let c=await JM(Q.package),ZA=(await oQ()).installedClients[Q.id]?.version;if(c){let SA=await oQ();if(SA.installedClients[Q.id]={version:c,installedAt:new Date().toISOString()},await yw(SA),N&&ZA)E0("client_updated",{client_id:Q.id,from_version:ZA,to_version:c});else E0("client_installed",{client_id:Q.id,client_version:c})}return g.stop(`${Q.name} ${R}\u5B8C\u6210`),{success:!0}}catch(N){return g.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}}}async function GM(Q){try{let E=Bun.file(Q);if(!await E.exists())return!0;if(E.size<100)return!0;let F=new Uint8Array(await E.slice(0,4).arrayBuffer());if(F[0]===127&&F[1]===69&&F[2]===76&&F[3]===70)return!1;if(F[0]===254||F[0]===207||F[0]===206||F[0]===202)return!1;if(F[0]===77&&F[1]===90)return!1;return!0}catch{return!0}}async function NM(Q){if(Q.runtime!=="native")return;let E=F8(Q.id),g=C0(E,"node_modules",Q.package,"package.json");try{let F=Bun.file(g);if(!await F.exists())return;let J=(await F.json()).bin;if(!J)return;let R=typeof J==="string"?J:J[Q.command];if(!R)return;let Y=C0(E,"node_modules",Q.package,R);if(!await GM(Y))return;RQ.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let O=await wN(),k=await kg();if(await FY(Q,E,O,k),!await HM(Q,E)||await GM(Y)){if(RQ.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(E,{recursive:!0,force:!0}),(await UM(Q)).success)if(await HM(Q,E),await GM(Y))RQ.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else RQ.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else RQ.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function wY(Q){if(!await CY(Q)){let F=await UM(Q);if(F.success)await NM(Q);return F}if(await NM(Q),await gY(Q)){let F=await JM(Q.package),N=(await oQ()).installedClients[Q.id]?.version||"\u672A\u77E5",J=F?`${N} \u2192 ${F}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(RQ.info(`${Q.name} \u53D1\u73B0\u66F4\u65B0: ${J}`),await Hk(Q.id))return RQ.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await O5({message:`\u662F\u5426\u66F4\u65B0 ${Q.name}\uFF1F`,defaultValue:!1}))return await Uk(Q.id),RQ.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let Y=await UM(Q,!0);if(Y.success)await NM(Q);return Y}return{success:!0}}var LM=C0(W0,".update-dismissed.json");async function Hk(Q){try{let E=Bun.file(LM);if(!await E.exists())return!1;let F=(await E.json())[Q];if(!F)return!1;let N=new Date().toISOString().slice(0,10);return F===N}catch{return!1}}async function Uk(Q){try{let E={},g=Bun.file(LM);if(await g.exists())try{E=await g.json()}catch{}E[Q]=new Date().toISOString().slice(0,10),await Bun.write(LM,JSON.stringify(E))}catch{}}Q2();B0();B0();import{homedir as Lk}from"os";var Jk=50,MM=3;async function RM(Q){try{return(await(await import("fs/promises")).stat(Q)).isDirectory()}catch{return!1}}async function GY(Q,E,g){let F=await oQ(),N=F.recentProjects||[],J=new Date().toISOString(),R=N.findIndex((O)=>O.path===Q);if(R>=0){let O=N[R],k=O.clientUsage||{},i=k[E]||{count:0,lastAt:J};N[R]={...O,launchCount:O.launchCount+1,lastLaunchedAt:J,lastClientId:E,clientUsage:{...k,[E]:{count:i.count+1,lastAt:J,lastSelectedOptionIds:g??i.lastSelectedOptionIds}}}}else N.push({path:Q,launchCount:1,lastLaunchedAt:J,lastClientId:E,clientUsage:{[E]:{count:1,lastAt:J,lastSelectedOptionIds:g}}});let Y=N.sort((O,k)=>new Date(k.lastLaunchedAt).getTime()-new Date(O.lastLaunchedAt).getTime()).slice(0,Jk);F.recentProjects=Y,await kC(F)}async function NY(Q){let g=(await oQ()).recentProjects||[],F=process.cwd(),J=g.find((Y)=>Y.path===F)?.clientUsage?.[Q]?.lastSelectedOptionIds;if(J)return J;return g.filter((Y)=>Y.path!==F&&Y.clientUsage?.[Q]?.lastSelectedOptionIds).sort((Y,O)=>{let k=new Date(Y.clientUsage[Q].lastAt).getTime();return new Date(O.clientUsage[Q].lastAt).getTime()-k})[0]?.clientUsage?.[Q]?.lastSelectedOptionIds??[]}function Mk(Q,E){let g=Q.clientUsage?.[E];if(g)return new Date(g.lastAt).getTime();if(Q.lastClientId===E)return new Date(Q.lastLaunchedAt).getTime();return 0}async function HY(Q,E=MM,g=!0){let N=(await oQ()).recentProjects||[],J=process.cwd(),Y=N.filter((k)=>{if(g&&k.path===J)return!1;return k.clientUsage?.[Q]||k.lastClientId===Q}).map((k)=>({...k,lastUsedTime:Mk(k,Q)})).sort((k,i)=>i.lastUsedTime-k.lastUsedTime),O=[];for(let{lastUsedTime:k,...i}of Y){if(O.length>=E)break;if(await RM(i.path))O.push(i)}return O}async function UY(){let E=(await oQ()).recentProjects||[],g=process.cwd();return E.find((N)=>N.path===g)?.lastClientId||null}function WM(Q,E=25){let g=Lk(),F=Q.startsWith(g)?"~"+Q.slice(g.length):Q;if(F.length>E){let J=F.split("/").pop()||"";if(J.length>E-4)F="..."+J.slice(-E+3);else F=`.../${J}`}return F}function LY(Q){let{t:E}=(K0(),RZ(kK)),g=Date.now(),F=new Date(Q).getTime(),N=g-F,J=Math.floor(N/60000),R=Math.floor(N/3600000),Y=Math.floor(N/86400000),O=Math.floor(Y/7),k=Math.floor(Y/30);if(J<1)return E("time.justNow");if(J<60)return E("time.minutesAgo",{n:J});if(R<24)return E("time.hoursAgo",{n:R});if(Y===1)return E("time.yesterday");if(Y<7)return E("time.daysAgo",{n:Y});if(Y<30)return E("time.weeksAgo",{n:O});return E("time.monthsAgo",{n:k})}K0();async function JY(Q,E){try{let g=E?.projectPath||process.cwd(),F=E?.providerContext;if(!F)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let N=await M7(Q);if(!N)N=R7(Q);if(!await Bun.file(N).exists())return{success:!1,error:`\u627E\u4E0D\u5230\u53EF\u6267\u884C\u6587\u4EF6: ${N}`};let R=Q.getEnvVars(F),Y={...process.env,...R},O;if(Q.runtime==="native")O=[N];else O=[await wN(),N];if(E?.args&&E.args.length>0)O=[...O,...E.args];let k=process.platform==="win32";if(!k)try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1)}catch{}if(process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}if(k){let{spawnSync:i}=await import("child_process");i(O[0],O.slice(1),{env:Y,stdio:"inherit",cwd:g,windowsHide:!1})}else try{Bun.spawnSync(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g})}catch{await Bun.spawn(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g}).exited}return{success:!0}}catch(g){return{success:!1,error:g instanceof Error?g.message:"\u542F\u52A8\u5931\u8D25"}}}async function Rk(Q,E){if(E?.providerContext)return E.providerContext;let g=await Ag();if(g){let F=await V1(Q.id);if(F.some((J)=>J.id===g.id))return MD(g);if(F.length>0)return MD(F[0])}return null}async function P5(Q,E){try{let g=E?.projectPath||process.cwd();if(E?.projectPath){if(!await RM(E.projectPath))return{success:!1,error:tB("launcher.directoryNotFound",{path:E.projectPath})}}let F=await wY(Q);if(!F.success)return F;let N=await Rk(Q,E);if(!N)return{success:!1,error:tB("launcher.apiKeyNotConfigured")};if(Q.setupConfigFiles)await Q.setupConfigFiles(N,E?.selectedOptionIds);await GY(g,Q.id,E?.selectedOptionIds);let R=(await oQ()).installedClients[Q.id]?.version;return E0("client_launched",{client_id:Q.id,client_version:R,project_hash:AY(g),is_recent_project:!!E?.projectPath}),RQ.info(tB("launcher.starting",{client:Q.name})),await JY(Q,{...E,providerContext:N})}catch(g){return{success:!1,error:g instanceof Error?g.message:"Launch failed"}}}K0();Q2();Q2();async function v5(Q){let E=await V1(Q);if(E.length===0)return null;let g=await IF(Q);if(g)return MD(g);if(E.length===1)return MD(E[0]);let F=await Ag();if(F&&E.some((N)=>N.id===F.id))return MD(F);return MD(E[0])}async function MY(){let Q=await gN();if(await DN(Q)>0){for(let g of Q)E0("provider_added",{provider_type:g.type,method:"auto_detect"});EF(),RD()}}var Vg=SB(pQ(),1);var HE=SB(pQ(),1);Q2();K0();m5();var BI=SB(sI(),1),vk=[["\u2191\u2193","\u9009\u62E9","select"],["Enter","\u786E\u8BA4","confirm"],["Esc","\u53D6\u6D88","cancel"]];function $Y({zh:Q}){return BI.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:2,children:vk.flatMap((E,g)=>{return[g>0?BI.jsxDEV(f,{dimColor:!0,children:"\u2502"},`s${g}`,!1,void 0,this):null,BI.jsxDEV(f,{dimColor:!0,bold:!0,children:E[0]},`k${g}`,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:Q?E[1]:E[2]},`l${g}`,!1,void 0,this)]})},void 0,!1,void 0,this)}function yY({provs:Q,provIdx:E,pickerIdx:g,color:F,zh:N}){return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:F,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:F,children:["\u25A3 ",N?"\u9009\u62E9\u670D\u52A1\u5546":"Pick Provider"]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[Q.length===0&&BI.jsxDEV(PA,{paddingLeft:1,children:BI.jsxDEV(f,{dimColor:!0,children:N?"\u6682\u65E0\u517C\u5BB9\u6B64\u5DE5\u5177\u7684\u670D\u52A1\u5546":"No compatible providers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q.map((J,R)=>{let Y=g===R,O=R===E;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:Y?F:void 0,bold:Y,children:Y?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:Y,color:Y?F:void 0,children:[" ",J.name]},void 0,!0,void 0,this),J.email&&BI.jsxDEV(f,{dimColor:!0,children:[" (",J.email,")"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},J.id,!0,void 0,this)}),(()=>{let J=g===Q.length;return BI.jsxDEV(PA,{paddingLeft:1,marginTop:1,children:[BI.jsxDEV(f,{color:J?F:void 0,bold:J,children:J?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:J,color:J?F:void 0,children:[" ","\u2699 ",N?"\u7BA1\u7406\u670D\u52A1\u5546\u2026":"Manage providers\u2026"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),BI.jsxDEV($Y,{zh:N},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function VY({group:Q,options:E,enabled:g,pickerIdx:F,color:N,zh:J}){let R=E.filter((k)=>k.group===Q),Y=Q==="model"?J?"\u9009\u62E9\u6A21\u578B":"Pick Model":Q,O=!R.some((k)=>g.has(k.id));return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:N,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:N,children:["\u25A3 ",Y]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[(()=>{let k=F===0;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:k?N:void 0,bold:k,children:k?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:k,color:k?N:void 0,children:[" ",J?"\u9ED8\u8BA4\uFF08\u4E0D\u6307\u5B9A\uFF09":"Default (none)"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})(),R.map((k,i)=>{let n=F===i+1,z=g.has(k.id);return BI.jsxDEV(PA,{paddingLeft:1,flexDirection:"column",children:[BI.jsxDEV(PA,{children:[BI.jsxDEV(f,{color:n?N:void 0,bold:n,children:n?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:n,color:n?N:void 0,children:[" ",k.label[J?"zh":"en"]||k.label.en]},void 0,!0,void 0,this),z&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:[" ",k.flag]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),n&&BI.jsxDEV(PA,{paddingLeft:3,children:BI.jsxDEV(f,{dimColor:!0,children:k.description[J?"zh":"en"]||k.description.en},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},k.id,!0,void 0,this)})]},void 0,!0,void 0,this),BI.jsxDEV($Y,{zh:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var QB=SB(sI(),1),mk="0.2.53",TY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},PY={icon:"\u25AA",color:"white"};async function _k(){let Q=J1(),E=await UY(),g=await Ag(),F=V0()==="zh",N=[...Q].sort((Y,O)=>{if(Y.id===E)return-1;if(O.id===E)return 1;return 0}),J=[];for(let Y of N){let O=await HY(Y.id,MM,!0),k=process.cwd(),i=[{label:F?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:WM(k,45),path:k},...O.map((wA)=>({label:WM(wA.path,45),hint:LY(wA.lastLaunchedAt),path:wA.path}))],n=await V1(Y.id),_=await IF(Y.id)||n.find((wA)=>wA.id===g?.id)||n[0],b=_?n.findIndex((wA)=>wA.id===_.id):0,j=ML(Y,_),c=await NY(Y.id),ZA=j.map((wA)=>wA.id),SA=c.filter((wA)=>ZA.includes(wA));J.push({client:Y,projects:i,providers:n,activeProvIdx:Math.max(b,0),launchOptions:j,lastSelectedOptionIds:SA})}let R=J.some((Y)=>Y.providers.length>0);return{clients:J,defaultIdx:0,hasProviders:R}}function vY({color:Q}){let{stdout:E}=eJ(),g=Math.max((E.columns||80)-6,20);return QB.jsxDEV(PA,{marginY:0,children:QB.jsxDEV(f,{dimColor:!0,color:Q,children:"\u2500".repeat(g)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function jk(Q){return Q>30?"green":Q>10?"yellow":"red"}function hk({provider:Q,zh:E}){if(!Q)return QB.jsxDEV(f,{color:"yellow",children:["\u26A0 ",E?"\u672A\u7ED1\u5B9A":"no provider"]},void 0,!0,void 0,this);let g={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:"cyan",icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:"yellow",icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:"blue",icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:"yellow",icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:"magenta",icon:"\u25C7"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:"gray",icon:"\u25AA"}},F=g[Q.type]??g.custom,N=E?F.zh:F.en,J=Q.email??"";if(J.length>0){let[R,Y]=J.split("@");if(R&&Y)J=R.length>14?`${R.slice(0,12)}\u2026@${Y}`:J}return QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{color:F.color,children:[F.icon," ",N]},void 0,!0,void 0,this),J&&QB.jsxDEV(f,{dimColor:!0,children:[" \xB7 ",J]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function bk({quota:Q,zh:E}){if(Q.status==="unsupported")return null;if(Q.status==="error")return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",Q.hint||(E?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")]},void 0,!0,void 0,this);if(Q.provider==="tako")if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit));else{let Y=Q.daily??Q.primary??Q.secondary;if(!Y)return null;let O=Y.costUsed??0;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",E?"\u4ECA\u65E5":"Today",": ",QB.jsxDEV(f,{color:"green",children:["$",O.toFixed(2)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}let g=(R,Y,O)=>{if(R&&R>=1440)return`${Math.round(R/1440)}d`;if(R)return`${Math.round(R/60)}h`;return O?`${O}d`:`${Y}h`},F=(R)=>Math.max(0,Math.min(100,100-Math.round(R))),N=[],J=(R,Y,O)=>{if(N.length)N.push(QB.jsxDEV(f,{dimColor:!0,children:" \xB7 "},`sep-${R}`,!1,void 0,this));let k=F(O);N.push(QB.jsxDEV(HE.default.Fragment,{children:[`${Y} \u5269 `,QB.jsxDEV(f,{color:jk(k),children:[k,"%"]},void 0,!0,void 0,this)]},R,!0,void 0,this))};if(Q.primary)J("primary",g(Q.primary.windowMinutes,5),Q.primary.usedPct);if(Q.secondary)J("secondary",g(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct);if(Q.modelLimits?.opus)J("opus","opus",Q.modelLimits.opus.usedPct);if(!N.length)return null;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",N]},void 0,!0,void 0,this)}function fk(Q,E){let g=[],F=new Set;for(let N of Q)if(!N.group)g.push({kind:"flag",opt:N});else if(!F.has(N.group)){F.add(N.group);let J=N.group==="model"?E?"\u6A21\u578B":"Model":N.group;g.push({kind:"group",group:N.group,title:J})}return g.push({kind:"provider",title:E?"\u670D\u52A1\u5546":"Provider"}),g}function ZM(Q,E,g){return Q.find((F)=>F.group===g&&E.has(F.id))}function xk({clients:Q,defaultIdx:E,hasProviders:g,onResult:F}){let[N,J]=HE.useState(E),[R,Y]=HE.useState("projects"),[O,k]=HE.useState(0),[i,n]=HE.useState(0),[z,_]=HE.useState(()=>Q[E]?.activeProvIdx||0),[b,j]=HE.useState(()=>new Set(Q[E]?.lastSelectedOptionIds??[])),[c,ZA]=HE.useState(""),[SA,wA]=HE.useState(null),[vA,TA]=HE.useState(!1),[WA,KA]=HE.useState(0),kA=Q[N],$A=kA.projects,GB=kA.providers,nA=TY[kA.client.id]||PY,CB=V0()==="zh",AB=GB[z],dB=HE.default.useMemo(()=>ML(kA.client,AB),[kA.client.id,AB?.id,AB?.type]),cA=HE.default.useMemo(()=>fk(dB,CB),[dB,CB]),sA=AB?.name||(CB?"\u672A\u914D\u7F6E":"N/A"),[DA,uA]=HE.useState(null);return HE.useEffect(()=>{if(!AB){uA(null);return}let NA=!1;return NN(AB).then((AA)=>{if(!NA)uA(AA)}),()=>{NA=!0}},[AB?.id,AB?.type]),HE.useEffect(()=>{k(0),n(0),Y("projects"),_(Q[N]?.activeProvIdx||0),wA(null),TA(!1),j(new Set(Q[N]?.lastSelectedOptionIds??[]))},[N]),HE.useEffect(()=>{let NA=new Set(dB.map((lA)=>lA.id)),AA=new Set(dB.filter((lA)=>lA.group==="model").map((lA)=>lA.id)),mA=AB?.model?`model-${AB.model}`:void 0;j((lA)=>{let l=new Set,m=!1,x=!1;for(let MA of lA)if(NA.has(MA)){if(l.add(MA),AA.has(MA))x=!0}else m=!0;if(!x&&mA&&AA.has(mA))l.add(mA),m=!0;return m?l:lA})},[dB,AB?.model]),I0(HE.useCallback((NA,AA)=>{if(vA){let lA=GB.length+1;if(AA.escape||NA==="q"){TA(!1);return}if(AA.upArrow){KA((l)=>l>0?l-1:lA-1);return}if(AA.downArrow){KA((l)=>l<lA-1?l+1:0);return}if(AA.return)if(WA<GB.length){let l=GB[WA];_(WA),(async()=>{if(await CN(kA.client.id,l.id),kA.client.setupConfigFiles)try{await kA.client.setupConfigFiles(MD(l))}catch(m){ZA(CB?"\u26A0 \u914D\u7F6E\u540C\u6B65\u5931\u8D25":"\u26A0 Config sync failed"),setTimeout(()=>ZA(""),2500);return}kA.activeProvIdx=WA,ZA(CB?`\u2713 \u5DF2\u7ED1\u5B9A ${l.name}`:`\u2713 Bound ${l.name}`),setTimeout(()=>ZA(""),2000)})(),TA(!1)}else TA(!1),F({type:"providers"});return}if(SA){let lA=dB.filter((m)=>m.group===SA),l=lA.length+1;if(AA.escape||NA==="q"){wA(null);return}if(AA.upArrow){KA((m)=>m>0?m-1:l-1);return}if(AA.downArrow){KA((m)=>m<l-1?m+1:0);return}if(AA.return){if(WA===0)j((m)=>{let x=new Set(m);for(let MA of lA)x.delete(MA.id);return x});else{let m=lA[WA-1];j((x)=>{let MA=new Set(x);for(let bA of lA)MA.delete(bA.id);return MA.add(m.id),MA})}wA(null)}return}if(NA==="q"){F({type:"exit"});return}if(NA==="s"){F({type:"stats"});return}if(NA==="c"){F({type:"config"});return}if(NA==="l"){F({type:"language"});return}if(NA==="p"){F({type:"providers"});return}let mA=parseInt(NA);if(mA>=1&&mA<=Q.length){J(mA-1);return}if(AA.leftArrow){J((lA)=>lA>0?lA-1:Q.length-1);return}if(AA.rightArrow){J((lA)=>lA<Q.length-1?lA+1:0);return}if(R==="projects"){if(AA.downArrow){if(O<$A.length-1)k((lA)=>lA+1);else if(cA.length>0)Y("options"),n(0);return}if(AA.upArrow){if(O>0)k((lA)=>lA-1);return}}if(R==="options"){if(AA.downArrow){if(i<cA.length-1)n((lA)=>lA+1);return}if(AA.upArrow){if(i>0)n((lA)=>lA-1);else Y("projects"),k($A.length-1);return}}if(NA===" "&&R==="options"&&cA.length>0){let lA=cA[i];if(lA.kind==="flag")j((l)=>{let m=new Set(l);if(m.has(lA.opt.id))m.delete(lA.opt.id);else m.add(lA.opt.id);return m});else if(lA.kind==="group"){let l=ZM(dB,b,lA.group),m=dB.filter((MA)=>MA.group===lA.group),x=l?m.findIndex((MA)=>MA.id===l.id)+1:0;KA(Math.max(0,x)),wA(lA.group)}else KA(z),TA(!0);return}if(AA.return){if(R==="options"&&cA.length>0){let x=cA[i];if(x.kind==="group"){let MA=ZM(dB,b,x.group),bA=dB.filter((LA)=>LA.group===x.group),BB=MA?bA.findIndex((LA)=>LA.id===MA.id)+1:0;KA(Math.max(0,BB)),wA(x.group);return}if(x.kind==="provider"){KA(z),TA(!0);return}}let lA=$A[O],l=[],m=[];for(let x of dB)if(b.has(x.id))l.push(...x.args),m.push(x.id);F({type:"launch",clientId:kA.client.id,projectPath:lA.path,args:l,selectedOptionIds:m})}},[R,N,O,i,z,GB,AB,kA,$A,dB,cA,b,Q,F,CB,SA,vA,WA])),QB.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[QB.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:nA.color,paddingX:2,paddingY:1,children:[QB.jsxDEV(PA,{justifyContent:"space-between",children:[QB.jsxDEV(PA,{gap:1,children:[QB.jsxDEV(f,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:["v",mk]},void 0,!0,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(hk,{provider:AB,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{children:[c&&QB.jsxDEV(f,{color:"green",children:c},void 0,!1,void 0,this),!c&&DA&&QB.jsxDEV(bk,{quota:DA,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!g&&QB.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:1,children:[QB.jsxDEV(f,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u672A\u914D\u7F6E\u670D\u52A1\u5546 \u2014 \u6309 c \u6DFB\u52A0 API Key \u6216 p \u7BA1\u7406\u670D\u52A1\u5546":"No provider configured \u2014 press c for API Key or p to manage"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[QB.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),Q.map((NA,AA)=>{let mA=TY[NA.client.id]||PY;return AA===N?QB.jsxDEV(PA,{borderStyle:"bold",borderColor:mA.color,paddingX:1,children:QB.jsxDEV(f,{color:mA.color,bold:!0,children:[mA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this):QB.jsxDEV(PA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:QB.jsxDEV(f,{dimColor:!0,children:[mA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this)}),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(vY,{color:nA.color},void 0,!1,void 0,this),vA?QB.jsxDEV(yY,{provs:GB,provIdx:z,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):SA?QB.jsxDEV(VY,{group:SA,options:dB,enabled:b,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):QB.jsxDEV(QB.Fragment,{children:[$A.map((NA,AA)=>{let mA=R==="projects"&&AA===O;return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:NA.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA.hint?QB.jsxDEV(f,{dimColor:!0,children:NA.hint},void 0,!1,void 0,this):null]},AA,!0,void 0,this)}),cA.length>0&&QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(vY,{color:nA.color},void 0,!1,void 0,this),cA.map((NA,AA)=>{let mA=R==="options"&&AA===i;if(NA.kind==="flag"){let lA=NA.opt,l=b.has(lA.id);return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{color:l?nA.color:void 0,bold:l,children:l?"\u25C9":"\u25CB"},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:lA.label[CB?"zh":"en"]||lA.label.en},void 0,!1,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:lA.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:lA.description[CB?"zh":"en"]||lA.description.en},void 0,!1,void 0,this)]},lA.id,!0,void 0,this)}if(NA.kind==="group"){let lA=ZM(dB,b,NA.group),l=lA?lA.shortLabel:CB?"\u9ED8\u8BA4":"Default";return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:lA?nA.color:void 0,children:l},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u8FDB\u5165\u9009\u62E9":"Enter to pick"},void 0,!1,void 0,this)]},`group-${NA.group}`,!0,void 0,this)}return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:AB?nA.color:"yellow",children:AB?sA:CB?"\u672A\u914D\u7F6E":"Not set"},void 0,!1,void 0,this),QB.jsxDEV(f,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u5207\u6362\u6216\u7BA1\u7406":"Enter to switch / manage"},void 0,!1,void 0,this)]},"provider-entry",!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:R==="options"?QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function mY({onResult:Q}){let[E,g]=HE.useState(null);if(HE.useEffect(()=>{_k().then(g)},[]),!E)return QB.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return QB.jsxDEV(xk,{clients:E.clients,defaultIdx:E.defaultIdx,hasProviders:E.hasProviders,onResult:Q},void 0,!1,void 0,this)}var fI=SB(pQ(),1);K0();Q2();G8();G8();G8();var LB=SB(sI(),1),I2={"claude-subscription":{icon:"\u2726",color:"yellow"},"codex-subscription":{icon:"\u25C8",color:"blue"},tako:{icon:"\uD83D\uDC19",color:"cyan"},anthropic:{icon:"\u25B3",color:"magenta"},deepseek:{icon:"\uD83D\uDD2E",color:"blue"},custom:{icon:"\u2699",color:"gray"}},XM={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},HN=["claude-subscription","codex-subscription","tako","anthropic","deepseek","custom"];function _Y({provider:Q,focused:E,bound:g,isDefault:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return LB.jsxDEV(PA,{flexDirection:"column",borderStyle:E?"bold":"round",borderColor:E?J.color:g?J.color:"gray",paddingX:2,paddingY:0,children:[LB.jsxDEV(PA,{justifyContent:"space-between",children:[LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:E||g,color:E?J.color:void 0,children:Q.name},void 0,!1,void 0,this),F&&LB.jsxDEV(f,{color:"yellow",children:["\u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),Q.builtin&&LB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{gap:1,children:g?LB.jsxDEV(f,{color:J.color,bold:!0,children:["\u25CF ",N?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):LB.jsxDEV(f,{dimColor:!0,children:["\u25CB ",N?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:R},void 0,!1,void 0,this),Q.model&&LB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.model&&LB.jsxDEV(f,{dimColor:!0,children:Q.model},void 0,!1,void 0,this),Q.email&&LB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.email&&LB.jsxDEV(f,{dimColor:!0,children:Q.email},void 0,!1,void 0,this),Q.apiKey&&LB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.apiKey&&LB.jsxDEV(f,{dimColor:!0,children:["Key: ",Q.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),E&&LB.jsxDEV(PA,{marginTop:0,children:LB.jsxDEV(f,{color:J.color,dimColor:!0,children:["Enter ",N?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",N?"\u8BE6\u60C5/\u64CD\u4F5C":"detail/actions"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function jY({screen:Q,addType:E,addKey:g,addUrl:F,addModel:N,addCtx:J,rowIdx:R,zh:Y}){let O=I2[E]||I2.custom,k=Y?qg[E]?.zh:qg[E]?.en,i=Q==="add-model"?O6(E):void 0;if(i)return LB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[LB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,marginBottom:1,children:[LB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",Y?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),i.map((j,c)=>{let ZA=R===c;return LB.jsxDEV(PA,{paddingLeft:1,gap:1,children:[LB.jsxDEV(f,{color:ZA?O.color:void 0,bold:ZA,children:ZA?"\u25B8":" "},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:ZA,color:ZA?O.color:void 0,children:j},void 0,!1,void 0,this)]},j,!0,void 0,this)})]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u9009\u62E9":"select"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let n=Q==="add-key"?Y?"\u8F93\u5165 API Key":"Enter API Key":Q==="add-url"?"Base URL":Q==="add-ctx"?Y?"\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08tokens\uFF0C\u53EF\u7559\u7A7A\uFF09":"Context Window (tokens, optional)":Y?"\u6A21\u578B":"Model",z=Q==="add-key"?g:Q==="add-url"?F:Q==="add-ctx"?J??"":N,_=Q==="add-url"?"https://your-proxy.com":Q==="add-ctx"?Y?"\u5982 200000\uFF1Bcatalog \u6CA1\u6709\u8BE5\u6A21\u578B\u65F6\u5EFA\u8BAE\u586B\u5199":"e.g. 200000; recommended if model is unknown to catalog":Q==="add-model"?mw(E)||(Y?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,b=Q==="add-url"?Y?"\u4E0B\u4E00\u6B65":"next":Q==="add-ctx"?Y?"\u4FDD\u5B58":"save":Q==="add-model"?Y?"\u4FDD\u5B58":"save":Y?"\u786E\u8BA4":"confirm";return LB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[LB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,marginBottom:1,children:[LB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",n]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_&&LB.jsxDEV(f,{dimColor:!0,children:[" ",Y?"\u9ED8\u8BA4":"Default",": ",_]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:_?1:0,children:[LB.jsxDEV(f,{color:O.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),LB.jsxDEV(f,{children:z||_||""},void 0,!1,void 0,this),LB.jsxDEV(f,{color:O.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:b},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function hY({provider:Q,defaultId:E,detailActions:g,detailIdx:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return LB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[LB.jsxDEV(PA,{borderStyle:"bold",borderColor:J.color,paddingX:3,paddingY:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:!0,color:J.color,children:Q.name},void 0,!1,void 0,this),Q.id===E&&LB.jsxDEV(f,{color:"yellow",children:[" \u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:[N?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),LB.jsxDEV(f,{children:R},void 0,!1,void 0,this),Q.builtin&&LB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.model&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:[N?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),LB.jsxDEV(f,{children:Q.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.email&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),LB.jsxDEV(f,{children:Q.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.apiKey&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),LB.jsxDEV(f,{children:[Q.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q.baseUrl&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),LB.jsxDEV(f,{children:Q.baseUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{gap:1,marginTop:1,children:g.map((Y,O)=>{let k=Y==="default"?`\u2B50 ${N?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:Y==="rekey"?`\uD83D\uDD11 ${N?"\u4FEE\u6539 Key":"Change Key"}`:Y==="relogin"?`\uD83D\uDD04 ${N?"\u91CD\u65B0\u767B\u5F55":"Re-login"}`:Y==="delete"?`\uD83D\uDDD1\uFE0F ${N?"\u5220\u9664":"Delete"}`:`\u2190 ${N?"\u8FD4\u56DE":"Back"}`,i=O===F;return LB.jsxDEV(PA,{borderStyle:i?"bold":"round",borderColor:i?"cyan":"gray",paddingX:2,children:LB.jsxDEV(f,{bold:i,color:i?"cyan":void 0,dimColor:!i,children:k},void 0,!1,void 0,this)},Y,!1,void 0,this)})},void 0,!1,void 0,this),LB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:N?"\u9009\u62E9":"select"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:N?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:N?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var EQ=SB(sI(),1);function bY({onDone:Q}){let[E,g]=fI.useState("list"),[F,N]=fI.useState([]),[J,R]=fI.useState(),[Y,O]=fI.useState({}),[k,i]=fI.useState(0),[n,z]=fI.useState(0),[_,b]=fI.useState(0),[j,c]=fI.useState(""),[ZA,SA]=fI.useState(""),[wA,vA]=fI.useState("tako"),[TA,WA]=fI.useState(""),[KA,kA]=fI.useState(""),[$A,GB]=fI.useState(""),[nA,CB]=fI.useState(""),AB=V0()==="zh",dB=J1(),cA=dB[k],sA=XM[cA?.id]?.color||"white",DA=cA?F.filter((LA)=>_w(LA,cA.id)):[],uA=Y[cA?.id]||J,NA=DA.length+4,AA=F.find((LA)=>LA.id===j),mA=AA?.type==="claude-subscription"||AA?.type==="codex-subscription",lA=AA?[...AA.id!==J?["default"]:[],...mA?["relogin"]:[],...AA.builtin?["rekey"]:["delete"],"back"]:["back"],l=fI.useCallback(async()=>{let LA=await JD(),dA=await Ag();N(LA),R(dA?.id);let RA={};for(let xA of J1()){let HB=await IF(xA.id);RA[xA.id]=HB?.id}O(RA)},[]);fI.useEffect(()=>{l()},[l]),fI.useEffect(()=>{z(0)},[k]),fI.useEffect(()=>{if(ZA){let LA=setTimeout(()=>SA(""),3000);return()=>clearTimeout(LA)}},[ZA]);let m=fI.useCallback(async()=>{if(j&&F.find((eA)=>eA.id===j)?.builtin){await P1(j,{apiKey:TA}),SA(AB?"Key \u5DF2\u66F4\u65B0":"Key updated"),await l(),g("list"),z(0);return}let LA=qg[wA]?.[AB?"zh":"en"]||wA,dA=KA||vL(wA),RA=$A||mw(wA),xA=nA?parseInt(nA,10):NaN,HB=Number.isFinite(xA)&&xA>0?xA:void 0;await T1({name:LA,type:wA,apiKey:TA,baseUrl:dA,model:RA,modelContextWindow:HB,supportedClients:tC(wA)}),E0("provider_added",{provider_type:wA,method:"manual"}),EF(),RD(),SA(AB?"\u5DF2\u6DFB\u52A0":"Added"),CB(""),await l(),g("list"),z(0)},[wA,TA,KA,$A,nA,AB,l,j,F]),x=fI.useCallback(async()=>{g("scanning");let LA=await gN(),dA=await DN(LA);if(dA>0)EF(),RD();SA(AB?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${dA} \u4E2A`:`Scan done, ${dA} added`),await l(),g("list"),z(0)},[l,AB]),[MA,bA]=fI.useState("claude"),BB=fI.useCallback(async(LA)=>{bA(LA),g("logging-in");let dA=LA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];await Bun.spawn(dA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited;let{invalidateQuotaCache:xA}=await Promise.resolve().then(() => (m5(),kY));if(LA==="claude")try{let HB=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),eA=await new Response(HB.stdout).text();await HB.exited;let _B=JSON.parse(eA.trim());if(_B.loggedIn&&_B.authMethod==="claude.ai"){let a=_B.email||"",qA=_B.subscriptionType||"pro",aA=`Claude ${qA.charAt(0).toUpperCase()+qA.slice(1)}${a?` (${a})`:""}`,{readClaudeAuth:jB}=await Promise.resolve().then(() => (k5(),S5)),AQ=await jB(),CQ=AQ.credentials||AQ.oauthAccount?{credentials:AQ.credentials,oauthAccount:AQ.oauthAccount}:void 0,TQ=F.find((TI)=>TI.type==="claude-subscription"&&TI.email===a);if(!TQ)await T1({name:aA,type:"claude-subscription",email:a,subscriptionType:qA,supportedClients:tC("claude-subscription"),authData:CQ}),SA(AB?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else await P1(TQ.id,{authData:CQ}),xA(TQ.id,"claude-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let HB=await import("fs/promises"),{homedir:eA}=await import("os"),{join:_B}=await import("path"),a=JSON.parse(await HB.readFile(_B(eA(),".codex","auth.json"),"utf-8"));if(a.auth_mode==="chatgpt"&&a.tokens?.access_token){let qA="";try{qA=JSON.parse(atob(a.tokens.id_token.split(".")[1])).email||""}catch{}let aA=F.find((jB)=>jB.type==="codex-subscription"&&jB.email===qA);if(!aA)await T1({name:qA?`Codex Plus (${qA})`:"Codex Subscription",type:"codex-subscription",email:qA||void 0,supportedClients:tC("codex-subscription"),authData:a}),SA(AB?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await P1(aA.id,{authData:a}),xA(aA.id,"codex-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await l(),g("list"),z(0)},[F,AB,l]);if(I0(fI.useCallback((LA,dA)=>{if(E==="list"){if(dA.escape||LA==="q"){Q();return}if(dA.leftArrow){i((xA)=>xA>0?xA-1:dB.length-1);return}if(dA.rightArrow){i((xA)=>xA<dB.length-1?xA+1:0);return}let RA=parseInt(LA);if(RA>=1&&RA<=dB.length){i(RA-1);return}if(dA.upArrow){z((xA)=>xA>0?xA-1:NA-1);return}if(dA.downArrow){z((xA)=>xA<NA-1?xA+1:0);return}if(dA.return){if(n<DA.length){let xA=DA[n];CN(cA.id,xA.id).then(()=>{Q()})}else if(n===DA.length)g("add-type"),z(0);else if(n===DA.length+1)x();else if(n===DA.length+2)Q("client-versions");else Q();return}if((LA==="d"||LA==="e")&&n<DA.length)c(DA[n].id),g("detail"),b(0);return}if(E==="detail"){if(dA.leftArrow){b((RA)=>RA>0?RA-1:lA.length-1);return}if(dA.rightArrow){b((RA)=>RA<lA.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=lA[_];if(RA==="back"){g("list"),z(0);return}if(RA==="default")CM(j).then(()=>{SA(AB?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),l(),g("list"),z(0)});if(RA==="delete")EM(j).then(()=>{SA(AB?"\u5DF2\u5220\u9664":"Deleted"),l(),g("list"),z(0)});if(RA==="rekey")vA(AA?.type||"tako"),WA(""),g("add-key"),z(0);if(RA==="relogin"){let xA=AA?.type==="codex-subscription"?"codex":"claude";g("list"),z(0),BB(xA)}}return}if(E==="add-type"){if(dA.upArrow){z((RA)=>RA>0?RA-1:HN.length-1);return}if(dA.downArrow){z((RA)=>RA<HN.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=HN[n];if(vA(RA),RA==="claude-subscription"){BB("claude");return}if(RA==="codex-subscription"){BB("codex");return}WA(""),kA(""),GB(mw(RA)||""),g("add-key"),z(0)}return}if(E==="add-key"){if(dA.escape){g("list"),z(0);return}if(dA.return&&TA){if(wA==="custom")g("add-url");else if(wA==="deepseek"||wA==="anthropic"||wA==="tako")g("add-model"),z(0);else m();return}if(dA.backspace||dA.delete){WA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)WA((RA)=>RA+LA);return}if(E==="add-url"){if(dA.escape){g("list"),z(0);return}if(dA.return){g("add-model"),z(0);return}if(dA.backspace||dA.delete){kA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)kA((RA)=>RA+LA);return}if(E==="add-model"){let RA=O6(wA);if(dA.escape){g("list"),z(0);return}if(RA){if(dA.upArrow){z((xA)=>xA>0?xA-1:RA.length-1);return}if(dA.downArrow){z((xA)=>xA<RA.length-1?xA+1:0);return}if(dA.return){GB(RA[n]),setTimeout(()=>m(),0);return}}else{if(dA.return){let xA=$A.trim();if(xA&&rC.some((HB)=>HB.id===xA))m();else g("add-ctx");return}if(dA.backspace||dA.delete){GB((xA)=>xA.slice(0,-1));return}if(LA&&!dA.ctrl)GB((xA)=>xA+LA)}return}if(E==="add-ctx"){if(dA.escape){g("list"),z(0);return}if(dA.return){m();return}if(dA.backspace||dA.delete){CB((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl&&/^[0-9]$/.test(LA))CB((RA)=>RA+LA);return}},[E,n,_,DA,NA,dB.length,cA,j,AA,lA,wA,TA,KA,$A,nA,Q,x,BB,m,l,AB])),E==="scanning"||E==="logging-in"){let LA=E==="logging-in"?I2[MA==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},dA=E==="scanning"?AB?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":AB?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:EQ.jsxDEV(PA,{borderStyle:"round",borderColor:LA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[EQ.jsxDEV(f,{color:LA.color,bold:!0,children:[LA.icon," ",dA]},void 0,!0,void 0,this),E==="logging-in"&&EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5B8C\u6210\u540E\u5C06\u81EA\u52A8\u8FD4\u56DE":"Will return automatically when done"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}if(E==="add-key"||E==="add-url"||E==="add-model"||E==="add-ctx")return EQ.jsxDEV(jY,{screen:E,addType:wA,addKey:TA,addUrl:KA,addModel:$A,addCtx:nA,rowIdx:n,zh:AB},void 0,!1,void 0,this);if(E==="add-type")return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:EQ.jsxDEV(f,{bold:!0,children:["\u2795 ",AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,gap:0,children:HN.map((LA,dA)=>{let RA=I2[LA]||I2.custom,xA=n===dA,HB=AB?qg[LA]?.zh:qg[LA]?.en,eA=LA==="claude-subscription"||LA==="codex-subscription";return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"round",borderColor:xA?RA.color:"gray",paddingX:2,paddingY:0,children:EQ.jsxDEV(PA,{gap:1,children:[EQ.jsxDEV(f,{color:RA.color,bold:!0,children:RA.icon},void 0,!1,void 0,this),EQ.jsxDEV(f,{bold:xA,color:xA?RA.color:void 0,children:HB},void 0,!1,void 0,this),eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},LA,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(E==="detail"&&AA)return EQ.jsxDEV(hY,{provider:AA,defaultId:J,detailActions:lA,detailIdx:_,zh:AB},void 0,!1,void 0,this);return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[EQ.jsxDEV(f,{bold:!0,children:["\u26A1 ",AB?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),ZA&&EQ.jsxDEV(f,{color:"green",children:[" \u2713 ",ZA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[EQ.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),dB.map((LA,dA)=>{let RA=XM[LA.id]||{icon:"\u25AA",color:"white"},xA=dA===k;return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"single",borderColor:xA?RA.color:"gray",paddingX:2,children:EQ.jsxDEV(f,{color:xA?RA.color:void 0,bold:xA,dimColor:!xA,children:[RA.icon," ",LA.name]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)}),EQ.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:sA,paddingX:1,paddingY:1,children:[DA.length===0&&EQ.jsxDEV(PA,{paddingX:2,paddingY:1,justifyContent:"center",children:EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u6682\u65E0\u517C\u5BB9\u7684\u670D\u52A1\u5546\uFF0C\u8BF7\u6DFB\u52A0":"No compatible providers yet"},void 0,!1,void 0,this)},void 0,!1,void 0,this),DA.map((LA,dA)=>EQ.jsxDEV(_Y,{provider:LA,focused:n===dA,bound:LA.id===uA,isDefault:LA.id===J,zh:AB},LA.id,!1,void 0,this))]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:AB?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"versions",offset:2,icon:"\uD83D\uDCE6",label:AB?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"},{id:"back",offset:3,icon:"\u2190",label:AB?"\u8FD4\u56DE":"Back"}].map((LA)=>{let dA=n===DA.length+LA.offset;return EQ.jsxDEV(PA,{borderStyle:dA?"bold":"round",borderColor:dA?"cyan":"gray",paddingX:2,children:EQ.jsxDEV(f,{bold:dA,color:dA?"cyan":void 0,dimColor:!dA,children:[LA.icon," ",LA.label]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var CF=SB(pQ(),1);K0();B0();async function fY(){try{let Q=await Vw();if(!Q)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let g=await(await fetch(`${SC}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q})})).json(),N=await(await fetch(`${SC}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q,period:"daily"})})).json();if(!g.success)return{success:!1,error:g.error||g.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let J=(N.data||[]).map((R)=>({model:R.model,requests:R.requests,cost:R.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:g.data?.usage?.total?.requests||0,totalCost:g.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(g.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:J}}}catch(Q){return{success:!1,error:Q instanceof Error?Q.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function xY(Q){return Q.toLocaleString("en-US")}var $C=SB(sI(),1);function pY({onExit:Q}){let[E,g]=CF.useState(null),[F,N]=CF.useState(!0),[J,R]=CF.useState(10),Y=CF.useCallback(async()=>{N(!0);let k=await fY();if(k.success&&k.data)g(k.data);N(!1)},[]);CF.useEffect(()=>{Y()},[Y]),CF.useEffect(()=>{let k=setInterval(()=>{R((i)=>{if(i<=1)return Y(),10;return i-1})},1000);return()=>clearInterval(k)},[Y]),I0((k,i)=>{if(k==="q"||i.escape)Q()});let O=V0()==="zh";return $C.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[$C.jsxDEV(f,{bold:!0,children:tB("stats.title")},void 0,!1,void 0,this),F&&!E?$C.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):E?$C.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[$C.jsxDEV(f,{children:tB("stats.totalRequests",{count:xY(E.totalRequests)})},void 0,!1,void 0,this),$C.jsxDEV(f,{children:tB("stats.totalCost",{cost:E.totalCost})},void 0,!1,void 0,this),$C.jsxDEV(f,{children:tB("stats.todayCost",{cost:E.todayCost})},void 0,!1,void 0,this),E.modelStats.length>0&&$C.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[$C.jsxDEV(f,{bold:!0,dimColor:!0,children:O?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),E.modelStats.map((k,i)=>$C.jsxDEV(f,{dimColor:!0,children:[i===E.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",k.model.padEnd(25)," ",String(k.requests).padStart(5)," ",k.cost]},k.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):$C.jsxDEV(f,{color:"red",children:O?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),$C.jsxDEV(PA,{marginTop:1,children:$C.jsxDEV(f,{dimColor:!0,children:O?`${J}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${J}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var R8=SB(pQ(),1);K0();B0();K0();Q2();G8();function pk(Q){return Q.startsWith("cr_")&&Q.length>10}async function dk(Q){try{let g=await(await fetch(`${SC}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q})})).json();if(g.success&&g.data?.id)return{valid:!0,apiId:g.data.id};return{valid:!1,error:g.error||tB("auth.validationFailed")}}catch(E){return{valid:!1,error:E instanceof Error?E.message:tB("auth.networkError")}}}async function dY(Q){if(!pk(Q))return E0("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:tB("auth.invalidFormat")};let E=await dk(Q);if(!E.valid)return E0("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:E.error};return await yw({apiKey:Q,apiId:E.apiId}),await ik(Q,E.apiId),E0("api_key_validated",{success:!0}),EF(),RD(),{success:!0}}async function ik(Q,E){let F=(await JD()).find((N)=>N.type==="tako");if(F)await P1(F.id,{apiKey:Q,apiId:E});else await T1({name:"Tako \u5B98\u65B9",type:"tako",apiKey:Q,baseUrl:SC,apiId:E,supportedClients:tC("tako"),builtin:!0})}var $g=SB(sI(),1);function iY({isReconfigure:Q,onDone:E}){let[g,F]=R8.useState(""),[N,J]=R8.useState("idle"),[R,Y]=R8.useState(""),{stdin:O,setRawMode:k}=B4();R8.useEffect(()=>{if(!O)return;k(!0);let _=(b)=>{let j=b.toString();if(j.length>1&&!j.startsWith("\x1B"))F((c)=>c+j.replace(/[\r\n]/g,""))};return O.on("data",_),()=>{O.off("data",_)}},[O,k]);let i=R8.useCallback(async()=>{if(!g||N==="validating")return;J("validating");let _=await dY(g);if(_.success)J("success"),EF(),RD(),setTimeout(()=>E(!0),500);else J("error"),Y(_.error||"Validation failed")},[g,N,E]);I0((_,b)=>{if(b.escape){E(!1);return}if(b.return){i();return}if(b.backspace||b.delete){F((j)=>j.slice(0,-1)),J("idle");return}if(_&&!b.ctrl&&_.length===1)F((j)=>j+_),J("idle")});let n=g.length<=6?g:`${g.slice(0,3)}${"\u2022".repeat(Math.min(g.length-6,20))}${g.slice(-3)}`,z=V0()==="zh";return $g.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[$g.jsxDEV(f,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",Q?tB("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:[$g.jsxDEV(f,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),$g.jsxDEV(f,{children:n},void 0,!1,void 0,this),N==="idle"&&$g.jsxDEV(f,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N==="validating"&&$g.jsxDEV(f,{color:"yellow",children:["\u23F3 ",tB("prompts.validating")]},void 0,!0,void 0,this),N==="success"&&$g.jsxDEV(f,{color:"green",children:["\u2713 ",tB("prompts.keyConfigured")]},void 0,!0,void 0,this),N==="error"&&$g.jsxDEV(f,{color:"red",children:["\u2717 ",R]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:$g.jsxDEV(f,{dimColor:!0,children:["Enter ",z?"\u63D0\u4EA4":"submit"," Esc ",z?"\u53D6\u6D88":"cancel"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var cY=SB(pQ(),1);K0();var gF=SB(sI(),1),UN=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function lY({onDone:Q}){let[E,g]=cY.useState(UN.findIndex((F)=>F.value===V0()));return I0((F,N)=>{if(N.upArrow)g((J)=>J>0?J-1:UN.length-1);if(N.downArrow)g((J)=>J<UN.length-1?J+1:0);if(N.return)BM(UN[E].value),Q();if(N.escape)Q()}),gF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[gF.jsxDEV(f,{bold:!0,children:["\uD83C\uDF10 ",tB("menu.changeLanguage")]},void 0,!0,void 0,this),UN.map((F,N)=>gF.jsxDEV(PA,{gap:1,marginTop:N===0?1:0,children:[gF.jsxDEV(f,{color:"cyan",bold:N===E,children:N===E?"\u25B8":" "},void 0,!1,void 0,this),gF.jsxDEV(f,{bold:N===E,children:F.label},void 0,!1,void 0,this),F.value===V0()&&gF.jsxDEV(f,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},F.value,!0,void 0,this)),gF.jsxDEV(PA,{marginTop:1,children:gF.jsxDEV(f,{dimColor:!0,children:"Enter select Esc back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var j5=SB(pQ(),1);B0();B0();K0();var KE=SB(sI(),1);import{join as ck}from"path";var oY=ck(W0,".key-prompt.json");async function lk(){try{return await Bun.file(oY).json()}catch{return{}}}async function aY(Q){await Bun.write(oY,JSON.stringify(Q))}async function nY(){if(await J7())return!1;let Q=await lk();if(Q.never)return!1;let E=new Date().toISOString().slice(0,10);if(Q.dismissed===E)return!1;return!0}async function sY(Q){if(Q==="never")await aY({never:!0});else{let E=new Date().toISOString().slice(0,10);await aY({dismissed:E})}}var _5=[{id:"configure",label:{en:"Configure now",zh:"\u73B0\u5728\u914D\u7F6E"},hint:{en:"Enter your Tako API Key",zh:"\u8F93\u5165\u4F60\u7684 Tako API Key"},color:"cyan"},{id:"skip",label:{en:"Not now",zh:"\u7A0D\u540E\u518D\u8BF4"},hint:{en:"Remind me tomorrow",zh:"\u660E\u5929\u518D\u63D0\u9192\u6211"}},{id:"never",label:{en:"Don't ask again",zh:"\u4E0D\u518D\u63D0\u793A"},hint:{en:"You can configure later via c key",zh:"\u4E4B\u540E\u53EF\u4EE5\u6309 c \u968F\u65F6\u914D\u7F6E"}}];function rY({onDone:Q}){let[E,g]=j5.useState(0),F=V0()==="zh";return I0(j5.useCallback((N,J)=>{if(J.upArrow){g((R)=>R>0?R-1:_5.length-1);return}if(J.downArrow){g((R)=>R<_5.length-1?R+1:0);return}if(J.escape){Q("skip");return}if(J.return){Q(_5[E].id);return}},[E,Q])),KE.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[KE.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[KE.jsxDEV(PA,{gap:1,children:[KE.jsxDEV(f,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:!0,children:F?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[KE.jsxDEV(f,{dimColor:!0,children:F?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access."},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:_5.map((N,J)=>{let R=J===E;return KE.jsxDEV(PA,{paddingLeft:1,gap:1,children:[KE.jsxDEV(f,{color:R?N.color||"white":void 0,bold:R,children:R?"\u25B8":" "},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:R,color:R?N.color||"white":void 0,children:F?N.label.zh:N.label.en},void 0,!1,void 0,this),R&&KE.jsxDEV(f,{dimColor:!0,children:F?N.hint.zh:N.hint.en},void 0,!1,void 0,this)]},N.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u9009\u62E9":"select"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var yC=SB(pQ(),1);import{join as ak}from"path";B0();async function h5(Q){let g=`${await kg()}/${encodeURIComponent(Q).replace("%40","@")}`,F=await fetch(g,{signal:AbortSignal.timeout(1e4)});if(!F.ok)throw Error(`registry http ${F.status}`);let N=await F.json(),J=Object.keys(N.versions??{});if(!J.length)throw Error("no versions found");let R=N.time??{},Y=J.map((O)=>({version:O,publishedAt:R[O],isCurrent:!1}));return Y.sort((O,k)=>{let i=O.publishedAt?Date.parse(O.publishedAt):0;return(k.publishedAt?Date.parse(k.publishedAt):0)-i}),Y}async function b5(Q,E){let g=await import("fs/promises"),F=F8(Q.id);await g.mkdir(F,{recursive:!0});let N=ak(F,"package.json");if(!await Bun.file(N).exists())await Bun.write(N,JSON.stringify({name:`tako-${Q.id}-host`,version:"0.0.0",private:!0},null,2));let R=await kg(),Y=Bun.spawn([p0,"add",`${Q.package}@${E}`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:R}});if(await Y.exited,Y.exitCode!==0){let k=await new Response(Y.stderr).text();throw Error(`bun add ${Q.package}@${E} failed: ${k.slice(0,500).trim()}`)}let O=await oQ();await yw({installedClients:{...O.installedClients,[Q.id]:{version:E,installedAt:new Date().toISOString()}}})}async function f5(Q){return(await oQ()).installedClients[Q.id]?.version??null}K0();var DI=SB(sI(),1),uM=12,tY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}};function eY({onDone:Q}){let E=J1(),g=V0()==="zh",[F,N]=yC.useState(0),[J,R]=yC.useState(0),[Y,O]=yC.useState(0),[k,i]=yC.useState({}),[n,z]=yC.useState(null),[_,b]=yC.useState(""),j=E[F],c=yC.useCallback(async(WA)=>{i((kA)=>({...kA,[WA]:{loading:!0,versions:[],current:null}}));let KA=E.find((kA)=>kA.id===WA);if(!KA)return;try{let[kA,$A]=await Promise.all([h5(KA.package),f5(KA)]),GB=kA.map((nA)=>({...nA,isCurrent:nA.version===$A}));i((nA)=>({...nA,[WA]:{loading:!1,versions:GB,current:$A}}))}catch(kA){i(($A)=>({...$A,[WA]:{loading:!1,error:kA.message,versions:[],current:null}}))}},[E]);yC.useEffect(()=>{if(!j)return;if(!k[j.id])c(j.id)},[F,j?.id]),yC.useEffect(()=>{R(0),O(0)},[F]),yC.useEffect(()=>{if(!_)return;let WA=setTimeout(()=>b(""),3000);return()=>clearTimeout(WA)},[_]);let ZA=j?k[j.id]:void 0,SA=ZA?.versions??[],wA=yC.useCallback(async(WA)=>{if(!j||n)return;z(WA);try{await b5(j,WA),b(g?`\u2713 \u5DF2\u5207\u6362\u5230 ${WA}`:`\u2713 Switched to ${WA}`),await c(j.id)}catch(KA){b(g?`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${KA.message}`:`\u2717 Install failed: ${KA.message}`)}finally{z(null)}},[j,n,c,g]);I0((WA,KA)=>{if(n)return;if(KA.escape||WA==="q"){Q();return}if(KA.leftArrow){N(($A)=>$A>0?$A-1:E.length-1);return}if(KA.rightArrow){N(($A)=>$A<E.length-1?$A+1:0);return}if(WA==="r"){if(j)c(j.id);return}if(!SA.length)return;let kA=SA.length-1;if(KA.upArrow){R(($A)=>{let GB=Math.max(0,$A-1);if(GB<Y)O(GB);return GB});return}if(KA.downArrow){R(($A)=>{let GB=Math.min(kA,$A+1);if(GB>=Y+uM)O(GB-uM+1);return GB});return}if(KA.return){let $A=SA[J];if($A&&!$A.isCurrent)wA($A.version)}});let vA=tY[j?.id]?.color||"white",TA=SA.slice(Y,Y+uM);return DI.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[DI.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,children:[DI.jsxDEV(f,{bold:!0,children:["\uD83D\uDCE6 ",g?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"]},void 0,!0,void 0,this),_&&DI.jsxDEV(f,{color:_.startsWith("\u2713")?"green":"red",children:[" ",_]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:E.map((WA,KA)=>{let kA=tY[WA.id]||{icon:"\u25AA",color:"white"},$A=KA===F;return DI.jsxDEV(PA,{borderStyle:$A?"bold":"single",borderColor:$A?kA.color:"gray",paddingX:2,children:DI.jsxDEV(f,{bold:$A,color:$A?kA.color:void 0,dimColor:!$A,children:[kA.icon," ",WA.name]},void 0,!0,void 0,this)},WA.id,!1,void 0,this)})},void 0,!1,void 0,this),DI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:vA,paddingX:2,paddingY:1,children:!ZA||ZA.loading?DI.jsxDEV(f,{dimColor:!0,children:g?"\u52A0\u8F7D\u4E2D...":"Loading..."},void 0,!1,void 0,this):ZA.error?DI.jsxDEV(f,{color:"red",children:[g?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: ",ZA.error]},void 0,!0,void 0,this):SA.length===0?DI.jsxDEV(f,{dimColor:!0,children:g?"\u6682\u65E0\u7248\u672C":"No versions"},void 0,!1,void 0,this):DI.jsxDEV(PA,{flexDirection:"column",children:[DI.jsxDEV(f,{dimColor:!0,children:[g?`\u5171 ${SA.length} \u4E2A\u7248\u672C\uFF0C\u5F53\u524D\u5B89\u88C5\uFF1A`:`${SA.length} versions, current: `,DI.jsxDEV(f,{color:vA,children:ZA.current??(g?"\u672A\u5B89\u88C5":"not installed")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:TA.map((WA,KA)=>{let $A=Y+KA===J,GB=WA.publishedAt?WA.publishedAt.slice(0,10):"",nA=WA.isCurrent?g?" \u2605 \u5F53\u524D":" \u2605 current":"",CB=n===WA.version,AB=$A?vA:WA.isCurrent?"green":void 0;return DI.jsxDEV(PA,{paddingLeft:1,children:DI.jsxDEV(f,{color:AB,bold:$A,dimColor:!$A&&!WA.isCurrent,children:[$A?"\u25B6 ":" ",WA.version.padEnd(16),GB.padEnd(14),nA,CB?g?" \u23F3 \u5B89\u88C5\u4E2D...":" \u23F3 installing...":""]},void 0,!0,void 0,this)},WA.version,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DI.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u9009\u62E9":"select"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5B89\u88C5":"install"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var yg=SB(sI(),1);function ok({onLaunch:Q,onExit:E,initialView:g="launcher"}){let[F,N]=Vg.useState(g),[J,R]=Vg.useState([]),Y=Vg.useRef(null),O=Vg.useRef(!1);Vg.useEffect(()=>{if(O.current||g!=="launcher")return;O.current=!0,nY().then((b)=>{if(b)N("key-guide")})},[g]);let k=Vg.useCallback((b)=>{if(R((j)=>[...j.slice(-4),b]),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},[]);Vg.useEffect(()=>{let b=0;return m7({info:(j)=>k({text:j,type:"info"}),warn:(j)=>k({text:j,type:"warn"}),error:(j)=>k({text:j,type:"error"}),success:(j)=>k({text:j,type:"success"}),spin:(j)=>{let c=++b;return k({id:c,text:j,type:"spin"}),{stop:(ZA)=>{if(R((SA)=>{let wA=SA.filter((vA)=>vA.id!==c);if(ZA)wA.push({text:ZA,type:"success"});return wA.slice(-5)}),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},update:(ZA)=>{if(R((SA)=>SA.map((wA)=>wA.id===c?{...wA,text:ZA}:wA)),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)}}}}),()=>$9()},[k]);let i=Vg.useCallback(()=>N("launcher"),[]),n={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},z={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},_=(()=>{switch(F){case"launcher":return yg.jsxDEV(mY,{onResult:(b)=>{switch(b.type){case"launch":Q(b);break;case"providers":N("providers");break;case"stats":N("stats");break;case"config":N("config");break;case"language":N("language");break;case"exit":E();break}}},void 0,!1,void 0,this);case"providers":return yg.jsxDEV(bY,{onDone:(b)=>{if(b==="client-versions")N("client-versions");else i()}},void 0,!1,void 0,this);case"client-versions":return yg.jsxDEV(eY,{onDone:()=>N("providers")},void 0,!1,void 0,this);case"stats":return yg.jsxDEV(pY,{onExit:i},void 0,!1,void 0,this);case"config":return yg.jsxDEV(iY,{isReconfigure:!0,onDone:i},void 0,!1,void 0,this);case"language":return yg.jsxDEV(lY,{onDone:i},void 0,!1,void 0,this);case"key-guide":return yg.jsxDEV(rY,{onDone:(b)=>{if(b==="configure")N("config");else sY(b).then(()=>N("launcher"))}},void 0,!1,void 0,this)}})();return yg.jsxDEV(PA,{flexDirection:"column",children:[J.length>0&&yg.jsxDEV(PA,{flexDirection:"column",paddingX:2,children:J.map((b,j)=>yg.jsxDEV(f,{color:n[b.type],dimColor:b.type==="info",children:[z[b.type]," ",b.text]},j,!0,void 0,this))},void 0,!1,void 0,this),_]},void 0,!0,void 0,this)}function qM(){return new Promise((Q)=>{let E=null;function g(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause(),process.stdin.unref()}catch{}}function F(J){E?.clear(),E?.unmount(),E=null,g(),$9(),Q(J)}function N(){E?.clear(),E?.unmount(),E=null,g(),$9(),Q(null)}E=k1(yg.jsxDEV(ok,{onLaunch:F,onExit:N},void 0,!1,void 0,this))})}B0();Q2();var DF=SB(sI(),1),nk={info:"cyan",success:"green",warning:"yellow",danger:"red"};function sk(Q){return nk[Q??"info"]??"cyan"}function rk({ann:Q,onClose:E}){I0((N,J)=>{if(J.return||J.escape||N==="q")E()});let g=sk(Q.type),F=Q.content.split(/\r?\n/);return DF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:g,paddingX:2,paddingY:1,children:[DF.jsxDEV(PA,{children:DF.jsxDEV(f,{color:g,bold:!0,children:["\uD83D\uDCE3 ",Q.title]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:F.map((N,J)=>DF.jsxDEV(f,{children:N||" "},J,!1,void 0,this))},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,children:DF.jsxDEV(f,{dimColor:!0,children:Q.popup_once?"\u6309 Enter / Esc / q \u5173\u95ED\uFF0C\u672C\u6761\u53EA\u63D0\u793A\u4E00\u6B21":"\u6309 Enter / Esc / q \u5173\u95ED"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function AZ(Q){return new Promise((E)=>{let g=null;g=k1(DF.jsxDEV(rk,{ann:Q,onClose:()=>{g?.clear(),g?.unmount(),g=null,E()}},void 0,!1,void 0,this))})}var tk=2000,BZ=100;function E2(Q){if(Z9||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${Q}
625
- `)}function QZ(Q){if(!Q)return null;if(Q.type!=="tako"&&Q.type!=="custom")return null;if(!Q.baseUrl||!Q.apiKey)return null;return{baseUrl:Q.baseUrl.replace(/\/+$/,""),apiKey:Q.apiKey}}async function ek(Q,E){let g=`${Q}/v1/announcements/popup`;try{let F=await fetch(g,{headers:{Authorization:`Bearer ${E}`},signal:AbortSignal.timeout(tk)});if(!F.ok)return E2(`HTTP ${F.status} from ${g}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let J=(await F.json())?.announcement;if(!J)return E2("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof J.id!=="string"||typeof J.title!=="string")return E2(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(J)}`),null;return E2(`\u62C9\u5230\u516C\u544A id=${J.id} title=${J.title} popup_once=${!!J.popup_once}`),{id:J.id,title:J.title,content:J.content??"",type:J.type,popup_once:!!J.popup_once}}catch(F){return E2(`fetch \u5931\u8D25\uFF1A${F instanceof Error?F.message:String(F)}`),null}}async function A$(Q){return((await oQ()).seenAnnouncementIds??[]).includes(Q)}async function B$(Q){let E=await oQ(),g=E.seenAnnouncementIds??[];if(g.includes(Q))return;let F=[...g,Q];if(F.length>BZ)F.splice(0,F.length-BZ);E.seenAnnouncementIds=F,await kC(E)}async function Q$(){let Q=QZ(await Ag());if(Q)return Q;for(let E of await JD()){let g=QZ(E);if(g)return g}return null}async function IZ(){let Q=await Q$();if(!Q){E2("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}E2(`\u67E5\u8BE2\u516C\u544A\uFF1A${Q.baseUrl}/v1/announcements/popup`);let E=await ek(Q.baseUrl,Q.apiKey);if(!E)return;if(E.popup_once&&await A$(E.id)){E2(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${E.id}`);return}if(E2(`\u5F39\u7A97\uFF1A${E.id}`),await AZ(E),E.popup_once)await B$(E.id),E2(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${E.id}`)}async function EZ(){await gM(),await DM(),await MY(),await Promise.race([$L(await JD()),new Promise((Q)=>setTimeout(Q,3000))]),await IZ();while(!0){let Q=await qM();if(!Q)break;let E=Z6(Q.clientId);if(!E)continue;E0("menu_action",{action:"launch",client_id:Q.clientId});let g=await v5(Q.clientId);if(!g){RQ.warn(tB("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let F=await P5(E,{projectPath:Q.projectPath,args:Q.args,selectedOptionIds:Q.selectedOptionIds,providerContext:g});if(!F.success)RQ.error(F.error||tB("cli.launchFailed"))}}B0();K0();import{join as C2}from"path";var OM="tako-cli",LN="0.2.53";function I$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number);for(let N=0;N<3;N++){let J=g[N]||0,R=F[N]||0;if(J>R)return 1;if(J<R)return-1}return 0}async function E$(){try{let Q=await kg(),E=await fetch(`${Q}/${OM}/latest`,{signal:AbortSignal.timeout(5000)});if(!E.ok)return null;return(await E.json()).version||null}catch{return null}}async function C$(){let Q=await E$();if(!Q)return{hasUpdate:!1,currentVersion:LN};return{hasUpdate:I$(Q,LN)>0,latestVersion:Q,currentVersion:LN}}async function CZ(){let Q=await import("fs/promises"),E=C2(W0,"bin"),g=C2(E,"tako"),F=C2(rD,"node_modules/tako-cli/dist/index.js");if(await Q.mkdir(E,{recursive:!0}),process.platform==="win32"){let J=`@echo off\r
624
+ `)}var v1=null;function Ck(Q){return Q.startsWith(D8)}async function gk(){try{if(!await Bun.file(p0).exists())return null;let E=Bun.spawn([p0,"--version"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode!==0)return null;return(await new Response(E.stdout).text()).trim()}catch{return null}}async function EY(){return await gk()!==null}async function Dk(){if(process.platform==="win32")return!0;try{let E=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode===0)return!0}catch{}RQ.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let Q=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let E of Q)try{let g=Bun.spawn(["bash","-c",`sudo ${E} 2>/dev/null || ${E}`],{stdout:"pipe",stderr:"pipe"});if(await g.exited,g.exitCode===0)return!0}catch{}return!1}async function Fk(Q){let E=await import("fs/promises"),{join:g}=await import("path"),F=process.platform==="win32",N=F?"bun.exe":"bun",J=await lK();RQ.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${J}`);let R=await fetch(J);if(!R.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${R.status}`);let Y=g(Q,"bun-download.zip");await Bun.write(Y,R);let O=g(Q,"bin");if(await E.mkdir(O,{recursive:!0}),F){let i=`Expand-Archive -Path "${Y}" -DestinationPath "${Q}" -Force`,n=Bun.spawn(["powershell","-Command",i],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let i=Bun.spawn(["unzip","-oq",Y,"-d",Q],{stdout:"pipe",stderr:"pipe"});if(await i.exited,i.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let k=await E.readdir(Q);for(let i of k){let n=g(Q,i);if((await E.stat(n)).isDirectory()&&i.startsWith("bun-")){let _=g(n,N);try{if(await E.access(_),await E.rename(_,g(O,N)),!F)await E.chmod(g(O,N),493);await E.rm(n,{recursive:!0,force:!0});break}catch{}}}return await E.rm(Y,{force:!0}),!0}async function wk(){let Q=jw();if(!await Dk())return RQ.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await aK(),Q.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(D8,{recursive:!0}),await I4()==="cn")await Fk(D8);else if(process.platform==="win32"){let F=`$env:BUN_INSTALL="${D8}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let F=`BUN_INSTALL="${D8}" ${cK()}`;if(await Bun.spawn(["bash","-c",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return v1=p0,Q.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),RQ.info(`\u5B89\u88C5\u4F4D\u7F6E: ${D8}`),!0}catch(E){return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Gk(){if(await EY())return v1=p0,!0;return RQ.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),RQ.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await wk()}async function wN(){if(v1){if(!Ck(v1))v1=p0;return v1}if(await EY())return v1=p0,p0;return p0}async function JM(Q){try{let E=await kg(),g=await fetch(`${E}/${Q}/latest`);if(!g.ok)return null;return(await g.json()).version}catch{return null}}async function Nk(Q){return(await oQ()).installedClients[Q.id]?.version||null}async function CY(Q){let E=F8(Q.id),g=C0(E,"package.json");try{return await Bun.file(g).exists()}catch{return!1}}async function gY(Q){let E=await Nk(Q);if(!E)return!0;let g=await JM(Q.package);if(!g)return!1;return E!==g}function DY(Q){let{platform:E,arch:g}=process,F=`${E}-${g}`;for(let[N,J]of Object.entries(Q))if(N.endsWith(F))return{pkg:N,version:J};return null}async function FY(Q,E,g,F){let N=C0(E,"node_modules",Q.package,"package.json");try{let J=Bun.file(N);if(!await J.exists())return;let Y=(await J.json()).optionalDependencies;if(!Y||typeof Y!=="object")return;let O=DY(Y);if(!O)return;let i=process.platform==="win32"?`${Q.command}.exe`:Q.command,n=C0(E,"node_modules",O.pkg,i),z=Bun.file(n);if(await z.exists()&&z.size>1024)return;RQ.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${O.pkg}...`);for(let _ of[O.version,"latest"]){let b=Bun.spawn([g,"add",`${O.pkg}@${_}`],{cwd:E,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:F}});if(await b.exited,b.exitCode===0)break;if(_==="latest"){let j=await new Response(b.stderr).text();RQ.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${j.slice(0,200)}`)}}}catch(J){RQ.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function HM(Q,E){let g=await import("fs/promises"),F=C0(E,"node_modules",Q.package,"package.json");try{let N=Bun.file(F);if(!await N.exists())return!1;let J=await N.json(),R=J.optionalDependencies;if(!R)return!0;let Y=DY(R);if(!Y)return RQ.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let O=J.bin,k=typeof O==="string"?O:O?.[Q.command];if(!k)return!1;let i=C0(E,"node_modules",Q.package,k),n=process.platform==="win32",z=n?`${Q.command}.exe`:Q.command,_=C0(E,"node_modules",Y.pkg,z),b=Bun.file(_);if(await b.exists()&&b.size>1024){if(await Bun.write(i,b),!n)await g.chmod(i,493);return!0}let j=C0(E,"node_modules",Q.package,"install.cjs");if(await Bun.file(j).exists()){RQ.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let ZA=await wN(),SA=Bun.spawn([ZA,j],{cwd:C0(E,"node_modules",Q.package),stdout:"pipe",stderr:"pipe"});if(await SA.exited,SA.exitCode!==0){let vA=await new Response(SA.stderr).text();RQ.warn(`postinstall \u5931\u8D25: ${vA.slice(0,200)}`)}let wA=Bun.file(i);if(await wA.exists()&&wA.size>1024){if(!n)await g.chmod(i,493);return!0}}RQ.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await kg();for(let ZA of[Y.version,"latest"])try{let SA=await fetch(`${c}/${Y.pkg}/${ZA}`);if(!SA.ok)continue;let vA=(await SA.json()).dist?.tarball;if(!vA)continue;let TA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(TA,{recursive:!0});let WA=C0(TA,"pkg.tgz"),KA=Bun.spawn(["curl","-fsSL","-o",WA,vA],{stdout:"pipe",stderr:"pipe"});if(await KA.exited,KA.exitCode!==0){let AB=await new Response(KA.stderr).text();RQ.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${AB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let kA=Bun.file(WA).size;if(kA<1024){RQ.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${kA} bytes, url: ${vA.slice(0,100)})`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let $A=Bun.spawn(["tar","xzf",WA,"-C",TA,`package/${z}`],{stdout:"pipe",stderr:"pipe"});await $A.exited;let GB=C0(TA,"package",z),nA=Bun.file(GB);if(await nA.exists()&&nA.size>1024){if(await Bun.write(i,nA),!n)await g.chmod(i,493);return await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{}),!0}let CB=await new Response($A.stderr).text();RQ.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${kA} bytes, exit=${$A.exitCode}): ${CB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{})}catch(SA){RQ.warn(`\u4E0B\u8F7D\u5931\u8D25: ${SA instanceof Error?SA.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(c!=="https://registry.npmjs.org")try{let ZA=`https://registry.npmjs.org/${Y.pkg}/-/${Y.pkg.split("/").pop()}-${Y.version}.tgz`;RQ.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let SA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(SA,{recursive:!0});let wA=C0(SA,"pkg.tgz"),vA=Bun.spawn(["curl","-fsSL","-o",wA,ZA],{stdout:"pipe",stderr:"pipe"});if(await vA.exited,vA.exitCode===0&&Bun.file(wA).size>1024){await Bun.spawn(["tar","xzf",wA,"-C",SA,`package/${z}`],{stdout:"pipe",stderr:"pipe"}).exited;let WA=Bun.file(C0(SA,"package",z));if(await WA.exists()&&WA.size>1024){if(await Bun.write(i,WA),!n)await g.chmod(i,493);return await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{}),!0}}await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(N){return RQ.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function UM(Q,E=!1){let g=jw(),F=F8(Q.id);try{if(!await Gk())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let N=await CY(Q),J=E||await gY(Q);if(N&&!J)return{success:!0};let R=N?"\u66F4\u65B0":"\u5B89\u88C5",Y=`\u6B63\u5728${R} ${Q.name}`;g.start(Y);let O=await import("fs/promises");await O.mkdir(F,{recursive:!0});let k=C0(F,"package.json");if(!await Bun.file(k).exists())await Bun.write(k,JSON.stringify({name:`tako-${Q.id}`,private:!0,dependencies:{}},null,2));let n=await wN(),z=await kg();if(N){let SA=C0(F,"bun.lock");try{await O.unlink(SA)}catch{}}let _=Bun.spawn([n,"add",`${Q.package}@latest`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:z}}),b=await T5(_,Y,(SA)=>g.update(SA));if(await _.exited!==0)return g.stop(`${R} ${Q.name} \u5931\u8D25`),{success:!1,error:b||"\u672A\u77E5\u9519\u8BEF"};await FY(Q,F,n,z),await HM(Q,F);let c=await JM(Q.package),ZA=(await oQ()).installedClients[Q.id]?.version;if(c){let SA=await oQ();if(SA.installedClients[Q.id]={version:c,installedAt:new Date().toISOString()},await yw(SA),N&&ZA)E0("client_updated",{client_id:Q.id,from_version:ZA,to_version:c});else E0("client_installed",{client_id:Q.id,client_version:c})}return g.stop(`${Q.name} ${R}\u5B8C\u6210`),{success:!0}}catch(N){return g.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}}}async function GM(Q){try{let E=Bun.file(Q);if(!await E.exists())return!0;if(E.size<100)return!0;let F=new Uint8Array(await E.slice(0,4).arrayBuffer());if(F[0]===127&&F[1]===69&&F[2]===76&&F[3]===70)return!1;if(F[0]===254||F[0]===207||F[0]===206||F[0]===202)return!1;if(F[0]===77&&F[1]===90)return!1;return!0}catch{return!0}}async function NM(Q){if(Q.runtime!=="native")return;let E=F8(Q.id),g=C0(E,"node_modules",Q.package,"package.json");try{let F=Bun.file(g);if(!await F.exists())return;let J=(await F.json()).bin;if(!J)return;let R=typeof J==="string"?J:J[Q.command];if(!R)return;let Y=C0(E,"node_modules",Q.package,R);if(!await GM(Y))return;RQ.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let O=await wN(),k=await kg();if(await FY(Q,E,O,k),!await HM(Q,E)||await GM(Y)){if(RQ.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(E,{recursive:!0,force:!0}),(await UM(Q)).success)if(await HM(Q,E),await GM(Y))RQ.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else RQ.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else RQ.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function wY(Q){if(!await CY(Q)){let F=await UM(Q);if(F.success)await NM(Q);return F}if(await NM(Q),await gY(Q)){let F=await JM(Q.package),N=(await oQ()).installedClients[Q.id]?.version||"\u672A\u77E5",J=F?`${N} \u2192 ${F}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(RQ.info(`${Q.name} \u53D1\u73B0\u66F4\u65B0: ${J}`),await Hk(Q.id))return RQ.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await O5({message:`\u662F\u5426\u66F4\u65B0 ${Q.name}\uFF1F`,defaultValue:!1}))return await Uk(Q.id),RQ.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let Y=await UM(Q,!0);if(Y.success)await NM(Q);return Y}return{success:!0}}var LM=C0(W0,".update-dismissed.json");async function Hk(Q){try{let E=Bun.file(LM);if(!await E.exists())return!1;let F=(await E.json())[Q];if(!F)return!1;let N=new Date().toISOString().slice(0,10);return F===N}catch{return!1}}async function Uk(Q){try{let E={},g=Bun.file(LM);if(await g.exists())try{E=await g.json()}catch{}E[Q]=new Date().toISOString().slice(0,10),await Bun.write(LM,JSON.stringify(E))}catch{}}Q2();B0();B0();import{homedir as Lk}from"os";var Jk=50,MM=3;async function RM(Q){try{return(await(await import("fs/promises")).stat(Q)).isDirectory()}catch{return!1}}async function GY(Q,E,g){let F=await oQ(),N=F.recentProjects||[],J=new Date().toISOString(),R=N.findIndex((O)=>O.path===Q);if(R>=0){let O=N[R],k=O.clientUsage||{},i=k[E]||{count:0,lastAt:J};N[R]={...O,launchCount:O.launchCount+1,lastLaunchedAt:J,lastClientId:E,clientUsage:{...k,[E]:{count:i.count+1,lastAt:J,lastSelectedOptionIds:g??i.lastSelectedOptionIds}}}}else N.push({path:Q,launchCount:1,lastLaunchedAt:J,lastClientId:E,clientUsage:{[E]:{count:1,lastAt:J,lastSelectedOptionIds:g}}});let Y=N.sort((O,k)=>new Date(k.lastLaunchedAt).getTime()-new Date(O.lastLaunchedAt).getTime()).slice(0,Jk);F.recentProjects=Y,await kC(F)}async function NY(Q){let g=(await oQ()).recentProjects||[],F=process.cwd(),J=g.find((Y)=>Y.path===F)?.clientUsage?.[Q]?.lastSelectedOptionIds;if(J)return J;return g.filter((Y)=>Y.path!==F&&Y.clientUsage?.[Q]?.lastSelectedOptionIds).sort((Y,O)=>{let k=new Date(Y.clientUsage[Q].lastAt).getTime();return new Date(O.clientUsage[Q].lastAt).getTime()-k})[0]?.clientUsage?.[Q]?.lastSelectedOptionIds??[]}function Mk(Q,E){let g=Q.clientUsage?.[E];if(g)return new Date(g.lastAt).getTime();if(Q.lastClientId===E)return new Date(Q.lastLaunchedAt).getTime();return 0}async function HY(Q,E=MM,g=!0){let N=(await oQ()).recentProjects||[],J=process.cwd(),Y=N.filter((k)=>{if(g&&k.path===J)return!1;return k.clientUsage?.[Q]||k.lastClientId===Q}).map((k)=>({...k,lastUsedTime:Mk(k,Q)})).sort((k,i)=>i.lastUsedTime-k.lastUsedTime),O=[];for(let{lastUsedTime:k,...i}of Y){if(O.length>=E)break;if(await RM(i.path))O.push(i)}return O}async function UY(){let E=(await oQ()).recentProjects||[],g=process.cwd();return E.find((N)=>N.path===g)?.lastClientId||null}function WM(Q,E=25){let g=Lk(),F=Q.startsWith(g)?"~"+Q.slice(g.length):Q;if(F.length>E){let J=F.split("/").pop()||"";if(J.length>E-4)F="..."+J.slice(-E+3);else F=`.../${J}`}return F}function LY(Q){let{t:E}=(K0(),RZ(kK)),g=Date.now(),F=new Date(Q).getTime(),N=g-F,J=Math.floor(N/60000),R=Math.floor(N/3600000),Y=Math.floor(N/86400000),O=Math.floor(Y/7),k=Math.floor(Y/30);if(J<1)return E("time.justNow");if(J<60)return E("time.minutesAgo",{n:J});if(R<24)return E("time.hoursAgo",{n:R});if(Y===1)return E("time.yesterday");if(Y<7)return E("time.daysAgo",{n:Y});if(Y<30)return E("time.weeksAgo",{n:O});return E("time.monthsAgo",{n:k})}K0();async function JY(Q,E){try{let g=E?.projectPath||process.cwd(),F=E?.providerContext;if(!F)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let N=await M7(Q);if(!N)N=R7(Q);if(!await Bun.file(N).exists())return{success:!1,error:`\u627E\u4E0D\u5230\u53EF\u6267\u884C\u6587\u4EF6: ${N}`};let R=Q.getEnvVars(F),Y={...process.env,...R},O;if(Q.runtime==="native")O=[N];else O=[await wN(),N];if(E?.args&&E.args.length>0)O=[...O,...E.args];let k=process.platform==="win32";if(!k)try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1)}catch{}if(process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}if(k){let{spawnSync:i}=await import("child_process");i(O[0],O.slice(1),{env:Y,stdio:"inherit",cwd:g,windowsHide:!1})}else try{Bun.spawnSync(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g})}catch{await Bun.spawn(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g}).exited}return{success:!0}}catch(g){return{success:!1,error:g instanceof Error?g.message:"\u542F\u52A8\u5931\u8D25"}}}async function Rk(Q,E){if(E?.providerContext)return E.providerContext;let g=await Ag();if(g){let F=await V1(Q.id);if(F.some((J)=>J.id===g.id))return MD(g);if(F.length>0)return MD(F[0])}return null}async function P5(Q,E){try{let g=E?.projectPath||process.cwd();if(E?.projectPath){if(!await RM(E.projectPath))return{success:!1,error:tB("launcher.directoryNotFound",{path:E.projectPath})}}let F=await wY(Q);if(!F.success)return F;let N=await Rk(Q,E);if(!N)return{success:!1,error:tB("launcher.apiKeyNotConfigured")};if(Q.setupConfigFiles)await Q.setupConfigFiles(N,E?.selectedOptionIds);await GY(g,Q.id,E?.selectedOptionIds);let R=(await oQ()).installedClients[Q.id]?.version;return E0("client_launched",{client_id:Q.id,client_version:R,project_hash:AY(g),is_recent_project:!!E?.projectPath}),RQ.info(tB("launcher.starting",{client:Q.name})),await JY(Q,{...E,providerContext:N})}catch(g){return{success:!1,error:g instanceof Error?g.message:"Launch failed"}}}K0();Q2();Q2();async function v5(Q){let E=await V1(Q);if(E.length===0)return null;let g=await IF(Q);if(g)return MD(g);if(E.length===1)return MD(E[0]);let F=await Ag();if(F&&E.some((N)=>N.id===F.id))return MD(F);return MD(E[0])}async function MY(){let Q=await gN();if(await DN(Q)>0){for(let g of Q)E0("provider_added",{provider_type:g.type,method:"auto_detect"});EF(),RD()}}var Vg=SB(pQ(),1);var HE=SB(pQ(),1);Q2();K0();m5();var BI=SB(sI(),1),vk=[["\u2191\u2193","\u9009\u62E9","select"],["Enter","\u786E\u8BA4","confirm"],["Esc","\u53D6\u6D88","cancel"]];function $Y({zh:Q}){return BI.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:2,children:vk.flatMap((E,g)=>{return[g>0?BI.jsxDEV(f,{dimColor:!0,children:"\u2502"},`s${g}`,!1,void 0,this):null,BI.jsxDEV(f,{dimColor:!0,bold:!0,children:E[0]},`k${g}`,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:Q?E[1]:E[2]},`l${g}`,!1,void 0,this)]})},void 0,!1,void 0,this)}function yY({provs:Q,provIdx:E,pickerIdx:g,color:F,zh:N}){return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:F,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:F,children:["\u25A3 ",N?"\u9009\u62E9\u670D\u52A1\u5546":"Pick Provider"]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[Q.length===0&&BI.jsxDEV(PA,{paddingLeft:1,children:BI.jsxDEV(f,{dimColor:!0,children:N?"\u6682\u65E0\u517C\u5BB9\u6B64\u5DE5\u5177\u7684\u670D\u52A1\u5546":"No compatible providers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q.map((J,R)=>{let Y=g===R,O=R===E;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:Y?F:void 0,bold:Y,children:Y?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:Y,color:Y?F:void 0,children:[" ",J.name]},void 0,!0,void 0,this),J.email&&BI.jsxDEV(f,{dimColor:!0,children:[" (",J.email,")"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},J.id,!0,void 0,this)}),(()=>{let J=g===Q.length;return BI.jsxDEV(PA,{paddingLeft:1,marginTop:1,children:[BI.jsxDEV(f,{color:J?F:void 0,bold:J,children:J?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:J,color:J?F:void 0,children:[" ","\u2699 ",N?"\u7BA1\u7406\u670D\u52A1\u5546\u2026":"Manage providers\u2026"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),BI.jsxDEV($Y,{zh:N},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function VY({group:Q,options:E,enabled:g,pickerIdx:F,color:N,zh:J}){let R=E.filter((k)=>k.group===Q),Y=Q==="model"?J?"\u9009\u62E9\u6A21\u578B":"Pick Model":Q,O=!R.some((k)=>g.has(k.id));return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:N,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:N,children:["\u25A3 ",Y]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[(()=>{let k=F===0;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:k?N:void 0,bold:k,children:k?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:k,color:k?N:void 0,children:[" ",J?"\u9ED8\u8BA4\uFF08\u4E0D\u6307\u5B9A\uFF09":"Default (none)"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})(),R.map((k,i)=>{let n=F===i+1,z=g.has(k.id);return BI.jsxDEV(PA,{paddingLeft:1,flexDirection:"column",children:[BI.jsxDEV(PA,{children:[BI.jsxDEV(f,{color:n?N:void 0,bold:n,children:n?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:n,color:n?N:void 0,children:[" ",k.label[J?"zh":"en"]||k.label.en]},void 0,!0,void 0,this),z&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:[" ",k.flag]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),n&&BI.jsxDEV(PA,{paddingLeft:3,children:BI.jsxDEV(f,{dimColor:!0,children:k.description[J?"zh":"en"]||k.description.en},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},k.id,!0,void 0,this)})]},void 0,!0,void 0,this),BI.jsxDEV($Y,{zh:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var QB=SB(sI(),1),mk="0.2.54",TY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},PY={icon:"\u25AA",color:"white"};async function _k(){let Q=J1(),E=await UY(),g=await Ag(),F=V0()==="zh",N=[...Q].sort((Y,O)=>{if(Y.id===E)return-1;if(O.id===E)return 1;return 0}),J=[];for(let Y of N){let O=await HY(Y.id,MM,!0),k=process.cwd(),i=[{label:F?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:WM(k,45),path:k},...O.map((wA)=>({label:WM(wA.path,45),hint:LY(wA.lastLaunchedAt),path:wA.path}))],n=await V1(Y.id),_=await IF(Y.id)||n.find((wA)=>wA.id===g?.id)||n[0],b=_?n.findIndex((wA)=>wA.id===_.id):0,j=ML(Y,_),c=await NY(Y.id),ZA=j.map((wA)=>wA.id),SA=c.filter((wA)=>ZA.includes(wA));J.push({client:Y,projects:i,providers:n,activeProvIdx:Math.max(b,0),launchOptions:j,lastSelectedOptionIds:SA})}let R=J.some((Y)=>Y.providers.length>0);return{clients:J,defaultIdx:0,hasProviders:R}}function vY({color:Q}){let{stdout:E}=eJ(),g=Math.max((E.columns||80)-6,20);return QB.jsxDEV(PA,{marginY:0,children:QB.jsxDEV(f,{dimColor:!0,color:Q,children:"\u2500".repeat(g)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function jk(Q){return Q>30?"green":Q>10?"yellow":"red"}function hk({provider:Q,zh:E}){if(!Q)return QB.jsxDEV(f,{color:"yellow",children:["\u26A0 ",E?"\u672A\u7ED1\u5B9A":"no provider"]},void 0,!0,void 0,this);let g={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:"cyan",icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:"yellow",icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:"blue",icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:"yellow",icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:"magenta",icon:"\u25C7"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:"gray",icon:"\u25AA"}},F=g[Q.type]??g.custom,N=E?F.zh:F.en,J=Q.email??"";if(J.length>0){let[R,Y]=J.split("@");if(R&&Y)J=R.length>14?`${R.slice(0,12)}\u2026@${Y}`:J}return QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{color:F.color,children:[F.icon," ",N]},void 0,!0,void 0,this),J&&QB.jsxDEV(f,{dimColor:!0,children:[" \xB7 ",J]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function bk({quota:Q,zh:E}){if(Q.status==="unsupported")return null;if(Q.status==="error")return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",Q.hint||(E?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")]},void 0,!0,void 0,this);if(Q.provider==="tako")if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit));else{let Y=Q.daily??Q.primary??Q.secondary;if(!Y)return null;let O=Y.costUsed??0;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",E?"\u4ECA\u65E5":"Today",": ",QB.jsxDEV(f,{color:"green",children:["$",O.toFixed(2)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}let g=(R,Y,O)=>{if(R&&R>=1440)return`${Math.round(R/1440)}d`;if(R)return`${Math.round(R/60)}h`;return O?`${O}d`:`${Y}h`},F=(R)=>Math.max(0,Math.min(100,100-Math.round(R))),N=[],J=(R,Y,O)=>{if(N.length)N.push(QB.jsxDEV(f,{dimColor:!0,children:" \xB7 "},`sep-${R}`,!1,void 0,this));let k=F(O);N.push(QB.jsxDEV(HE.default.Fragment,{children:[`${Y} \u5269 `,QB.jsxDEV(f,{color:jk(k),children:[k,"%"]},void 0,!0,void 0,this)]},R,!0,void 0,this))};if(Q.primary)J("primary",g(Q.primary.windowMinutes,5),Q.primary.usedPct);if(Q.secondary)J("secondary",g(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct);if(Q.modelLimits?.opus)J("opus","opus",Q.modelLimits.opus.usedPct);if(!N.length)return null;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",N]},void 0,!0,void 0,this)}function fk(Q,E){let g=[],F=new Set;for(let N of Q)if(!N.group)g.push({kind:"flag",opt:N});else if(!F.has(N.group)){F.add(N.group);let J=N.group==="model"?E?"\u6A21\u578B":"Model":N.group;g.push({kind:"group",group:N.group,title:J})}return g.push({kind:"provider",title:E?"\u670D\u52A1\u5546":"Provider"}),g}function ZM(Q,E,g){return Q.find((F)=>F.group===g&&E.has(F.id))}function xk({clients:Q,defaultIdx:E,hasProviders:g,onResult:F}){let[N,J]=HE.useState(E),[R,Y]=HE.useState("projects"),[O,k]=HE.useState(0),[i,n]=HE.useState(0),[z,_]=HE.useState(()=>Q[E]?.activeProvIdx||0),[b,j]=HE.useState(()=>new Set(Q[E]?.lastSelectedOptionIds??[])),[c,ZA]=HE.useState(""),[SA,wA]=HE.useState(null),[vA,TA]=HE.useState(!1),[WA,KA]=HE.useState(0),kA=Q[N],$A=kA.projects,GB=kA.providers,nA=TY[kA.client.id]||PY,CB=V0()==="zh",AB=GB[z],dB=HE.default.useMemo(()=>ML(kA.client,AB),[kA.client.id,AB?.id,AB?.type]),cA=HE.default.useMemo(()=>fk(dB,CB),[dB,CB]),sA=AB?.name||(CB?"\u672A\u914D\u7F6E":"N/A"),[DA,uA]=HE.useState(null);return HE.useEffect(()=>{if(!AB){uA(null);return}let NA=!1;return NN(AB).then((AA)=>{if(!NA)uA(AA)}),()=>{NA=!0}},[AB?.id,AB?.type]),HE.useEffect(()=>{k(0),n(0),Y("projects"),_(Q[N]?.activeProvIdx||0),wA(null),TA(!1),j(new Set(Q[N]?.lastSelectedOptionIds??[]))},[N]),HE.useEffect(()=>{let NA=new Set(dB.map((lA)=>lA.id)),AA=new Set(dB.filter((lA)=>lA.group==="model").map((lA)=>lA.id)),mA=AB?.model?`model-${AB.model}`:void 0;j((lA)=>{let l=new Set,m=!1,x=!1;for(let MA of lA)if(NA.has(MA)){if(l.add(MA),AA.has(MA))x=!0}else m=!0;if(!x&&mA&&AA.has(mA))l.add(mA),m=!0;return m?l:lA})},[dB,AB?.model]),I0(HE.useCallback((NA,AA)=>{if(vA){let lA=GB.length+1;if(AA.escape||NA==="q"){TA(!1);return}if(AA.upArrow){KA((l)=>l>0?l-1:lA-1);return}if(AA.downArrow){KA((l)=>l<lA-1?l+1:0);return}if(AA.return)if(WA<GB.length){let l=GB[WA];_(WA),(async()=>{if(await CN(kA.client.id,l.id),kA.client.setupConfigFiles)try{await kA.client.setupConfigFiles(MD(l))}catch(m){ZA(CB?"\u26A0 \u914D\u7F6E\u540C\u6B65\u5931\u8D25":"\u26A0 Config sync failed"),setTimeout(()=>ZA(""),2500);return}kA.activeProvIdx=WA,ZA(CB?`\u2713 \u5DF2\u7ED1\u5B9A ${l.name}`:`\u2713 Bound ${l.name}`),setTimeout(()=>ZA(""),2000)})(),TA(!1)}else TA(!1),F({type:"providers"});return}if(SA){let lA=dB.filter((m)=>m.group===SA),l=lA.length+1;if(AA.escape||NA==="q"){wA(null);return}if(AA.upArrow){KA((m)=>m>0?m-1:l-1);return}if(AA.downArrow){KA((m)=>m<l-1?m+1:0);return}if(AA.return){if(WA===0)j((m)=>{let x=new Set(m);for(let MA of lA)x.delete(MA.id);return x});else{let m=lA[WA-1];j((x)=>{let MA=new Set(x);for(let bA of lA)MA.delete(bA.id);return MA.add(m.id),MA})}wA(null)}return}if(NA==="q"){F({type:"exit"});return}if(NA==="s"){F({type:"stats"});return}if(NA==="c"){F({type:"config"});return}if(NA==="l"){F({type:"language"});return}if(NA==="p"){F({type:"providers"});return}let mA=parseInt(NA);if(mA>=1&&mA<=Q.length){J(mA-1);return}if(AA.leftArrow){J((lA)=>lA>0?lA-1:Q.length-1);return}if(AA.rightArrow){J((lA)=>lA<Q.length-1?lA+1:0);return}if(R==="projects"){if(AA.downArrow){if(O<$A.length-1)k((lA)=>lA+1);else if(cA.length>0)Y("options"),n(0);return}if(AA.upArrow){if(O>0)k((lA)=>lA-1);return}}if(R==="options"){if(AA.downArrow){if(i<cA.length-1)n((lA)=>lA+1);return}if(AA.upArrow){if(i>0)n((lA)=>lA-1);else Y("projects"),k($A.length-1);return}}if(NA===" "&&R==="options"&&cA.length>0){let lA=cA[i];if(lA.kind==="flag")j((l)=>{let m=new Set(l);if(m.has(lA.opt.id))m.delete(lA.opt.id);else m.add(lA.opt.id);return m});else if(lA.kind==="group"){let l=ZM(dB,b,lA.group),m=dB.filter((MA)=>MA.group===lA.group),x=l?m.findIndex((MA)=>MA.id===l.id)+1:0;KA(Math.max(0,x)),wA(lA.group)}else KA(z),TA(!0);return}if(AA.return){if(R==="options"&&cA.length>0){let x=cA[i];if(x.kind==="group"){let MA=ZM(dB,b,x.group),bA=dB.filter((LA)=>LA.group===x.group),BB=MA?bA.findIndex((LA)=>LA.id===MA.id)+1:0;KA(Math.max(0,BB)),wA(x.group);return}if(x.kind==="provider"){KA(z),TA(!0);return}}let lA=$A[O],l=[],m=[];for(let x of dB)if(b.has(x.id))l.push(...x.args),m.push(x.id);F({type:"launch",clientId:kA.client.id,projectPath:lA.path,args:l,selectedOptionIds:m})}},[R,N,O,i,z,GB,AB,kA,$A,dB,cA,b,Q,F,CB,SA,vA,WA])),QB.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[QB.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:nA.color,paddingX:2,paddingY:1,children:[QB.jsxDEV(PA,{justifyContent:"space-between",children:[QB.jsxDEV(PA,{gap:1,children:[QB.jsxDEV(f,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:["v",mk]},void 0,!0,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(hk,{provider:AB,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{children:[c&&QB.jsxDEV(f,{color:"green",children:c},void 0,!1,void 0,this),!c&&DA&&QB.jsxDEV(bk,{quota:DA,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!g&&QB.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:1,children:[QB.jsxDEV(f,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u672A\u914D\u7F6E\u670D\u52A1\u5546 \u2014 \u6309 c \u6DFB\u52A0 API Key \u6216 p \u7BA1\u7406\u670D\u52A1\u5546":"No provider configured \u2014 press c for API Key or p to manage"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[QB.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),Q.map((NA,AA)=>{let mA=TY[NA.client.id]||PY;return AA===N?QB.jsxDEV(PA,{borderStyle:"bold",borderColor:mA.color,paddingX:1,children:QB.jsxDEV(f,{color:mA.color,bold:!0,children:[mA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this):QB.jsxDEV(PA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:QB.jsxDEV(f,{dimColor:!0,children:[mA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this)}),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(vY,{color:nA.color},void 0,!1,void 0,this),vA?QB.jsxDEV(yY,{provs:GB,provIdx:z,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):SA?QB.jsxDEV(VY,{group:SA,options:dB,enabled:b,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):QB.jsxDEV(QB.Fragment,{children:[$A.map((NA,AA)=>{let mA=R==="projects"&&AA===O;return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:NA.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA.hint?QB.jsxDEV(f,{dimColor:!0,children:NA.hint},void 0,!1,void 0,this):null]},AA,!0,void 0,this)}),cA.length>0&&QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(vY,{color:nA.color},void 0,!1,void 0,this),cA.map((NA,AA)=>{let mA=R==="options"&&AA===i;if(NA.kind==="flag"){let lA=NA.opt,l=b.has(lA.id);return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{color:l?nA.color:void 0,bold:l,children:l?"\u25C9":"\u25CB"},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:lA.label[CB?"zh":"en"]||lA.label.en},void 0,!1,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:lA.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:lA.description[CB?"zh":"en"]||lA.description.en},void 0,!1,void 0,this)]},lA.id,!0,void 0,this)}if(NA.kind==="group"){let lA=ZM(dB,b,NA.group),l=lA?lA.shortLabel:CB?"\u9ED8\u8BA4":"Default";return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:lA?nA.color:void 0,children:l},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u8FDB\u5165\u9009\u62E9":"Enter to pick"},void 0,!1,void 0,this)]},`group-${NA.group}`,!0,void 0,this)}return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:mA?nA.color:void 0,bold:mA,children:mA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:mA,color:mA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:AB?nA.color:"yellow",children:AB?sA:CB?"\u672A\u914D\u7F6E":"Not set"},void 0,!1,void 0,this),QB.jsxDEV(f,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),mA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u5207\u6362\u6216\u7BA1\u7406":"Enter to switch / manage"},void 0,!1,void 0,this)]},"provider-entry",!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:R==="options"?QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function mY({onResult:Q}){let[E,g]=HE.useState(null);if(HE.useEffect(()=>{_k().then(g)},[]),!E)return QB.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return QB.jsxDEV(xk,{clients:E.clients,defaultIdx:E.defaultIdx,hasProviders:E.hasProviders,onResult:Q},void 0,!1,void 0,this)}var fI=SB(pQ(),1);K0();Q2();G8();G8();G8();var LB=SB(sI(),1),I2={"claude-subscription":{icon:"\u2726",color:"yellow"},"codex-subscription":{icon:"\u25C8",color:"blue"},tako:{icon:"\uD83D\uDC19",color:"cyan"},anthropic:{icon:"\u25B3",color:"magenta"},deepseek:{icon:"\uD83D\uDD2E",color:"blue"},custom:{icon:"\u2699",color:"gray"}},XM={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},HN=["claude-subscription","codex-subscription","tako","anthropic","deepseek","custom"];function _Y({provider:Q,focused:E,bound:g,isDefault:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return LB.jsxDEV(PA,{flexDirection:"column",borderStyle:E?"bold":"round",borderColor:E?J.color:g?J.color:"gray",paddingX:2,paddingY:0,children:[LB.jsxDEV(PA,{justifyContent:"space-between",children:[LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:E||g,color:E?J.color:void 0,children:Q.name},void 0,!1,void 0,this),F&&LB.jsxDEV(f,{color:"yellow",children:["\u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),Q.builtin&&LB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{gap:1,children:g?LB.jsxDEV(f,{color:J.color,bold:!0,children:["\u25CF ",N?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):LB.jsxDEV(f,{dimColor:!0,children:["\u25CB ",N?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:R},void 0,!1,void 0,this),Q.model&&LB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.model&&LB.jsxDEV(f,{dimColor:!0,children:Q.model},void 0,!1,void 0,this),Q.email&&LB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.email&&LB.jsxDEV(f,{dimColor:!0,children:Q.email},void 0,!1,void 0,this),Q.apiKey&&LB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.apiKey&&LB.jsxDEV(f,{dimColor:!0,children:["Key: ",Q.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),E&&LB.jsxDEV(PA,{marginTop:0,children:LB.jsxDEV(f,{color:J.color,dimColor:!0,children:["Enter ",N?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",N?"\u8BE6\u60C5/\u64CD\u4F5C":"detail/actions"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function jY({screen:Q,addType:E,addKey:g,addUrl:F,addModel:N,addCtx:J,rowIdx:R,zh:Y}){let O=I2[E]||I2.custom,k=Y?qg[E]?.zh:qg[E]?.en,i=Q==="add-model"?O6(E):void 0;if(i)return LB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[LB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,marginBottom:1,children:[LB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",Y?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),i.map((j,c)=>{let ZA=R===c;return LB.jsxDEV(PA,{paddingLeft:1,gap:1,children:[LB.jsxDEV(f,{color:ZA?O.color:void 0,bold:ZA,children:ZA?"\u25B8":" "},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:ZA,color:ZA?O.color:void 0,children:j},void 0,!1,void 0,this)]},j,!0,void 0,this)})]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u9009\u62E9":"select"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let n=Q==="add-key"?Y?"\u8F93\u5165 API Key":"Enter API Key":Q==="add-url"?"Base URL":Q==="add-ctx"?Y?"\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08tokens\uFF0C\u53EF\u7559\u7A7A\uFF09":"Context Window (tokens, optional)":Y?"\u6A21\u578B":"Model",z=Q==="add-key"?g:Q==="add-url"?F:Q==="add-ctx"?J??"":N,_=Q==="add-url"?"https://your-proxy.com":Q==="add-ctx"?Y?"\u5982 200000\uFF1Bcatalog \u6CA1\u6709\u8BE5\u6A21\u578B\u65F6\u5EFA\u8BAE\u586B\u5199":"e.g. 200000; recommended if model is unknown to catalog":Q==="add-model"?mw(E)||(Y?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,b=Q==="add-url"?Y?"\u4E0B\u4E00\u6B65":"next":Q==="add-ctx"?Y?"\u4FDD\u5B58":"save":Q==="add-model"?Y?"\u4FDD\u5B58":"save":Y?"\u786E\u8BA4":"confirm";return LB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[LB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,marginBottom:1,children:[LB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",n]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_&&LB.jsxDEV(f,{dimColor:!0,children:[" ",Y?"\u9ED8\u8BA4":"Default",": ",_]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:_?1:0,children:[LB.jsxDEV(f,{color:O.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),LB.jsxDEV(f,{children:z||_||""},void 0,!1,void 0,this),LB.jsxDEV(f,{color:O.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:b},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function hY({provider:Q,defaultId:E,detailActions:g,detailIdx:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return LB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[LB.jsxDEV(PA,{borderStyle:"bold",borderColor:J.color,paddingX:3,paddingY:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),LB.jsxDEV(f,{bold:!0,color:J.color,children:Q.name},void 0,!1,void 0,this),Q.id===E&&LB.jsxDEV(f,{color:"yellow",children:[" \u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:[N?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),LB.jsxDEV(f,{children:R},void 0,!1,void 0,this),Q.builtin&&LB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.model&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:[N?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),LB.jsxDEV(f,{children:Q.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.email&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),LB.jsxDEV(f,{children:Q.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.apiKey&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),LB.jsxDEV(f,{children:[Q.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q.baseUrl&&LB.jsxDEV(PA,{gap:1,children:[LB.jsxDEV(f,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),LB.jsxDEV(f,{children:Q.baseUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),LB.jsxDEV(PA,{gap:1,marginTop:1,children:g.map((Y,O)=>{let k=Y==="default"?`\u2B50 ${N?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:Y==="rekey"?`\uD83D\uDD11 ${N?"\u4FEE\u6539 Key":"Change Key"}`:Y==="relogin"?`\uD83D\uDD04 ${N?"\u91CD\u65B0\u767B\u5F55":"Re-login"}`:Y==="delete"?`\uD83D\uDDD1\uFE0F ${N?"\u5220\u9664":"Delete"}`:`\u2190 ${N?"\u8FD4\u56DE":"Back"}`,i=O===F;return LB.jsxDEV(PA,{borderStyle:i?"bold":"round",borderColor:i?"cyan":"gray",paddingX:2,children:LB.jsxDEV(f,{bold:i,color:i?"cyan":void 0,dimColor:!i,children:k},void 0,!1,void 0,this)},Y,!1,void 0,this)})},void 0,!1,void 0,this),LB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:N?"\u9009\u62E9":"select"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:N?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),LB.jsxDEV(f,{dimColor:!0,children:N?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var EQ=SB(sI(),1);function bY({onDone:Q}){let[E,g]=fI.useState("list"),[F,N]=fI.useState([]),[J,R]=fI.useState(),[Y,O]=fI.useState({}),[k,i]=fI.useState(0),[n,z]=fI.useState(0),[_,b]=fI.useState(0),[j,c]=fI.useState(""),[ZA,SA]=fI.useState(""),[wA,vA]=fI.useState("tako"),[TA,WA]=fI.useState(""),[KA,kA]=fI.useState(""),[$A,GB]=fI.useState(""),[nA,CB]=fI.useState(""),AB=V0()==="zh",dB=J1(),cA=dB[k],sA=XM[cA?.id]?.color||"white",DA=cA?F.filter((LA)=>_w(LA,cA.id)):[],uA=Y[cA?.id]||J,NA=DA.length+4,AA=F.find((LA)=>LA.id===j),mA=AA?.type==="claude-subscription"||AA?.type==="codex-subscription",lA=AA?[...AA.id!==J?["default"]:[],...mA?["relogin"]:[],...AA.builtin?["rekey"]:["delete"],"back"]:["back"],l=fI.useCallback(async()=>{let LA=await JD(),dA=await Ag();N(LA),R(dA?.id);let RA={};for(let xA of J1()){let HB=await IF(xA.id);RA[xA.id]=HB?.id}O(RA)},[]);fI.useEffect(()=>{l()},[l]),fI.useEffect(()=>{z(0)},[k]),fI.useEffect(()=>{if(ZA){let LA=setTimeout(()=>SA(""),3000);return()=>clearTimeout(LA)}},[ZA]);let m=fI.useCallback(async()=>{if(j&&F.find((eA)=>eA.id===j)?.builtin){await P1(j,{apiKey:TA}),SA(AB?"Key \u5DF2\u66F4\u65B0":"Key updated"),await l(),g("list"),z(0);return}let LA=qg[wA]?.[AB?"zh":"en"]||wA,dA=KA||vL(wA),RA=$A||mw(wA),xA=nA?parseInt(nA,10):NaN,HB=Number.isFinite(xA)&&xA>0?xA:void 0;await T1({name:LA,type:wA,apiKey:TA,baseUrl:dA,model:RA,modelContextWindow:HB,supportedClients:tC(wA)}),E0("provider_added",{provider_type:wA,method:"manual"}),EF(),RD(),SA(AB?"\u5DF2\u6DFB\u52A0":"Added"),CB(""),await l(),g("list"),z(0)},[wA,TA,KA,$A,nA,AB,l,j,F]),x=fI.useCallback(async()=>{g("scanning");let LA=await gN(),dA=await DN(LA);if(dA>0)EF(),RD();SA(AB?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${dA} \u4E2A`:`Scan done, ${dA} added`),await l(),g("list"),z(0)},[l,AB]),[MA,bA]=fI.useState("claude"),BB=fI.useCallback(async(LA)=>{bA(LA),g("logging-in");let dA=LA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];await Bun.spawn(dA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited;let{invalidateQuotaCache:xA}=await Promise.resolve().then(() => (m5(),kY));if(LA==="claude")try{let HB=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),eA=await new Response(HB.stdout).text();await HB.exited;let _B=JSON.parse(eA.trim());if(_B.loggedIn&&_B.authMethod==="claude.ai"){let a=_B.email||"",qA=_B.subscriptionType||"pro",aA=`Claude ${qA.charAt(0).toUpperCase()+qA.slice(1)}${a?` (${a})`:""}`,{readClaudeAuth:jB}=await Promise.resolve().then(() => (k5(),S5)),AQ=await jB(),CQ=AQ.credentials||AQ.oauthAccount?{credentials:AQ.credentials,oauthAccount:AQ.oauthAccount}:void 0,TQ=F.find((TI)=>TI.type==="claude-subscription"&&TI.email===a);if(!TQ)await T1({name:aA,type:"claude-subscription",email:a,subscriptionType:qA,supportedClients:tC("claude-subscription"),authData:CQ}),SA(AB?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else await P1(TQ.id,{authData:CQ}),xA(TQ.id,"claude-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let HB=await import("fs/promises"),{homedir:eA}=await import("os"),{join:_B}=await import("path"),a=JSON.parse(await HB.readFile(_B(eA(),".codex","auth.json"),"utf-8"));if(a.auth_mode==="chatgpt"&&a.tokens?.access_token){let qA="";try{qA=JSON.parse(atob(a.tokens.id_token.split(".")[1])).email||""}catch{}let aA=F.find((jB)=>jB.type==="codex-subscription"&&jB.email===qA);if(!aA)await T1({name:qA?`Codex Plus (${qA})`:"Codex Subscription",type:"codex-subscription",email:qA||void 0,supportedClients:tC("codex-subscription"),authData:a}),SA(AB?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await P1(aA.id,{authData:a}),xA(aA.id,"codex-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await l(),g("list"),z(0)},[F,AB,l]);if(I0(fI.useCallback((LA,dA)=>{if(E==="list"){if(dA.escape||LA==="q"){Q();return}if(dA.leftArrow){i((xA)=>xA>0?xA-1:dB.length-1);return}if(dA.rightArrow){i((xA)=>xA<dB.length-1?xA+1:0);return}let RA=parseInt(LA);if(RA>=1&&RA<=dB.length){i(RA-1);return}if(dA.upArrow){z((xA)=>xA>0?xA-1:NA-1);return}if(dA.downArrow){z((xA)=>xA<NA-1?xA+1:0);return}if(dA.return){if(n<DA.length){let xA=DA[n];CN(cA.id,xA.id).then(()=>{Q()})}else if(n===DA.length)g("add-type"),z(0);else if(n===DA.length+1)x();else if(n===DA.length+2)Q("client-versions");else Q();return}if((LA==="d"||LA==="e")&&n<DA.length)c(DA[n].id),g("detail"),b(0);return}if(E==="detail"){if(dA.leftArrow){b((RA)=>RA>0?RA-1:lA.length-1);return}if(dA.rightArrow){b((RA)=>RA<lA.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=lA[_];if(RA==="back"){g("list"),z(0);return}if(RA==="default")CM(j).then(()=>{SA(AB?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),l(),g("list"),z(0)});if(RA==="delete")EM(j).then(()=>{SA(AB?"\u5DF2\u5220\u9664":"Deleted"),l(),g("list"),z(0)});if(RA==="rekey")vA(AA?.type||"tako"),WA(""),g("add-key"),z(0);if(RA==="relogin"){let xA=AA?.type==="codex-subscription"?"codex":"claude";g("list"),z(0),BB(xA)}}return}if(E==="add-type"){if(dA.upArrow){z((RA)=>RA>0?RA-1:HN.length-1);return}if(dA.downArrow){z((RA)=>RA<HN.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=HN[n];if(vA(RA),RA==="claude-subscription"){BB("claude");return}if(RA==="codex-subscription"){BB("codex");return}WA(""),kA(""),GB(mw(RA)||""),g("add-key"),z(0)}return}if(E==="add-key"){if(dA.escape){g("list"),z(0);return}if(dA.return&&TA){if(wA==="custom")g("add-url");else if(wA==="deepseek"||wA==="anthropic"||wA==="tako")g("add-model"),z(0);else m();return}if(dA.backspace||dA.delete){WA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)WA((RA)=>RA+LA);return}if(E==="add-url"){if(dA.escape){g("list"),z(0);return}if(dA.return){g("add-model"),z(0);return}if(dA.backspace||dA.delete){kA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)kA((RA)=>RA+LA);return}if(E==="add-model"){let RA=O6(wA);if(dA.escape){g("list"),z(0);return}if(RA){if(dA.upArrow){z((xA)=>xA>0?xA-1:RA.length-1);return}if(dA.downArrow){z((xA)=>xA<RA.length-1?xA+1:0);return}if(dA.return){GB(RA[n]),setTimeout(()=>m(),0);return}}else{if(dA.return){let xA=$A.trim();if(xA&&rC.some((HB)=>HB.id===xA))m();else g("add-ctx");return}if(dA.backspace||dA.delete){GB((xA)=>xA.slice(0,-1));return}if(LA&&!dA.ctrl)GB((xA)=>xA+LA)}return}if(E==="add-ctx"){if(dA.escape){g("list"),z(0);return}if(dA.return){m();return}if(dA.backspace||dA.delete){CB((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl&&/^[0-9]$/.test(LA))CB((RA)=>RA+LA);return}},[E,n,_,DA,NA,dB.length,cA,j,AA,lA,wA,TA,KA,$A,nA,Q,x,BB,m,l,AB])),E==="scanning"||E==="logging-in"){let LA=E==="logging-in"?I2[MA==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},dA=E==="scanning"?AB?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":AB?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:EQ.jsxDEV(PA,{borderStyle:"round",borderColor:LA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[EQ.jsxDEV(f,{color:LA.color,bold:!0,children:[LA.icon," ",dA]},void 0,!0,void 0,this),E==="logging-in"&&EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5B8C\u6210\u540E\u5C06\u81EA\u52A8\u8FD4\u56DE":"Will return automatically when done"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}if(E==="add-key"||E==="add-url"||E==="add-model"||E==="add-ctx")return EQ.jsxDEV(jY,{screen:E,addType:wA,addKey:TA,addUrl:KA,addModel:$A,addCtx:nA,rowIdx:n,zh:AB},void 0,!1,void 0,this);if(E==="add-type")return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:EQ.jsxDEV(f,{bold:!0,children:["\u2795 ",AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,gap:0,children:HN.map((LA,dA)=>{let RA=I2[LA]||I2.custom,xA=n===dA,HB=AB?qg[LA]?.zh:qg[LA]?.en,eA=LA==="claude-subscription"||LA==="codex-subscription";return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"round",borderColor:xA?RA.color:"gray",paddingX:2,paddingY:0,children:EQ.jsxDEV(PA,{gap:1,children:[EQ.jsxDEV(f,{color:RA.color,bold:!0,children:RA.icon},void 0,!1,void 0,this),EQ.jsxDEV(f,{bold:xA,color:xA?RA.color:void 0,children:HB},void 0,!1,void 0,this),eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},LA,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(E==="detail"&&AA)return EQ.jsxDEV(hY,{provider:AA,defaultId:J,detailActions:lA,detailIdx:_,zh:AB},void 0,!1,void 0,this);return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[EQ.jsxDEV(f,{bold:!0,children:["\u26A1 ",AB?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),ZA&&EQ.jsxDEV(f,{color:"green",children:[" \u2713 ",ZA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[EQ.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),dB.map((LA,dA)=>{let RA=XM[LA.id]||{icon:"\u25AA",color:"white"},xA=dA===k;return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"single",borderColor:xA?RA.color:"gray",paddingX:2,children:EQ.jsxDEV(f,{color:xA?RA.color:void 0,bold:xA,dimColor:!xA,children:[RA.icon," ",LA.name]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)}),EQ.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:sA,paddingX:1,paddingY:1,children:[DA.length===0&&EQ.jsxDEV(PA,{paddingX:2,paddingY:1,justifyContent:"center",children:EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u6682\u65E0\u517C\u5BB9\u7684\u670D\u52A1\u5546\uFF0C\u8BF7\u6DFB\u52A0":"No compatible providers yet"},void 0,!1,void 0,this)},void 0,!1,void 0,this),DA.map((LA,dA)=>EQ.jsxDEV(_Y,{provider:LA,focused:n===dA,bound:LA.id===uA,isDefault:LA.id===J,zh:AB},LA.id,!1,void 0,this))]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:AB?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"versions",offset:2,icon:"\uD83D\uDCE6",label:AB?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"},{id:"back",offset:3,icon:"\u2190",label:AB?"\u8FD4\u56DE":"Back"}].map((LA)=>{let dA=n===DA.length+LA.offset;return EQ.jsxDEV(PA,{borderStyle:dA?"bold":"round",borderColor:dA?"cyan":"gray",paddingX:2,children:EQ.jsxDEV(f,{bold:dA,color:dA?"cyan":void 0,dimColor:!dA,children:[LA.icon," ",LA.label]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var CF=SB(pQ(),1);K0();B0();async function fY(){try{let Q=await Vw();if(!Q)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let g=await(await fetch(`${SC}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q})})).json(),N=await(await fetch(`${SC}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q,period:"daily"})})).json();if(!g.success)return{success:!1,error:g.error||g.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let J=(N.data||[]).map((R)=>({model:R.model,requests:R.requests,cost:R.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:g.data?.usage?.total?.requests||0,totalCost:g.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(g.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:J}}}catch(Q){return{success:!1,error:Q instanceof Error?Q.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function xY(Q){return Q.toLocaleString("en-US")}var $C=SB(sI(),1);function pY({onExit:Q}){let[E,g]=CF.useState(null),[F,N]=CF.useState(!0),[J,R]=CF.useState(10),Y=CF.useCallback(async()=>{N(!0);let k=await fY();if(k.success&&k.data)g(k.data);N(!1)},[]);CF.useEffect(()=>{Y()},[Y]),CF.useEffect(()=>{let k=setInterval(()=>{R((i)=>{if(i<=1)return Y(),10;return i-1})},1000);return()=>clearInterval(k)},[Y]),I0((k,i)=>{if(k==="q"||i.escape)Q()});let O=V0()==="zh";return $C.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[$C.jsxDEV(f,{bold:!0,children:tB("stats.title")},void 0,!1,void 0,this),F&&!E?$C.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):E?$C.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[$C.jsxDEV(f,{children:tB("stats.totalRequests",{count:xY(E.totalRequests)})},void 0,!1,void 0,this),$C.jsxDEV(f,{children:tB("stats.totalCost",{cost:E.totalCost})},void 0,!1,void 0,this),$C.jsxDEV(f,{children:tB("stats.todayCost",{cost:E.todayCost})},void 0,!1,void 0,this),E.modelStats.length>0&&$C.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[$C.jsxDEV(f,{bold:!0,dimColor:!0,children:O?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),E.modelStats.map((k,i)=>$C.jsxDEV(f,{dimColor:!0,children:[i===E.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",k.model.padEnd(25)," ",String(k.requests).padStart(5)," ",k.cost]},k.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):$C.jsxDEV(f,{color:"red",children:O?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),$C.jsxDEV(PA,{marginTop:1,children:$C.jsxDEV(f,{dimColor:!0,children:O?`${J}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${J}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var R8=SB(pQ(),1);K0();B0();K0();Q2();G8();function pk(Q){return Q.startsWith("cr_")&&Q.length>10}async function dk(Q){try{let g=await(await fetch(`${SC}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q})})).json();if(g.success&&g.data?.id)return{valid:!0,apiId:g.data.id};return{valid:!1,error:g.error||tB("auth.validationFailed")}}catch(E){return{valid:!1,error:E instanceof Error?E.message:tB("auth.networkError")}}}async function dY(Q){if(!pk(Q))return E0("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:tB("auth.invalidFormat")};let E=await dk(Q);if(!E.valid)return E0("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:E.error};return await yw({apiKey:Q,apiId:E.apiId}),await ik(Q,E.apiId),E0("api_key_validated",{success:!0}),EF(),RD(),{success:!0}}async function ik(Q,E){let F=(await JD()).find((N)=>N.type==="tako");if(F)await P1(F.id,{apiKey:Q,apiId:E});else await T1({name:"Tako \u5B98\u65B9",type:"tako",apiKey:Q,baseUrl:SC,apiId:E,supportedClients:tC("tako"),builtin:!0})}var $g=SB(sI(),1);function iY({isReconfigure:Q,onDone:E}){let[g,F]=R8.useState(""),[N,J]=R8.useState("idle"),[R,Y]=R8.useState(""),{stdin:O,setRawMode:k}=B4();R8.useEffect(()=>{if(!O)return;k(!0);let _=(b)=>{let j=b.toString();if(j.length>1&&!j.startsWith("\x1B"))F((c)=>c+j.replace(/[\r\n]/g,""))};return O.on("data",_),()=>{O.off("data",_)}},[O,k]);let i=R8.useCallback(async()=>{if(!g||N==="validating")return;J("validating");let _=await dY(g);if(_.success)J("success"),EF(),RD(),setTimeout(()=>E(!0),500);else J("error"),Y(_.error||"Validation failed")},[g,N,E]);I0((_,b)=>{if(b.escape){E(!1);return}if(b.return){i();return}if(b.backspace||b.delete){F((j)=>j.slice(0,-1)),J("idle");return}if(_&&!b.ctrl&&_.length===1)F((j)=>j+_),J("idle")});let n=g.length<=6?g:`${g.slice(0,3)}${"\u2022".repeat(Math.min(g.length-6,20))}${g.slice(-3)}`,z=V0()==="zh";return $g.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[$g.jsxDEV(f,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",Q?tB("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:[$g.jsxDEV(f,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),$g.jsxDEV(f,{children:n},void 0,!1,void 0,this),N==="idle"&&$g.jsxDEV(f,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N==="validating"&&$g.jsxDEV(f,{color:"yellow",children:["\u23F3 ",tB("prompts.validating")]},void 0,!0,void 0,this),N==="success"&&$g.jsxDEV(f,{color:"green",children:["\u2713 ",tB("prompts.keyConfigured")]},void 0,!0,void 0,this),N==="error"&&$g.jsxDEV(f,{color:"red",children:["\u2717 ",R]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:$g.jsxDEV(f,{dimColor:!0,children:["Enter ",z?"\u63D0\u4EA4":"submit"," Esc ",z?"\u53D6\u6D88":"cancel"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var cY=SB(pQ(),1);K0();var gF=SB(sI(),1),UN=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function lY({onDone:Q}){let[E,g]=cY.useState(UN.findIndex((F)=>F.value===V0()));return I0((F,N)=>{if(N.upArrow)g((J)=>J>0?J-1:UN.length-1);if(N.downArrow)g((J)=>J<UN.length-1?J+1:0);if(N.return)BM(UN[E].value),Q();if(N.escape)Q()}),gF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[gF.jsxDEV(f,{bold:!0,children:["\uD83C\uDF10 ",tB("menu.changeLanguage")]},void 0,!0,void 0,this),UN.map((F,N)=>gF.jsxDEV(PA,{gap:1,marginTop:N===0?1:0,children:[gF.jsxDEV(f,{color:"cyan",bold:N===E,children:N===E?"\u25B8":" "},void 0,!1,void 0,this),gF.jsxDEV(f,{bold:N===E,children:F.label},void 0,!1,void 0,this),F.value===V0()&&gF.jsxDEV(f,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},F.value,!0,void 0,this)),gF.jsxDEV(PA,{marginTop:1,children:gF.jsxDEV(f,{dimColor:!0,children:"Enter select Esc back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var j5=SB(pQ(),1);B0();B0();K0();var KE=SB(sI(),1);import{join as ck}from"path";var oY=ck(W0,".key-prompt.json");async function lk(){try{return await Bun.file(oY).json()}catch{return{}}}async function aY(Q){await Bun.write(oY,JSON.stringify(Q))}async function nY(){if(await J7())return!1;let Q=await lk();if(Q.never)return!1;let E=new Date().toISOString().slice(0,10);if(Q.dismissed===E)return!1;return!0}async function sY(Q){if(Q==="never")await aY({never:!0});else{let E=new Date().toISOString().slice(0,10);await aY({dismissed:E})}}var _5=[{id:"configure",label:{en:"Configure now",zh:"\u73B0\u5728\u914D\u7F6E"},hint:{en:"Enter your Tako API Key",zh:"\u8F93\u5165\u4F60\u7684 Tako API Key"},color:"cyan"},{id:"skip",label:{en:"Not now",zh:"\u7A0D\u540E\u518D\u8BF4"},hint:{en:"Remind me tomorrow",zh:"\u660E\u5929\u518D\u63D0\u9192\u6211"}},{id:"never",label:{en:"Don't ask again",zh:"\u4E0D\u518D\u63D0\u793A"},hint:{en:"You can configure later via c key",zh:"\u4E4B\u540E\u53EF\u4EE5\u6309 c \u968F\u65F6\u914D\u7F6E"}}];function rY({onDone:Q}){let[E,g]=j5.useState(0),F=V0()==="zh";return I0(j5.useCallback((N,J)=>{if(J.upArrow){g((R)=>R>0?R-1:_5.length-1);return}if(J.downArrow){g((R)=>R<_5.length-1?R+1:0);return}if(J.escape){Q("skip");return}if(J.return){Q(_5[E].id);return}},[E,Q])),KE.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[KE.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[KE.jsxDEV(PA,{gap:1,children:[KE.jsxDEV(f,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:!0,children:F?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[KE.jsxDEV(f,{dimColor:!0,children:F?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access."},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:_5.map((N,J)=>{let R=J===E;return KE.jsxDEV(PA,{paddingLeft:1,gap:1,children:[KE.jsxDEV(f,{color:R?N.color||"white":void 0,bold:R,children:R?"\u25B8":" "},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:R,color:R?N.color||"white":void 0,children:F?N.label.zh:N.label.en},void 0,!1,void 0,this),R&&KE.jsxDEV(f,{dimColor:!0,children:F?N.hint.zh:N.hint.en},void 0,!1,void 0,this)]},N.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u9009\u62E9":"select"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var yC=SB(pQ(),1);import{join as ak}from"path";B0();async function h5(Q){let g=`${await kg()}/${encodeURIComponent(Q).replace("%40","@")}`,F=await fetch(g,{signal:AbortSignal.timeout(1e4)});if(!F.ok)throw Error(`registry http ${F.status}`);let N=await F.json(),J=Object.keys(N.versions??{});if(!J.length)throw Error("no versions found");let R=N.time??{},Y=J.map((O)=>({version:O,publishedAt:R[O],isCurrent:!1}));return Y.sort((O,k)=>{let i=O.publishedAt?Date.parse(O.publishedAt):0;return(k.publishedAt?Date.parse(k.publishedAt):0)-i}),Y}async function b5(Q,E){let g=await import("fs/promises"),F=F8(Q.id);await g.mkdir(F,{recursive:!0});let N=ak(F,"package.json");if(!await Bun.file(N).exists())await Bun.write(N,JSON.stringify({name:`tako-${Q.id}-host`,version:"0.0.0",private:!0},null,2));let R=await kg(),Y=Bun.spawn([p0,"add",`${Q.package}@${E}`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:R}});if(await Y.exited,Y.exitCode!==0){let k=await new Response(Y.stderr).text();throw Error(`bun add ${Q.package}@${E} failed: ${k.slice(0,500).trim()}`)}let O=await oQ();await yw({installedClients:{...O.installedClients,[Q.id]:{version:E,installedAt:new Date().toISOString()}}})}async function f5(Q){return(await oQ()).installedClients[Q.id]?.version??null}K0();var DI=SB(sI(),1),uM=12,tY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}};function eY({onDone:Q}){let E=J1(),g=V0()==="zh",[F,N]=yC.useState(0),[J,R]=yC.useState(0),[Y,O]=yC.useState(0),[k,i]=yC.useState({}),[n,z]=yC.useState(null),[_,b]=yC.useState(""),j=E[F],c=yC.useCallback(async(WA)=>{i((kA)=>({...kA,[WA]:{loading:!0,versions:[],current:null}}));let KA=E.find((kA)=>kA.id===WA);if(!KA)return;try{let[kA,$A]=await Promise.all([h5(KA.package),f5(KA)]),GB=kA.map((nA)=>({...nA,isCurrent:nA.version===$A}));i((nA)=>({...nA,[WA]:{loading:!1,versions:GB,current:$A}}))}catch(kA){i(($A)=>({...$A,[WA]:{loading:!1,error:kA.message,versions:[],current:null}}))}},[E]);yC.useEffect(()=>{if(!j)return;if(!k[j.id])c(j.id)},[F,j?.id]),yC.useEffect(()=>{R(0),O(0)},[F]),yC.useEffect(()=>{if(!_)return;let WA=setTimeout(()=>b(""),3000);return()=>clearTimeout(WA)},[_]);let ZA=j?k[j.id]:void 0,SA=ZA?.versions??[],wA=yC.useCallback(async(WA)=>{if(!j||n)return;z(WA);try{await b5(j,WA),b(g?`\u2713 \u5DF2\u5207\u6362\u5230 ${WA}`:`\u2713 Switched to ${WA}`),await c(j.id)}catch(KA){b(g?`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${KA.message}`:`\u2717 Install failed: ${KA.message}`)}finally{z(null)}},[j,n,c,g]);I0((WA,KA)=>{if(n)return;if(KA.escape||WA==="q"){Q();return}if(KA.leftArrow){N(($A)=>$A>0?$A-1:E.length-1);return}if(KA.rightArrow){N(($A)=>$A<E.length-1?$A+1:0);return}if(WA==="r"){if(j)c(j.id);return}if(!SA.length)return;let kA=SA.length-1;if(KA.upArrow){R(($A)=>{let GB=Math.max(0,$A-1);if(GB<Y)O(GB);return GB});return}if(KA.downArrow){R(($A)=>{let GB=Math.min(kA,$A+1);if(GB>=Y+uM)O(GB-uM+1);return GB});return}if(KA.return){let $A=SA[J];if($A&&!$A.isCurrent)wA($A.version)}});let vA=tY[j?.id]?.color||"white",TA=SA.slice(Y,Y+uM);return DI.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[DI.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,children:[DI.jsxDEV(f,{bold:!0,children:["\uD83D\uDCE6 ",g?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"]},void 0,!0,void 0,this),_&&DI.jsxDEV(f,{color:_.startsWith("\u2713")?"green":"red",children:[" ",_]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:E.map((WA,KA)=>{let kA=tY[WA.id]||{icon:"\u25AA",color:"white"},$A=KA===F;return DI.jsxDEV(PA,{borderStyle:$A?"bold":"single",borderColor:$A?kA.color:"gray",paddingX:2,children:DI.jsxDEV(f,{bold:$A,color:$A?kA.color:void 0,dimColor:!$A,children:[kA.icon," ",WA.name]},void 0,!0,void 0,this)},WA.id,!1,void 0,this)})},void 0,!1,void 0,this),DI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:vA,paddingX:2,paddingY:1,children:!ZA||ZA.loading?DI.jsxDEV(f,{dimColor:!0,children:g?"\u52A0\u8F7D\u4E2D...":"Loading..."},void 0,!1,void 0,this):ZA.error?DI.jsxDEV(f,{color:"red",children:[g?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: ",ZA.error]},void 0,!0,void 0,this):SA.length===0?DI.jsxDEV(f,{dimColor:!0,children:g?"\u6682\u65E0\u7248\u672C":"No versions"},void 0,!1,void 0,this):DI.jsxDEV(PA,{flexDirection:"column",children:[DI.jsxDEV(f,{dimColor:!0,children:[g?`\u5171 ${SA.length} \u4E2A\u7248\u672C\uFF0C\u5F53\u524D\u5B89\u88C5\uFF1A`:`${SA.length} versions, current: `,DI.jsxDEV(f,{color:vA,children:ZA.current??(g?"\u672A\u5B89\u88C5":"not installed")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:TA.map((WA,KA)=>{let $A=Y+KA===J,GB=WA.publishedAt?WA.publishedAt.slice(0,10):"",nA=WA.isCurrent?g?" \u2605 \u5F53\u524D":" \u2605 current":"",CB=n===WA.version,AB=$A?vA:WA.isCurrent?"green":void 0;return DI.jsxDEV(PA,{paddingLeft:1,children:DI.jsxDEV(f,{color:AB,bold:$A,dimColor:!$A&&!WA.isCurrent,children:[$A?"\u25B6 ":" ",WA.version.padEnd(16),GB.padEnd(14),nA,CB?g?" \u23F3 \u5B89\u88C5\u4E2D...":" \u23F3 installing...":""]},void 0,!0,void 0,this)},WA.version,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DI.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u9009\u62E9":"select"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5B89\u88C5":"install"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var yg=SB(sI(),1);function ok({onLaunch:Q,onExit:E,initialView:g="launcher"}){let[F,N]=Vg.useState(g),[J,R]=Vg.useState([]),Y=Vg.useRef(null),O=Vg.useRef(!1);Vg.useEffect(()=>{if(O.current||g!=="launcher")return;O.current=!0,nY().then((b)=>{if(b)N("key-guide")})},[g]);let k=Vg.useCallback((b)=>{if(R((j)=>[...j.slice(-4),b]),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},[]);Vg.useEffect(()=>{let b=0;return m7({info:(j)=>k({text:j,type:"info"}),warn:(j)=>k({text:j,type:"warn"}),error:(j)=>k({text:j,type:"error"}),success:(j)=>k({text:j,type:"success"}),spin:(j)=>{let c=++b;return k({id:c,text:j,type:"spin"}),{stop:(ZA)=>{if(R((SA)=>{let wA=SA.filter((vA)=>vA.id!==c);if(ZA)wA.push({text:ZA,type:"success"});return wA.slice(-5)}),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},update:(ZA)=>{if(R((SA)=>SA.map((wA)=>wA.id===c?{...wA,text:ZA}:wA)),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)}}}}),()=>$9()},[k]);let i=Vg.useCallback(()=>N("launcher"),[]),n={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},z={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},_=(()=>{switch(F){case"launcher":return yg.jsxDEV(mY,{onResult:(b)=>{switch(b.type){case"launch":Q(b);break;case"providers":N("providers");break;case"stats":N("stats");break;case"config":N("config");break;case"language":N("language");break;case"exit":E();break}}},void 0,!1,void 0,this);case"providers":return yg.jsxDEV(bY,{onDone:(b)=>{if(b==="client-versions")N("client-versions");else i()}},void 0,!1,void 0,this);case"client-versions":return yg.jsxDEV(eY,{onDone:()=>N("providers")},void 0,!1,void 0,this);case"stats":return yg.jsxDEV(pY,{onExit:i},void 0,!1,void 0,this);case"config":return yg.jsxDEV(iY,{isReconfigure:!0,onDone:i},void 0,!1,void 0,this);case"language":return yg.jsxDEV(lY,{onDone:i},void 0,!1,void 0,this);case"key-guide":return yg.jsxDEV(rY,{onDone:(b)=>{if(b==="configure")N("config");else sY(b).then(()=>N("launcher"))}},void 0,!1,void 0,this)}})();return yg.jsxDEV(PA,{flexDirection:"column",children:[J.length>0&&yg.jsxDEV(PA,{flexDirection:"column",paddingX:2,children:J.map((b,j)=>yg.jsxDEV(f,{color:n[b.type],dimColor:b.type==="info",children:[z[b.type]," ",b.text]},j,!0,void 0,this))},void 0,!1,void 0,this),_]},void 0,!0,void 0,this)}function qM(){return new Promise((Q)=>{let E=null;function g(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause(),process.stdin.unref()}catch{}}function F(J){E?.clear(),E?.unmount(),E=null,g(),$9(),Q(J)}function N(){E?.clear(),E?.unmount(),E=null,g(),$9(),Q(null)}E=k1(yg.jsxDEV(ok,{onLaunch:F,onExit:N},void 0,!1,void 0,this))})}B0();Q2();var DF=SB(sI(),1),nk={info:"cyan",success:"green",warning:"yellow",danger:"red"};function sk(Q){return nk[Q??"info"]??"cyan"}function rk({ann:Q,onClose:E}){I0((N,J)=>{if(J.return||J.escape||N==="q")E()});let g=sk(Q.type),F=Q.content.split(/\r?\n/);return DF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:g,paddingX:2,paddingY:1,children:[DF.jsxDEV(PA,{children:DF.jsxDEV(f,{color:g,bold:!0,children:["\uD83D\uDCE3 ",Q.title]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:F.map((N,J)=>DF.jsxDEV(f,{children:N||" "},J,!1,void 0,this))},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,children:DF.jsxDEV(f,{dimColor:!0,children:Q.popup_once?"\u6309 Enter / Esc / q \u5173\u95ED\uFF0C\u672C\u6761\u53EA\u63D0\u793A\u4E00\u6B21":"\u6309 Enter / Esc / q \u5173\u95ED"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function AZ(Q){return new Promise((E)=>{let g=null;g=k1(DF.jsxDEV(rk,{ann:Q,onClose:()=>{g?.clear(),g?.unmount(),g=null,E()}},void 0,!1,void 0,this))})}var tk=2000,BZ=100;function E2(Q){if(Z9||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${Q}
625
+ `)}function QZ(Q){if(!Q)return null;if(Q.type!=="tako"&&Q.type!=="custom")return null;if(!Q.baseUrl||!Q.apiKey)return null;return{baseUrl:Q.baseUrl.replace(/\/+$/,""),apiKey:Q.apiKey}}async function ek(Q,E){let g=`${Q}/v1/announcements/popup`;try{let F=await fetch(g,{headers:{Authorization:`Bearer ${E}`},signal:AbortSignal.timeout(tk)});if(!F.ok)return E2(`HTTP ${F.status} from ${g}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let J=(await F.json())?.announcement;if(!J)return E2("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof J.id!=="string"||typeof J.title!=="string")return E2(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(J)}`),null;return E2(`\u62C9\u5230\u516C\u544A id=${J.id} title=${J.title} popup_once=${!!J.popup_once}`),{id:J.id,title:J.title,content:J.content??"",type:J.type,popup_once:!!J.popup_once}}catch(F){return E2(`fetch \u5931\u8D25\uFF1A${F instanceof Error?F.message:String(F)}`),null}}async function A$(Q){return((await oQ()).seenAnnouncementIds??[]).includes(Q)}async function B$(Q){let E=await oQ(),g=E.seenAnnouncementIds??[];if(g.includes(Q))return;let F=[...g,Q];if(F.length>BZ)F.splice(0,F.length-BZ);E.seenAnnouncementIds=F,await kC(E)}async function Q$(){let Q=QZ(await Ag());if(Q)return Q;for(let E of await JD()){let g=QZ(E);if(g)return g}return null}async function IZ(){let Q=await Q$();if(!Q){E2("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}E2(`\u67E5\u8BE2\u516C\u544A\uFF1A${Q.baseUrl}/v1/announcements/popup`);let E=await ek(Q.baseUrl,Q.apiKey);if(!E)return;if(E.popup_once&&await A$(E.id)){E2(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${E.id}`);return}if(E2(`\u5F39\u7A97\uFF1A${E.id}`),await AZ(E),E.popup_once)await B$(E.id),E2(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${E.id}`)}async function EZ(){await gM(),await DM(),await MY(),await Promise.race([$L(await JD()),new Promise((Q)=>setTimeout(Q,3000))]),await IZ();while(!0){let Q=await qM();if(!Q)break;let E=Z6(Q.clientId);if(!E)continue;E0("menu_action",{action:"launch",client_id:Q.clientId});let g=await v5(Q.clientId);if(!g){RQ.warn(tB("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let F=await P5(E,{projectPath:Q.projectPath,args:Q.args,selectedOptionIds:Q.selectedOptionIds,providerContext:g});if(!F.success)RQ.error(F.error||tB("cli.launchFailed"))}}B0();K0();import{join as C2}from"path";var OM="tako-cli",LN="0.2.54";function I$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number);for(let N=0;N<3;N++){let J=g[N]||0,R=F[N]||0;if(J>R)return 1;if(J<R)return-1}return 0}async function E$(){try{let Q=await kg(),E=await fetch(`${Q}/${OM}/latest`,{signal:AbortSignal.timeout(5000)});if(!E.ok)return null;return(await E.json()).version||null}catch{return null}}async function C$(){let Q=await E$();if(!Q)return{hasUpdate:!1,currentVersion:LN};return{hasUpdate:I$(Q,LN)>0,latestVersion:Q,currentVersion:LN}}async function CZ(){let Q=await import("fs/promises"),E=C2(W0,"bin"),g=C2(E,"tako"),F=C2(rD,"node_modules/tako-cli/dist/index.js");if(await Q.mkdir(E,{recursive:!0}),process.platform==="win32"){let J=`@echo off\r
626
626
  "${p0}" "${F}" %*\r
627
627
  `;await Q.writeFile(C2(E,"tako.cmd"),J)}else{let J=`#!/bin/bash
628
628
  exec "${p0}" "${F}" "$@"
629
629
  `;await Q.writeFile(g,J,{mode:493})}}async function g$(Q){let E=jw(),g=`\u6B63\u5728\u66F4\u65B0\u5230 v${Q}`;E.start(g);try{let F=await kg(),N=await import("fs/promises");await N.mkdir(rD,{recursive:!0});let J=C2(rD,"package.json");try{await N.access(J)}catch{await N.writeFile(J,JSON.stringify({name:"tako-local",private:!0},null,2))}let R=Bun.spawn([p0,"update",OM,"--latest"],{cwd:rD,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:F}}),Y=await T5(R,g,(O)=>E.update(O));if(await R.exited,R.exitCode===0)return await CZ(),E0("cli_updated",{from_version:LN,to_version:Q}),E.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${Q}`),!0;else return E.stop(`\u66F4\u65B0\u5931\u8D25: ${Y||"\u672A\u77E5\u9519\u8BEF"}`),!1}catch(F){return E.stop(`\u66F4\u65B0\u5931\u8D25: ${F instanceof Error?F.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function D$(){let Q=await import("fs/promises"),E=C2(rD,"bun.lock");try{await Q.unlink(E)}catch{}}async function F$(){let Q=await import("fs/promises");try{let E=await kg();await Q.mkdir(rD,{recursive:!0});let g=C2(rD,"package.json");try{await Q.access(g)}catch{await Q.writeFile(g,JSON.stringify({name:"tako-local",private:!0},null,2))}await D$();let F=Bun.spawn([p0,"add",`${OM}@latest`],{cwd:rD,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:E}});return await F.exited,F.exitCode===0}catch{return!1}}async function w$(){let Q=await import("fs/promises"),E=C2(W0,"bin"),g=C2(E,"tako"),F=C2(rD,"node_modules/tako-cli/dist/index.js");try{let N=await Q.readFile(g,"utf-8");if(N.includes("bun run tako-cli")||N.includes("run tako-cli")){RQ.info(tB("updater.migrating"));let J=!1;try{await Q.access(F),J=!0}catch{J=!1}if(!J){let R=jw();if(R.start(tB("updater.installingLocally")),!await F$())return R.stop(tB("updater.migrationFailed")),!1;R.stop(tB("updater.installComplete"))}return await CZ(),!0}}catch{}return!1}async function JN(){try{if(await w$())RQ.info(tB("updater.migrationComplete")),process.exit(0);let E=await C$();if(E.hasUpdate&&E.latestVersion){if(RQ.warn(tB("updater.newVersionAvailable",{version:E.latestVersion,current:LN})),await g$(E.latestVersion))RQ.info(tB("updater.pleaseRestart")),process.exit(0)}}catch{}}K0();import{homedir as N$}from"os";var FI={black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"};var rI={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var $E={directory:{icon:FI.brightYellow,text:FI.brightGreen},git:{icon:FI.brightBlue,text:FI.brightBlue,clean:FI.brightGreen,dirty:FI.brightYellow,conflict:FI.brightRed},model:{icon:FI.brightCyan,text:FI.brightCyan},version:{icon:FI.brightWhite,text:FI.brightBlack},outputStyle:{icon:FI.brightMagenta,text:FI.brightMagenta},context:{icon:FI.brightMagenta,low:FI.brightGreen,medium:FI.brightYellow,high:FI.brightRed},todayUsage:{icon:FI.brightGreen,text:FI.brightGreen},separator:FI.brightBlack},FF={directory:{nerd:"\uF07B",plain:"\uD83D\uDCC1"},git:{nerd:"\uE725",plain:"\uD83C\uDF3F"},model:{nerd:"\uF11B",plain:"\uD83E\uDD16"},version:{nerd:"\uF412",plain:"\uD83D\uDCBE"},outputStyle:{nerd:"\uF12F5",plain:"\uD83C\uDFAF"},context:{nerd:"\uF0E7",plain:"\u26A1"},todayUsage:{nerd:"\uF155",plain:"\uD83D\uDCB0"},gitClean:"\u2713",gitDirty:"\u25CF",gitConflict:"\u26A0",gitAhead:"\u2191",gitBehind:"\u2193"};function G$(){return!1}function g2(Q){let E=FF[Q];if(typeof E==="string")return E;return G$()?E.nerd:E.plain}class x5{id="directory";render(Q){let E=this.formatPath(Q.workspace.current_dir),g=g2("directory");return`${$E.directory.icon}${g}${rI.reset} ${$E.directory.text}${E}${rI.reset}`}formatPath(Q){let E=N$();if(Q===E)return"~";if(Q.startsWith(E+"/"))return"~"+Q.slice(E.length);return Q}}class p5{id="git";async render(Q){let E=Q.workspace.current_dir;if(!await this.isGitRepository(E))return null;let F=await this.getBranch(E);if(!F)return null;let{status:N,statusColor:J}=await this.getStatus(E),{ahead:R,behind:Y}=await this.getAheadBehind(E),O=g2("git"),k=`${$E.git.icon}${O}${rI.reset} ${$E.git.text}${F}${rI.reset}`;if(k+=` ${J}${N}${rI.reset}`,R>0)k+=` ${$E.git.clean}${FF.gitAhead}${R}${rI.reset}`;if(Y>0)k+=` ${$E.git.dirty}${FF.gitBehind}${Y}${rI.reset}`;return k}async isGitRepository(Q){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:Q,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(Q){try{let E=Bun.spawn(["git","branch","--show-current"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited===0&&g.trim())return g.trim();let N=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),J=await new Response(N.stdout).text();if(await N.exited===0&&J.trim())return`detached:${J.trim()}`;return null}catch{return null}}async getStatus(Q){try{let E=Bun.spawn(["git","status","--porcelain"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited!==0)return{status:FF.gitClean,statusColor:$E.git.clean};let N=g.trim();if(!N)return{status:FF.gitClean,statusColor:$E.git.clean};if(N.includes("UU")||N.includes("AA")||N.includes("DD"))return{status:FF.gitConflict,statusColor:$E.git.conflict};return{status:FF.gitDirty,statusColor:$E.git.dirty}}catch{return{status:FF.gitClean,statusColor:$E.git.clean}}}async getAheadBehind(Q){try{let E=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text(),N=await E.exited===0?parseInt(g.trim(),10)||0:0,J=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),R=await new Response(J.stdout).text(),O=await J.exited===0?parseInt(R.trim(),10)||0:0;return{ahead:N,behind:O}}catch{return{ahead:0,behind:0}}}}var H$={"claude-opus-4-5-20251101":"Opus 4.5","claude-opus-4-5":"Opus 4.5","claude-sonnet-4-5-20250514":"Sonnet 4.5","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4-20250514":"Sonnet 4","claude-sonnet-4":"Sonnet 4","claude-sonnet-3-5-20241022":"Sonnet 3.5","claude-3-5-sonnet-20241022":"Sonnet 3.5","claude-3-5-sonnet":"Sonnet 3.5","claude-haiku-3-5-20241022":"Haiku 3.5","claude-3-5-haiku-20241022":"Haiku 3.5","claude-3-5-haiku":"Haiku 3.5"};class d5{id="model";render(Q){let E=Q.model.id,g=H$[E]||this.simplifyModelName(Q.model.display_name),F=g2("model");return`${$E.model.icon}${F}${rI.reset} ${$E.model.text}${g}${rI.reset}`}simplifyModelName(Q){let E=Q.replace(/^Claude\s+/i,"");return E=E.replace(/-\d{8}$/,""),E}}var U$=200000;class D2{id="context";static cache=null;static CACHE_TTL=5000;async render(Q){let E=await this.getTokensWithCache(Q.transcript_path),F=OL(Q.model.id)?.contextWindow??U$,N=Math.round((E??0)/F*100),J=Math.max(0,100-N),R=g2("context"),Y=J<=20?FI.brightRed:J<=50?FI.brightYellow:FI.brightGreen;return`${$E.context.icon}${R}${rI.reset} ${Y}${J}%${rI.reset}`}async getTokensWithCache(Q){let E=Date.now();if(D2.cache&&D2.cache.path===Q&&E-D2.cache.timestamp<D2.CACHE_TTL)return D2.cache.tokens;let g=await this.parseTranscriptTokens(Q);return D2.cache={path:Q,tokens:g,timestamp:E},g}async parseTranscriptTokens(Q){try{let E=Bun.file(Q);if(!await E.exists())return null;let g=await E.text();if(!g.trim())return null;let F=g.split(`
630
- `).filter((N)=>N.trim());for(let N=F.length-1;N>=0;N--)try{let J=JSON.parse(F[N]);if(J.type==="assistant"&&J.message?.usage){let R=J.message.usage;return(R.input_tokens||0)+(R.output_tokens||0)+(R.cache_creation_input_tokens||0)+(R.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}m5();B0();Q2();class i5{id="quota";async render(Q){let E=await this.tryRenderOfficial();if(E)return E;return this.renderSessionCost(Q)}async tryRenderOfficial(){try{let Q=await IF("claude-code")??await Ag();if(!Q){let g=await Vw().catch(()=>"");if(!g)return null;let F=await GN(g);return this.renderTako(F)}let E=await NN(Q);if(E.status!=="ok")return null;switch(E.provider){case"tako":return this.renderTako(E);case"claude-subscription":return this.renderClaudeSub(E);case"codex-subscription":return this.renderCodexSub(E);default:return null}}catch{return null}}renderTako(Q){if(Q.status!=="ok")return null;if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit))return this.renderSub(Q);let g=Q.daily??Q.primary??Q.secondary;if(!g)return null;let F=g.costUsed??0;return`${this.icon()} ${FI.brightGreen}Day:${this.fmtCost(F)}${rI.reset}`}renderSub(Q){let E=(F,N,J)=>{if(F&&F>=1440)return`${Math.round(F/1440)}d`;if(F)return`${Math.round(F/60)}h`;return J?`${J}d`:`${N}h`},g=[];if(Q.primary)g.push(this.remainChunk(E(Q.primary.windowMinutes,5),Q.primary.usedPct));if(Q.secondary)g.push(this.remainChunk(E(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct));if(Q.modelLimits?.opus)g.push(this.remainChunk("opus",Q.modelLimits.opus.usedPct));if(!g.length)return null;return`${this.icon()} ${g.join(`${rI.dim} \xB7 ${rI.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(Q,E){let g=E>=90?FI.brightRed:E>=70?FI.brightYellow:FI.brightGreen;return`${Q}:${g}${E}%${rI.reset}`}remainChunk(Q,E){let g=Math.max(0,Math.min(100,100-Math.round(E))),F=g<=10?FI.brightRed:g<=30?FI.brightYellow:FI.brightGreen;return`${Q} \u5269 ${F}${g}%${rI.reset}`}renderSessionCost(Q){let E=Q.cost?.total_cost_usd;if(E==null||E<=0)return null;return`${this.icon()} ${FI.brightGreen}Session:${this.fmtCost(E)}${rI.reset}`}icon(){return`${$E.todayUsage.icon}${g2("todayUsage")}${rI.reset}`}fmtCost(Q){if(Q>=100)return`$${Math.round(Q)}`;if(Q>=10)return`$${Q.toFixed(1)}`;return`$${Q.toFixed(2)}`}}class zM{separator=`${$E.separator} \u2502 ${rI.reset}`;render(Q){let E=["directory","git","model","context","quota"],g=[];for(let F of E){let N=Q.get(F);if(N)g.push(N)}return g.join(this.separator)}}import{join as m1,dirname as L$}from"path";import{homedir as SM}from"os";import{mkdir as J$}from"fs/promises";var gZ=m1(SM(),".tako"),M$=m1(gZ,"cli"),R$=m1(gZ,"bin",process.platform==="win32"?"tako.cmd":"tako");function W$(){if(process.platform==="win32")return m1(process.env.APPDATA||m1(SM(),"AppData","Roaming"),"claude","settings.json");return m1(SM(),".claude","settings.json")}var K$=process.platform==="win32",Y$="0.1.48";function Z$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number),N=Math.max(g.length,F.length);for(let J=0;J<N;J++){let R=g[J]||0,Y=F[J]||0;if(R!==Y)return R-Y}return 0}async function X$(){let Q=m1(M$,"node_modules","tako-cli","package.json");try{let E=Bun.file(Q);if(!await E.exists())return null;return(await E.json()).version||null}catch{return null}}async function u$(){let Q=await X$();if(!Q)return!1;return Z$(Q,Y$)>=0}function q$(){return R$}function O$(){return`"${z$(q$())}" statusline`}function z$(Q){if(K$)return Q.replace(/\\/g,"/");return Q}async function kM(){if(!await u$())return;let E=W$(),g={};try{let J=Bun.file(E);if(await J.exists())g=await J.json()}catch{}let F={type:"command",command:O$(),padding:0},N=typeof g.statusLine==="object"&&g.statusLine!==null?g.statusLine.command:null;if(typeof N==="string"&&N.includes("tako statusline"))return;g.statusLine=F,await J$(L$(E),{recursive:!0}),await Bun.write(E,JSON.stringify(g,null,2))}var S$=[new x5,new p5,new d5,new D2,new i5];async function k$(Q){let E=await Promise.all(S$.map(async(N)=>{try{let J=await N.render(Q);return{id:N.id,content:J}}catch{return{id:N.id,content:null}}})),g=new Map;for(let{id:N,content:J}of E)g.set(N,J);return new zM().render(g)}async function DZ(){try{let Q=await Bun.stdin.json(),E=await k$(Q);console.log(E)}catch{process.exit(0)}}B0();var yM="0.2.53";function $$(){console.log(`
630
+ `).filter((N)=>N.trim());for(let N=F.length-1;N>=0;N--)try{let J=JSON.parse(F[N]);if(J.type==="assistant"&&J.message?.usage){let R=J.message.usage;return(R.input_tokens||0)+(R.output_tokens||0)+(R.cache_creation_input_tokens||0)+(R.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}m5();B0();Q2();class i5{id="quota";async render(Q){let E=await this.tryRenderOfficial();if(E)return E;return this.renderSessionCost(Q)}async tryRenderOfficial(){try{let Q=await IF("claude-code")??await Ag();if(!Q){let g=await Vw().catch(()=>"");if(!g)return null;let F=await GN(g);return this.renderTako(F)}let E=await NN(Q);if(E.status!=="ok")return null;switch(E.provider){case"tako":return this.renderTako(E);case"claude-subscription":return this.renderClaudeSub(E);case"codex-subscription":return this.renderCodexSub(E);default:return null}}catch{return null}}renderTako(Q){if(Q.status!=="ok")return null;if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit))return this.renderSub(Q);let g=Q.daily??Q.primary??Q.secondary;if(!g)return null;let F=g.costUsed??0;return`${this.icon()} ${FI.brightGreen}Day:${this.fmtCost(F)}${rI.reset}`}renderSub(Q){let E=(F,N,J)=>{if(F&&F>=1440)return`${Math.round(F/1440)}d`;if(F)return`${Math.round(F/60)}h`;return J?`${J}d`:`${N}h`},g=[];if(Q.primary)g.push(this.remainChunk(E(Q.primary.windowMinutes,5),Q.primary.usedPct));if(Q.secondary)g.push(this.remainChunk(E(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct));if(Q.modelLimits?.opus)g.push(this.remainChunk("opus",Q.modelLimits.opus.usedPct));if(!g.length)return null;return`${this.icon()} ${g.join(`${rI.dim} \xB7 ${rI.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(Q,E){let g=E>=90?FI.brightRed:E>=70?FI.brightYellow:FI.brightGreen;return`${Q}:${g}${E}%${rI.reset}`}remainChunk(Q,E){let g=Math.max(0,Math.min(100,100-Math.round(E))),F=g<=10?FI.brightRed:g<=30?FI.brightYellow:FI.brightGreen;return`${Q} \u5269 ${F}${g}%${rI.reset}`}renderSessionCost(Q){let E=Q.cost?.total_cost_usd;if(E==null||E<=0)return null;return`${this.icon()} ${FI.brightGreen}Session:${this.fmtCost(E)}${rI.reset}`}icon(){return`${$E.todayUsage.icon}${g2("todayUsage")}${rI.reset}`}fmtCost(Q){if(Q>=100)return`$${Math.round(Q)}`;if(Q>=10)return`$${Q.toFixed(1)}`;return`$${Q.toFixed(2)}`}}class zM{separator=`${$E.separator} \u2502 ${rI.reset}`;render(Q){let E=["directory","git","model","context","quota"],g=[];for(let F of E){let N=Q.get(F);if(N)g.push(N)}return g.join(this.separator)}}import{join as m1,dirname as L$}from"path";import{homedir as SM}from"os";import{mkdir as J$}from"fs/promises";var gZ=m1(SM(),".tako"),M$=m1(gZ,"cli"),R$=m1(gZ,"bin",process.platform==="win32"?"tako.cmd":"tako");function W$(){if(process.platform==="win32")return m1(process.env.APPDATA||m1(SM(),"AppData","Roaming"),"claude","settings.json");return m1(SM(),".claude","settings.json")}var K$=process.platform==="win32",Y$="0.1.48";function Z$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number),N=Math.max(g.length,F.length);for(let J=0;J<N;J++){let R=g[J]||0,Y=F[J]||0;if(R!==Y)return R-Y}return 0}async function X$(){let Q=m1(M$,"node_modules","tako-cli","package.json");try{let E=Bun.file(Q);if(!await E.exists())return null;return(await E.json()).version||null}catch{return null}}async function u$(){let Q=await X$();if(!Q)return!1;return Z$(Q,Y$)>=0}function q$(){return R$}function O$(){return`"${z$(q$())}" statusline`}function z$(Q){if(K$)return Q.replace(/\\/g,"/");return Q}async function kM(){if(!await u$())return;let E=W$(),g={};try{let J=Bun.file(E);if(await J.exists())g=await J.json()}catch{}let F={type:"command",command:O$(),padding:0},N=typeof g.statusLine==="object"&&g.statusLine!==null?g.statusLine.command:null;if(typeof N==="string"&&N.includes("tako statusline"))return;g.statusLine=F,await J$(L$(E),{recursive:!0}),await Bun.write(E,JSON.stringify(g,null,2))}var S$=[new x5,new p5,new d5,new D2,new i5];async function k$(Q){let E=await Promise.all(S$.map(async(N)=>{try{let J=await N.render(Q);return{id:N.id,content:J}}catch{return{id:N.id,content:null}}})),g=new Map;for(let{id:N,content:J}of E)g.set(N,J);return new zM().render(g)}async function DZ(){try{let Q=await Bun.stdin.json(),E=await k$(Q);console.log(E)}catch{process.exit(0)}}B0();var yM="0.2.54";function $$(){console.log(`
631
631
  ${tB("cli.version",{version:yM})}
632
632
 
633
633
  ${tB("cli.usage")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tako-cli",
3
- "version": "0.2.53",
3
+ "version": "0.2.54",
4
4
  "description": "Tako CLI - AI coding tools launcher",
5
5
  "type": "module",
6
6
  "bin": {