tako-cli 0.2.38 → 0.2.39

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 +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -610,12 +610,12 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
610
610
  `)}patchConsole(){if(this.options.debug)return;this.restoreConsole=A7((I,E)=>{if(I==="stdout")this.writeToStdout(E);if(I==="stderr"){if(!E.startsWith("The above error occurred"))this.writeToStderr(E)}})}initKittyKeyboard(){if(!this.options.kittyKeyboard)return;let I=this.options.kittyKeyboard,E=I.mode??"auto";if(E==="disabled"||!this.options.stdin.isTTY||!this.options.stdout.isTTY)return;let g=I.flags??["disambiguateEscapeCodes"];if(E==="enabled"){this.enableKittyProtocol(g);return}let w=uH.env.TERM??"",J=uH.env.TERM_PROGRAM??"",R="KITTY_WINDOW_ID"in uH.env||w==="xterm-kitty"||J==="WezTerm"||J==="ghostty";if(!c0&&R)this.confirmKittySupport(g)}confirmKittySupport(I){let{stdin:E,stdout:g}=this.options,w=[],J=()=>{this.cancelKittyDetection=void 0,clearTimeout(L),E.removeListener("data",R);let X=jO(w);if(w=[],X.length>0)E.unshift(Buffer.from(X))},R=(X)=>{let z=typeof X==="string"?Buffer.from(X):X;for(let _ of z)w.push(_);if(PO(w)){if(J(),!this.isUnmounted)this.enableKittyProtocol(I)}};E.on("data",R);let L=setTimeout(J,200);this.cancelKittyDetection=J,g.write("\x1B[?u")}enableKittyProtocol(I){this.options.stdout.write(`\x1B[>${KL(I)}u`),this.kittyProtocolEnabled=!0}}var fO=(I,E)=>{let g={stdout:eM.stdout,stdin:eM.stdin,stderr:eM.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,maxFps:30,incrementalRendering:!1,concurrent:!1,...vO(E)},w=bO(g.stdout,()=>new tM(g),g.concurrent??!1);return w.render(I),{rerender:w.render,unmount(){w.unmount()},waitUntilExit:w.waitUntilExit,cleanup:()=>yH.delete(g.stdout),clear:w.clear}},v1=fO,vO=(I={})=>{if(I instanceof hO)return{stdout:I,stdin:eM.stdin};return I},bO=(I,E,g)=>{let w=yH.get(I);if(!w)w=E(),yH.set(I,w);else if(w.isConcurrent!==g)console.warn(`Warning: render() was called with concurrent: ${g}, but the existing instance for this stdout uses concurrent: ${w.isConcurrent}. The concurrent option only takes effect on the first render. Call unmount() first if you need to change the rendering mode.`);return w};var mO=fB(JM(),1);var AR=fB(pI(),1);var ZL=fB(pI(),1);var xO=fB(pI(),1);var pO=fB(pI(),1);var NN=fB(pI(),1);import{Buffer as cO}from"buffer";var lO=/^(?:\x1b)([a-zA-Z0-9])$/,dO=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,WL={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"},qL=[...Object.values(WL),"backspace"],aO=(I)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(I)},iO=(I)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(I)},OL=/^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/,oO=/^\x1b\[(\d+);(\d+):(\d+)([A-Za-z~])$/,sO={A:"up",B:"down",C:"right",D:"left",E:"clear",F:"end",H:"home",P:"f1",Q:"f2",R:"f3",S:"f4"},nO={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"},XL={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"},SL=(I)=>I>=0&&I<=1114111&&!(I>=55296&&I<=57343),RN=(I)=>SL(I)?String.fromCodePoint(I):"?";function zL(I){if(I===3)return"release";if(I===2)return"repeat";return"press"}function kL(I){return{ctrl:!!(I&a0.ctrl),shift:!!(I&a0.shift),meta:!!(I&a0.meta),option:!!(I&a0.alt),super:!!(I&a0.super),hyper:!!(I&a0.hyper),capsLock:!!(I&a0.capsLock),numLock:!!(I&a0.numLock)}}var rO=(I)=>{let E=OL.exec(I);if(!E)return null;let g=parseInt(E[1],10),w=E[2]?Math.max(0,parseInt(E[2],10)-1):0,J=E[3]?parseInt(E[3],10):1,R=E[4];if(!SL(g))return null;let L;if(R)L=R.split(":").map((_)=>RN(parseInt(_,10))).join("");let X,z;if(g===32)X="space",z=!0;else if(g===13)X="return",z=!0;else if(XL[g])X=XL[g],z=!1;else if(g>=1&&g<=26)X=String.fromCodePoint(g+96),z=!1;else X=RN(g).toLowerCase(),z=!0;if(z&&!L)L=RN(g);return{name:X,...kL(w),eventType:zL(J),sequence:I,raw:I,isKittyProtocol:!0,isPrintable:z,text:L}},tO=(I)=>{let E=oO.exec(I);if(!E)return null;let g=parseInt(E[1],10),w=Math.max(0,parseInt(E[2],10)-1),J=parseInt(E[3],10),R=E[4],L=R==="~"?nO[g]:sO[R];if(!L)return null;return{name:L,...kL(w),eventType:zL(J),sequence:I,raw:I,isKittyProtocol:!0,isPrintable:!1}},eO=(I="")=>{let E;if(cO.isBuffer(I))if(I[0]>127&&I[1]===void 0)I[0]-=128,I="\x1B"+String(I);else I=String(I);else if(I!==void 0&&typeof I!=="string")I=String(I);else if(!I)I="";let g=rO(I);if(g)return g;let w=tO(I);if(w)return w;if(OL.test(I))return{name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:I,raw:I,isKittyProtocol:!0,isPrintable:!1};let J={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:I,raw:I};if(J.sequence=J.sequence||I||J.name,I==="\r"||I==="\x1B\r")J.raw=void 0,J.name="return",J.option=I.length===2;else if(I===`
611
611
  `)J.name="enter";else if(I==="\t")J.name="tab";else if(I==="\b"||I==="\x1B\b")J.name="backspace",J.meta=I.charAt(0)==="\x1B";else if(I==="\x7F"||I==="\x1B\x7F")J.name="delete",J.meta=I.charAt(0)==="\x1B";else if(I==="\x1B"||I==="\x1B\x1B")J.name="escape",J.meta=I.length===2;else if(I===" "||I==="\x1B ")J.name="space",J.meta=I.length===2;else if(I.length===1&&I<="\x1A")J.name=String.fromCharCode(I.charCodeAt(0)+97-1),J.ctrl=!0;else if(I.length===1&&I>="0"&&I<="9")J.name="number";else if(I.length===1&&I>="a"&&I<="z")J.name=I;else if(I.length===1&&I>="A"&&I<="Z")J.name=I.toLowerCase(),J.shift=!0;else if(E=lO.exec(I))J.meta=!0,J.shift=/^[A-Z]$/.test(E[1]);else if(E=dO.exec(I)){let R=[...I];if(R[0]==="\x1B"&&R[1]==="\x1B")J.option=!0;let L=[E[1],E[2],E[4],E[6]].filter(Boolean).join(""),X=(E[3]||E[5]||1)-1;J.ctrl=!!(X&4),J.meta=!!(X&10),J.shift=!!(X&1),J.code=L,J.name=WL[L],J.shift=aO(L)||J.shift,J.ctrl=iO(L)||J.ctrl}return J},$L=eO;var VL=fB(pI(),1);var AS=()=>VL.useContext(cM),_H=AS;var BS=(I,E={})=>{let{stdin:g,setRawMode:w,internal_exitOnCtrlC:J,internal_eventEmitter:R}=_H();NN.useEffect(()=>{if(E.isActive===!1)return;return w(!0),()=>{w(!1)}},[E.isActive,w]),NN.useEffect(()=>{if(E.isActive===!1)return;let L=(X)=>{let z=$L(X),_={upArrow:z.name==="up",downArrow:z.name==="down",leftArrow:z.name==="left",rightArrow:z.name==="right",pageDown:z.name==="pagedown",pageUp:z.name==="pageup",home:z.name==="home",end:z.name==="end",return:z.name==="return",escape:z.name==="escape",ctrl:z.ctrl,shift:z.shift,tab:z.name==="tab",backspace:z.name==="backspace",delete:z.name==="delete",meta:z.meta||z.name==="escape"||z.option,super:z.super??!1,hyper:z.hyper??!1,capsLock:z.capsLock??!1,numLock:z.numLock??!1,eventType:z.eventType},i;if(z.isKittyProtocol)if(z.isPrintable)i=z.text??z.name;else if(z.ctrl&&z.name.length===1)i=z.name;else i="";else if(z.ctrl)i=z.name;else i=z.sequence;if(!z.isKittyProtocol&&qL.includes(z.name))i="";if(i.startsWith("\x1B"))i=i.slice(1);if(i.length===1&&typeof i[0]==="string"&&/[A-Z]/.test(i[0]))_.shift=!0;if(!(i==="c"&&_.ctrl)||!J)Lg.batchedUpdates(()=>{I(i,_)})};return R?.on("input",L),()=>{R?.removeListener("input",L)}},[E.isActive,g,J,I])},nC=BS;var IS=fB(pI(),1);var TL=fB(pI(),1);var QS=()=>TL.useContext(lM),KN=QS;var ES=fB(pI(),1);var YN=fB(pI(),1);var CS=fB(pI(),1);var DS=fB(pI(),1);var BR=fB(pI(),1);var dD=fB(tE(),1);function FS({message:I,defaultValue:E,onResult:g}){let[w,J]=yL.useState(E);return nC((R,L)=>{if(L.leftArrow||L.rightArrow||R==="h"||R==="l"){J((X)=>!X);return}if(R==="y"||R==="Y"){g(!0);return}if(R==="n"||R==="N"){g(!1);return}if(L.return){g(w);return}if(L.escape){g(!1);return}}),dD.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[dD.jsxDEV(rA,{gap:1,children:[dD.jsxDEV(a,{color:"yellow",bold:!0,children:"?"},void 0,!1,void 0,this),dD.jsxDEV(a,{bold:!0,children:I},void 0,!1,void 0,this)]},void 0,!0,void 0,this),dD.jsxDEV(rA,{marginTop:1,gap:3,children:[dD.jsxDEV(rA,{gap:1,children:dD.jsxDEV(a,{color:w?"green":void 0,bold:w,inverse:w,children:w?" Yes ":" Yes "},void 0,!1,void 0,this)},void 0,!1,void 0,this),dD.jsxDEV(rA,{gap:1,children:dD.jsxDEV(a,{color:!w?"red":void 0,bold:!w,inverse:!w,children:!w?" No ":" No "},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),dD.jsxDEV(rA,{marginTop:1,children:dD.jsxDEV(a,{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 IR(I){return new Promise((E)=>{let g=null;g=v1(dD.jsxDEV(FS,{message:I.message,defaultValue:I.defaultValue??!0,onResult:(w)=>{g?.clear(),g?.unmount(),g=null,E(w)}},void 0,!1,void 0,this))})}OC();var _L=US(HS(),".claude","settings.json"),JS=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];function MS(I){if(I.startsWith("ANTHROPIC_"))return!0;return JS.includes(I)}async function RS(){let I=await import("fs/promises"),E;try{E=await I.readFile(_L,"utf-8")}catch{return}let g;try{g=JSON.parse(E)}catch{return}let w=[];if(g.env&&typeof g.env==="object"){for(let R of Object.keys(g.env))if(MS(R))w.push(R),delete g.env[R];if(Object.keys(g.env).length===0)delete g.env}if(w.length===0)return;if(WI.warn(QI("claudeCode.settingsDetected",{fields:w.join(", ")})),!await IR({message:QI("claudeCode.confirmClean"),defaultValue:!0})){WI.info(QI("claudeCode.cleanSkipped"));return}await I.writeFile(_L,JSON.stringify(g,null,2)+`
612
612
  `),WI.success(QI("claudeCode.settingsCleaned"))}var NS={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(I){let E={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"};switch(I.type){case"claude-subscription":return E;case"tako":return{...E,ANTHROPIC_BASE_URL:`${I.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:I.apiKey,...I.model?{ANTHROPIC_MODEL:I.model}:{}};case"anthropic":return{...E,ANTHROPIC_API_KEY:I.apiKey,...I.model?{ANTHROPIC_MODEL:I.model}:{}};case"deepseek":return{...E,ANTHROPIC_BASE_URL:fK,ANTHROPIC_AUTH_TOKEN:I.apiKey,...I.model?{ANTHROPIC_MODEL:I.model}:{}};case"custom":return{...E,ANTHROPIC_BASE_URL:I.baseUrl,ANTHROPIC_AUTH_TOKEN:I.apiKey,...I.model?{ANTHROPIC_MODEL:I.model}:{}};default:return E}},async setupConfigFiles(I){if(I.type==="tako"||I.type==="custom")await RS()},launchOptions:[{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:"verbose",label:{en:"Verbose",zh:"\u8BE6\u7EC6\u65E5\u5FD7"},shortLabel:"Verbose",description:{en:"Show full invocation details",zh:"\u663E\u793A\u5B8C\u6574\u7684\u8C03\u7528\u8FC7\u7A0B"},flag:"--verbose",args:["--verbose"]},{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"]}]};JH(NS);import{homedir as KS}from"os";import{join as jL}from"path";var hL=jL(KS(),".gemini"),PL=jL(hL,"settings.json");async function YS(){let I=await import("fs/promises");try{await I.mkdir(hL,{recursive:!0})}catch{}let E={};try{E=JSON.parse(await I.readFile(PL,"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(PL,JSON.stringify(E,null,2)+`
613
- `)}var LS={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(I){return{GEMINI_API_KEY:I.apiKey,GOOGLE_GEMINI_BASE_URL:I.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:YS};JH(LS);import{join as AC}from"path";OC();var ER=null,CR={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}};async function PH(){if(ER)return ER;let I=[ZS,XS,WS];for(let E of I)try{let g=await Promise.race([E(),new Promise((w,J)=>setTimeout(()=>J(Error("timeout")),3000))]);if(g)return ER=g,g}catch{}return ER="cn","cn"}async function ZS(){try{let I=await fetch("http://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(2000)});if(!I.ok)return null;return(await I.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function XS(){try{let I=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(2000)});if(!I.ok)return null;return(await I.json()).country==="CN"?"cn":"global"}catch{return null}}async function WS(){try{let I=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(2000)});if(!I.ok)return null;return(await I.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function qS(){let I=await PH();return CR[I]}async function lF(){return(await qS()).npm}function fL(){return"curl -fsSL https://bun.sh/install | bash"}async function OS(){let I=CR.cn.bunBinary,E=await fetch(`${I}/`,{signal:AbortSignal.timeout(1e4)});if(!E.ok)throw Error(`Failed to fetch bun versions: ${E.status}`);let w=(await E.json()).map((J)=>J.name.replace(/\/$/,"")).filter((J)=>/^bun-v\d+\.\d+\.\d+$/.test(J)).sort((J,R)=>{let L=J.replace("bun-v","").split(".").map(Number),X=R.replace("bun-v","").split(".").map(Number);for(let z=0;z<3;z++)if(L[z]!==X[z])return X[z]-L[z];return 0});if(w.length===0)throw Error("No bun versions found on mirror");return w[0]}async function vL(){let I=CR.cn.bunBinary,E=await OS(),w={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",J=process.arch==="arm64"?"aarch64":"x64",R=`bun-${w}-${J}`;return`${I}/${E}/${R}.zip`}async function bL(){let I=await PH(),E=CR[I];if(I==="cn")WI.info(`${QI("region.usingChinaMirror")} npm: ${E.npm}`);else WI.info(QI("region.usingGlobalMirror"))}var SS=class{constructor(I){this.baseUrl=I.baseUrl,this.headers={"Content-Type":"application/json",...I.defaultHeaders},this.maxRetries=I.maxRetries??3,this.initialRetryDelay=I.initialRetryDelay??500}async resolveHeaders(){let I={};for(let[E,g]of Object.entries(this.headers)){let w=await g;w!==null&&(I[E]=w)}return I}addHeader(I,E){this.headers[I]=E}async post(I,E,g,w){try{let J=await fetch(I,{method:"POST",headers:await this.resolveHeaders(),body:E?JSON.stringify(E??{}):void 0,keepalive:!0,...g});if(J.status===401)return null;if(J.status!==200&&J.status!==202)throw Error(`HTTP error! status: ${J.status}`);let R=await J.text();return R?JSON.parse(R):null}catch(J){if(w<this.maxRetries){let R=this.initialRetryDelay*2**w;return await new Promise((L)=>setTimeout(L,R)),this.post(I,E,g,w+1)}return console.error("Max retries reached:",J),null}}async fetch(I,E,g={}){let w=`${this.baseUrl}${I}`;return this.post(w,E,g,0)}},mL=class{constructor(I){this.options=I,this.queue=[];let E={"openpanel-client-id":I.clientId};I.clientSecret&&(E["openpanel-client-secret"]=I.clientSecret),E["openpanel-sdk-name"]=I.sdk||"node",E["openpanel-sdk-version"]=I.sdkVersion||"1.0.4",this.api=new SS({baseUrl:I.apiUrl||"https://api.openpanel.dev",defaultHeaders:E})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(I){return this.options.disabled||this.options.filter&&!this.options.filter(I)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(I),Promise.resolve()):this.api.fetch("/track",I)}setGlobalProperties(I){this.global={...this.global,...I}}async track(I,E){return this.log("track event",I,E),this.send({type:"track",payload:{name:I,profileId:E?.profileId??this.profileId,properties:{...this.global??{},...E??{}}}})}async identify(I){if(this.log("identify user",I),I.profileId&&(this.profileId=I.profileId,this.flush()),Object.keys(I).length>1)return this.send({type:"identify",payload:{...I,properties:{...this.global,...I.properties}}})}async alias(I){}async increment(I){return this.send({type:"increment",payload:I})}async decrement(I){return this.send({type:"decrement",payload:I})}async revenue(I,E){let g=E?.deviceId;return delete E?.deviceId,this.track("revenue",{...E??{},...g?{__deviceId:g}:{},__revenue:I})}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((I)=>{this.send({...I,payload:{...I.payload,profileId:I.payload.profileId??this.profileId}})}),this.queue=[]}log(...I){this.options.debug&&console.log("[OpenPanel.dev]",...I)}};var zS="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",kS="sec_1e0ea34016bc3a5f8ef5",$S="https://op.shiroha.tech/api",jH=null;function xL(){if(!jH)jH=new mL({clientId:zS,clientSecret:kS,apiUrl:$S});return jH}var DR=[];function pL(I,E,g){let w=xL().track(I,{profileId:E,...g}).catch(()=>{});DR.push(w)}function cL(I,E){let{email:g,...w}=E,J=xL().identify({profileId:I,...typeof g==="string"?{email:g}:{},firstName:String(w.platform||""),properties:w}).catch(()=>{});DR.push(J)}async function lL(){if(await Promise.allSettled(DR),DR.length=0,jH){try{jH.flush()}catch{}jH=null}}OC();OC();var VS="0.2.38";function dL(){return{cli_version:VS,platform:process.platform,arch:process.arch,locale:RG(),node_version:process.version}}function aL(I){return Bun.hash(I).toString(16).slice(0,8)}var TS="0.2.38",ZN=!1,hH=null;async function iL(){if(hH!==null)return hH;try{return hH=(await FQ()).telemetryEnabled!==!1,hH}catch{return hH=!1,!1}}async function oL(){try{let I=await FQ();if(I.apiId)return I.apiId;let E=I.providers??[],g=I.defaultProviderId,w=g?E.find((J)=>J.id===g):E[0];if(w){if(w.apiId)return w.apiId;if(w.email)return w.email;return w.id}return"anonymous"}catch{return"anonymous"}}async function g0(){if(ZN)return;try{if(!await iL())return;let I=await FQ(),E=await oL();if(E==="anonymous")return;let w=(I.providers??[]).find((R)=>R.email)?.email,J=await PH();cL(E,{...w?{email:w}:{},region:J,locale:RG(),first_seen_version:TS,platform:process.platform,arch:process.arch}),ZN=!0}catch{}}function eE(I,E){yS(I,E).catch(()=>{})}async function yS(I,E){try{if(!await iL())return;let g=await oL();pL(I,g,{...dL(),...E})}catch{}}async function b1(){await lL()}function dF(){hH=null,ZN=!1}var NG=null;function uS(I){return I.startsWith(o2)}async function _S(){try{if(!await Bun.file(qD).exists())return null;let E=Bun.spawn([qD,"--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 sL(){return await _S()!==null}async function PS(){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{}WI.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let I=["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 I)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 jS(I){let E=await import("fs/promises"),{join:g}=await import("path"),w=process.platform==="win32",J=w?"bun.exe":"bun",R=await vL();WI.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${R}`);let L=await fetch(R);if(!L.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${L.status}`);let X=g(I,"bun-download.zip");await Bun.write(X,L);let z=g(I,"bin");if(await E.mkdir(z,{recursive:!0}),w){let i=`Expand-Archive -Path "${X}" -DestinationPath "${I}" -Force`,BA=Bun.spawn(["powershell","-Command",i],{stdout:"pipe",stderr:"pipe"});if(await BA.exited,BA.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let i=Bun.spawn(["unzip","-oq",X,"-d",I],{stdout:"pipe",stderr:"pipe"});if(await i.exited,i.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let _=await E.readdir(I);for(let i of _){let BA=g(I,i);if((await E.stat(BA)).isDirectory()&&i.startsWith("bun-")){let v=g(BA,J);try{if(await E.access(v),await E.rename(v,g(z,J)),!w)await E.chmod(g(z,J),493);await E.rm(BA,{recursive:!0,force:!0});break}catch{}}}return await E.rm(X,{force:!0}),!0}async function hS(){let I=RH();if(!await PS())return WI.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await bL(),I.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(o2,{recursive:!0}),await PH()==="cn")await jS(o2);else if(process.platform==="win32"){let w=`$env:BUN_INSTALL="${o2}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",w],{stdout:"inherit",stderr:"inherit"}).exited!==0)return I.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let w=`BUN_INSTALL="${o2}" ${fL()}`;if(await Bun.spawn(["bash","-c",w],{stdout:"inherit",stderr:"inherit"}).exited!==0)return I.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return NG=qD,I.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),WI.info(`\u5B89\u88C5\u4F4D\u7F6E: ${o2}`),!0}catch(E){return I.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function fS(){if(await sL())return NG=qD,!0;return WI.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),WI.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await hS()}async function m1(){if(NG){if(!uS(NG))NG=qD;return NG}if(await sL())return NG=qD,qD;return qD}async function zN(I){try{let E=await lF(),g=await fetch(`${E}/${I}/latest`);if(!g.ok)return null;return(await g.json()).version}catch{return null}}async function vS(I){return(await FQ()).installedClients[I.id]?.version||null}async function nL(I){let E=UH(I.id),g=AC(E,"package.json");try{return await Bun.file(g).exists()}catch{return!1}}async function rL(I){let E=await vS(I);if(!E)return!0;let g=await zN(I.package);if(!g)return!1;return E!==g}function tL(I){let{platform:E,arch:g}=process,w=`${E}-${g}`;for(let[J,R]of Object.entries(I))if(J.endsWith(w))return{pkg:J,version:R};return null}async function eL(I,E,g,w){let J=AC(E,"node_modules",I.package,"package.json");try{let R=Bun.file(J);if(!await R.exists())return;let X=(await R.json()).optionalDependencies;if(!X||typeof X!=="object")return;let z=tL(X);if(!z)return;let i=process.platform==="win32"?`${I.command}.exe`:I.command,BA=AC(E,"node_modules",z.pkg,i),S=Bun.file(BA);if(await S.exists()&&S.size>1024)return;WI.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${z.pkg}...`);for(let v of[z.version,"latest"]){let h=Bun.spawn([g,"add",`${z.pkg}@${v}`],{cwd:E,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:w}});if(await h.exited,h.exitCode===0)break;if(v==="latest"){let b=await new Response(h.stderr).text();WI.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${b.slice(0,200)}`)}}}catch(R){WI.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${R instanceof Error?R.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function qN(I,E){let g=await import("fs/promises"),w=AC(E,"node_modules",I.package,"package.json");try{let J=Bun.file(w);if(!await J.exists())return!1;let R=await J.json(),L=R.optionalDependencies;if(!L)return!0;let X=tL(L);if(!X)return WI.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let z=R.bin,_=typeof z==="string"?z:z?.[I.command];if(!_)return!1;let i=AC(E,"node_modules",I.package,_),BA=process.platform==="win32",S=BA?`${I.command}.exe`:I.command,v=AC(E,"node_modules",X.pkg,S),h=Bun.file(v);if(await h.exists()&&h.size>1024){if(await Bun.write(i,h),!BA)await g.chmod(i,493);return!0}let b=AC(E,"node_modules",I.package,"install.cjs");if(await Bun.file(b).exists()){WI.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let bA=await m1(),_A=Bun.spawn([bA,b],{cwd:AC(E,"node_modules",I.package),stdout:"pipe",stderr:"pipe"});if(await _A.exited,_A.exitCode!==0){let uA=await new Response(_A.stderr).text();WI.warn(`postinstall \u5931\u8D25: ${uA.slice(0,200)}`)}let JA=Bun.file(i);if(await JA.exists()&&JA.size>1024){if(!BA)await g.chmod(i,493);return!0}}WI.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let p=await lF();for(let bA of[X.version,"latest"])try{let _A=await fetch(`${p}/${X.pkg}/${bA}`);if(!_A.ok)continue;let uA=(await _A.json()).dist?.tarball;if(!uA)continue;let $A=AC(jC,".tmp-extract-"+Date.now());await g.mkdir($A,{recursive:!0});let hA=AC($A,"pkg.tgz"),ZA=Bun.spawn(["curl","-fsSL","-o",hA,uA],{stdout:"pipe",stderr:"pipe"});if(await ZA.exited,ZA.exitCode!==0){let gB=await new Response(ZA.stderr).text();WI.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${gB.slice(0,200)}`),await g.rm($A,{recursive:!0,force:!0}).catch(()=>{});continue}let pA=Bun.file(hA).size;if(pA<1024){WI.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${pA} bytes, url: ${uA.slice(0,100)})`),await g.rm($A,{recursive:!0,force:!0}).catch(()=>{});continue}let oA=Bun.spawn(["tar","xzf",hA,"-C",$A,`package/${S}`],{stdout:"pipe",stderr:"pipe"});await oA.exited;let JB=AC($A,"package",S),yA=Bun.file(JB);if(await yA.exists()&&yA.size>1024){if(await Bun.write(i,yA),!BA)await g.chmod(i,493);return await g.rm($A,{recursive:!0,force:!0}).catch(()=>{}),!0}let NB=await new Response(oA.stderr).text();WI.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${pA} bytes, exit=${oA.exitCode}): ${NB.slice(0,200)}`),await g.rm($A,{recursive:!0,force:!0}).catch(()=>{})}catch(_A){WI.warn(`\u4E0B\u8F7D\u5931\u8D25: ${_A instanceof Error?_A.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(p!=="https://registry.npmjs.org")try{let bA=`https://registry.npmjs.org/${X.pkg}/-/${X.pkg.split("/").pop()}-${X.version}.tgz`;WI.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let _A=AC(jC,".tmp-extract-"+Date.now());await g.mkdir(_A,{recursive:!0});let JA=AC(_A,"pkg.tgz"),uA=Bun.spawn(["curl","-fsSL","-o",JA,bA],{stdout:"pipe",stderr:"pipe"});if(await uA.exited,uA.exitCode===0&&Bun.file(JA).size>1024){await Bun.spawn(["tar","xzf",JA,"-C",_A,`package/${S}`],{stdout:"pipe",stderr:"pipe"}).exited;let hA=Bun.file(AC(_A,"package",S));if(await hA.exists()&&hA.size>1024){if(await Bun.write(i,hA),!BA)await g.chmod(i,493);return await g.rm(_A,{recursive:!0,force:!0}).catch(()=>{}),!0}}await g.rm(_A,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(J){return WI.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function ON(I,E=!1){let g=RH(),w=UH(I.id);try{if(!await fS())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 J=await nL(I),R=E||await rL(I);if(J&&!R)return{success:!0};let L=J?"\u66F4\u65B0":"\u5B89\u88C5";g.start(`\u6B63\u5728${L} ${I.name}...`);let X=await import("fs/promises");await X.mkdir(w,{recursive:!0});let z=AC(w,"package.json");if(!await Bun.file(z).exists())await Bun.write(z,JSON.stringify({name:`tako-${I.id}`,private:!0,dependencies:{}},null,2));let i=await m1(),BA=await lF();if(J){let p=AC(w,"bun.lock");try{await X.unlink(p)}catch{}}let S=Bun.spawn([i,"add",`${I.package}@latest`],{cwd:w,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:BA}});if(await S.exited!==0){let p=await new Response(S.stderr).text();return g.stop(`${L} ${I.name} \u5931\u8D25`),{success:!1,error:p}}await eL(I,w,i,BA),await qN(I,w);let h=await zN(I.package),b=(await FQ()).installedClients[I.id]?.version;if(h){let p=await FQ();if(p.installedClients[I.id]={version:h,installedAt:new Date().toISOString()},await t4(p),J&&b)eE("client_updated",{client_id:I.id,from_version:b,to_version:h});else eE("client_installed",{client_id:I.id,client_version:h})}return g.stop(`${I.name} ${L}\u5B8C\u6210`),{success:!0}}catch(J){return g.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}}}async function XN(I){try{let E=Bun.file(I);if(!await E.exists())return!0;if(E.size<100)return!0;let w=new Uint8Array(await E.slice(0,4).arrayBuffer());if(w[0]===127&&w[1]===69&&w[2]===76&&w[3]===70)return!1;if(w[0]===254||w[0]===207||w[0]===206||w[0]===202)return!1;if(w[0]===77&&w[1]===90)return!1;return!0}catch{return!0}}async function WN(I){if(I.runtime!=="native")return;let E=UH(I.id),g=AC(E,"node_modules",I.package,"package.json");try{let w=Bun.file(g);if(!await w.exists())return;let R=(await w.json()).bin;if(!R)return;let L=typeof R==="string"?R:R[I.command];if(!L)return;let X=AC(E,"node_modules",I.package,L);if(!await XN(X))return;WI.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let z=await m1(),_=await lF();if(await eL(I,E,z,_),!await qN(I,E)||await XN(X)){if(WI.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 ON(I)).success)if(await qN(I,E),await XN(X))WI.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else WI.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else WI.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function A5(I){if(!await nL(I)){let w=await ON(I);if(w.success)await WN(I);return w}if(await WN(I),await rL(I)){let w=await zN(I.package),J=(await FQ()).installedClients[I.id]?.version||"\u672A\u77E5",R=w?`${J} \u2192 ${w}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(WI.info(`${I.name} \u53D1\u73B0\u66F4\u65B0: ${R}`),await bS(I.id))return WI.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await IR({message:`\u662F\u5426\u66F4\u65B0 ${I.name}\uFF1F`,defaultValue:!1}))return await mS(I.id),WI.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let X=await ON(I,!0);if(X.success)await WN(I);return X}return{success:!0}}var SN=AC(jC,".update-dismissed.json");async function bS(I){try{let E=Bun.file(SN);if(!await E.exists())return!1;let w=(await E.json())[I];if(!w)return!1;let J=new Date().toISOString().slice(0,10);return w===J}catch{return!1}}async function mS(I){try{let E={},g=Bun.file(SN);if(await g.exists())try{E=await g.json()}catch{}E[I]=new Date().toISOString().slice(0,10),await Bun.write(SN,JSON.stringify(E))}catch{}}async function x1(){return(await FQ()).providers??[]}async function I8(){let I=await FQ(),E=I.providers??[];if(E.length===0)return;if(I.defaultProviderId){let g=E.find((w)=>w.id===I.defaultProviderId);if(g)return g}return E[0]}async function fH(I){return(await x1()).filter((w)=>E1(w,I)).sort((w,J)=>{let R=w.lastUsedAt?new Date(w.lastUsedAt).getTime():0,L=J.lastUsedAt?new Date(J.lastUsedAt).getTime():0;if(R!==L)return L-R;return new Date(J.createdAt).getTime()-new Date(w.createdAt).getTime()})}async function vH(I){let E=await FQ(),g={...I,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(E.providers=[...E.providers??[],g],!E.defaultProviderId)E.defaultProviderId=g.id;return await Ng(E),g}async function p1(I,E){let g=await FQ(),w=g.providers??[],J=w.findIndex((R)=>R.id===I);if(J===-1)return;w[J]={...w[J],...E},g.providers=w,await Ng(g)}async function B5(I){let E=await FQ();if((E.providers??[]).find((w)=>w.id===I)?.builtin)return;if(E.providers=(E.providers??[]).filter((w)=>w.id!==I),E.defaultProviderId===I)E.defaultProviderId=E.providers[0]?.id;if(E.clientProviderMap){for(let[w,J]of Object.entries(E.clientProviderMap))if(J===I)delete E.clientProviderMap[w]}await Ng(E)}async function I5(I){let E=await FQ();if(!(E.providers??[]).some((w)=>w.id===I))return;E.defaultProviderId=I,await Ng(E)}async function bH(I){let E=await FQ(),g=E.clientProviderMap?.[I];if(g){let w=(E.providers??[]).find((J)=>J.id===g);if(w&&E1(w,I))return w}return}async function gR(I,E){let g=await FQ();g.clientProviderMap={...g.clientProviderMap,[I]:E};let w=g.providers??[],J=w.findIndex((R)=>R.id===E);if(J!==-1)w[J]={...w[J],lastUsedAt:new Date().toISOString()},g.providers=w;await Ng(g)}function Q8(I){return{type:I.type,apiKey:I.apiKey,baseUrl:I.baseUrl,authData:I.authData,model:I.model}}async function xS(){try{let I=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),E=await new Response(I.stdout).text();if(await I.exited!==0)return null;let w=JSON.parse(E.trim());if(!w.loggedIn||w.authMethod!=="claude.ai")return null;let J=w.subscriptionType||"pro",R=w.email||"",L=`Claude ${J.charAt(0).toUpperCase()+J.slice(1)}${R?` (${R})`:""}`;return{id:crypto.randomUUID(),name:L,type:"claude-subscription",supportedClients:Kg("claude-subscription"),createdAt:new Date().toISOString(),email:R,subscriptionType:J}}catch{return null}}async function pS(){try{let{homedir:I}=await import("os"),{join:E}=await import("path"),g=await import("fs/promises"),w=E(I(),".codex","auth.json"),J=JSON.parse(await g.readFile(w,"utf-8"));if(J.auth_mode!=="chatgpt"||!J.tokens?.access_token)return null;let R="";try{R=JSON.parse(atob(J.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:J,email:R}}catch{return null}}async function cS(){let I=await pS();if(I){let{auth:E,email:g}=I;return{id:crypto.randomUUID(),name:g?`Codex Plus (${g})`:"Codex Subscription",type:"codex-subscription",email:g||void 0,supportedClients:Kg("codex-subscription"),authData:E,createdAt:new Date().toISOString()}}try{let E=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited!==0||!g.includes("Logged in")||g.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:Kg("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function FR(){let I=[],[E,g]=await Promise.all([xS(),cS()]);if(E)I.push(E);if(g)I.push(g);return I}async function GR(I){let E=await FQ(),g=E.providers??[],w=new Set(g.map((R)=>`${R.type}:${R.email||""}`)),J=0;for(let R of I){let L=`${R.type}:${R.email||""}`;if(!w.has(L))g.push(R),w.add(L),J++;else if(R.authData){let X=g.find((z)=>z.type===R.type&&z.email===R.email);if(X)X.authData=R.authData}}if(J>0){if(E.providers=g,!E.defaultProviderId&&g.length>0)E.defaultProviderId=g[0].id;await Ng(E)}return J}async function Q5(){let I=await FQ();if(!I.apiKey||I.providers&&I.providers.length>0)return!1;let E={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:I.apiKey,baseUrl:Rg,apiId:I.apiId,supportedClients:Kg("tako"),createdAt:new Date().toISOString(),builtin:!0};return I.providers=[E],I.defaultProviderId=E.id,await Ng(I),!0}async function E5(){let I=await FQ(),E=I.providers??[],g=!1;for(let w of E)if(w.type==="tako"&&!w.builtin)w.builtin=!0,g=!0;if(I.apiKey&&!E.some((w)=>w.type==="tako")){if(E.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:I.apiKey,baseUrl:Rg,apiId:I.apiId,supportedClients:Kg("tako"),createdAt:new Date().toISOString(),builtin:!0}),!I.defaultProviderId)I.defaultProviderId=E[E.length-1].id;g=!0}if(g)I.providers=E,await Ng(I)}import{homedir as lS}from"os";var dS=50,kN=3;async function $N(I){try{return(await(await import("fs/promises")).stat(I)).isDirectory()}catch{return!1}}async function C5(I,E,g){let w=await FQ(),J=w.recentProjects||[],R=new Date().toISOString(),L=J.findIndex((z)=>z.path===I);if(L>=0){let z=J[L],_=z.clientUsage||{},i=_[E]||{count:0,lastAt:R};J[L]={...z,launchCount:z.launchCount+1,lastLaunchedAt:R,lastClientId:E,clientUsage:{..._,[E]:{count:i.count+1,lastAt:R,lastSelectedOptionIds:g??i.lastSelectedOptionIds}}}}else J.push({path:I,launchCount:1,lastLaunchedAt:R,lastClientId:E,clientUsage:{[E]:{count:1,lastAt:R,lastSelectedOptionIds:g}}});let X=J.sort((z,_)=>new Date(_.lastLaunchedAt).getTime()-new Date(z.lastLaunchedAt).getTime()).slice(0,dS);w.recentProjects=X,await Ng(w)}async function D5(I){let g=(await FQ()).recentProjects||[],w=process.cwd(),R=g.find((X)=>X.path===w)?.clientUsage?.[I]?.lastSelectedOptionIds;if(R)return R;return g.filter((X)=>X.path!==w&&X.clientUsage?.[I]?.lastSelectedOptionIds).sort((X,z)=>{let _=new Date(X.clientUsage[I].lastAt).getTime();return new Date(z.clientUsage[I].lastAt).getTime()-_})[0]?.clientUsage?.[I]?.lastSelectedOptionIds??[]}function aS(I,E){let g=I.clientUsage?.[E];if(g)return new Date(g.lastAt).getTime();if(I.lastClientId===E)return new Date(I.lastLaunchedAt).getTime();return 0}async function g5(I,E=kN,g=!0){let J=(await FQ()).recentProjects||[],R=process.cwd(),X=J.filter((_)=>{if(g&&_.path===R)return!1;return _.clientUsage?.[I]||_.lastClientId===I}).map((_)=>({..._,lastUsedTime:aS(_,I)})).sort((_,i)=>i.lastUsedTime-_.lastUsedTime),z=[];for(let{lastUsedTime:_,...i}of X){if(z.length>=E)break;if(await $N(i.path))z.push(i)}return z}async function F5(){let E=(await FQ()).recentProjects||[],g=process.cwd();return E.find((J)=>J.path===g)?.lastClientId||null}function VN(I,E=25){let g=lS(),w=I.startsWith(g)?"~"+I.slice(g.length):I;if(w.length>E){let R=w.split("/").pop()||"";if(R.length>E-4)w="..."+R.slice(-E+3);else w=`.../${R}`}return w}function G5(I){let{t:E}=(OC(),d5(uL)),g=Date.now(),w=new Date(I).getTime(),J=g-w,R=Math.floor(J/60000),L=Math.floor(J/3600000),X=Math.floor(J/86400000),z=Math.floor(X/7),_=Math.floor(X/30);if(R<1)return E("time.justNow");if(R<60)return E("time.minutesAgo",{n:R});if(L<24)return E("time.hoursAgo",{n:L});if(X===1)return E("time.yesterday");if(X<7)return E("time.daysAgo",{n:X});if(X<30)return E("time.weeksAgo",{n:z});return E("time.monthsAgo",{n:_})}OC();async function w5(I,E){try{let g=E?.projectPath||process.cwd(),w=E?.providerContext;if(!w)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let J=await OK(I);if(!J)J=SK(I);if(!await Bun.file(J).exists())return{success:!1,error:`\u627E\u4E0D\u5230\u53EF\u6267\u884C\u6587\u4EF6: ${J}`};let L=I.getEnvVars(w),X={...process.env,...L},z;if(I.runtime==="native")z=[J];else z=[await m1(),J];if(E?.args&&E.args.length>0)z=[...z,...E.args];try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1)}catch{}try{Bun.spawnSync(z,{env:X,stdio:["inherit","inherit","inherit"],cwd:g})}catch{await Bun.spawn(z,{env:X,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 iS(I,E){if(E?.providerContext)return E.providerContext;let g=await I8();if(g){let w=await fH(I.id);if(w.some((R)=>R.id===g.id))return Q8(g);if(w.length>0)return Q8(w[0])}return null}async function wR(I,E){try{let g=E?.projectPath||process.cwd();if(E?.projectPath){if(!await $N(E.projectPath))return{success:!1,error:QI("launcher.directoryNotFound",{path:E.projectPath})}}let w=await A5(I);if(!w.success)return w;let J=await iS(I,E);if(!J)return{success:!1,error:QI("launcher.apiKeyNotConfigured")};if(I.setupConfigFiles)await I.setupConfigFiles(J,E?.selectedOptionIds);await C5(g,I.id,E?.selectedOptionIds);let L=(await FQ()).installedClients[I.id]?.version;return eE("client_launched",{client_id:I.id,client_version:L,project_hash:aL(g),is_recent_project:!!E?.projectPath}),WI.info(QI("launcher.starting",{client:I.name})),await w5(I,{...E,providerContext:J})}catch(g){return{success:!1,error:g instanceof Error?g.message:"Launch failed"}}}OC();async function HR(I){let E=await fH(I);if(E.length===0)return null;let g=await bH(I);if(g)return Q8(g);if(E.length===1)return Q8(E[0]);let w=await I8();if(w&&E.some((J)=>J.id===w.id))return Q8(w);return Q8(E[0])}async function H5(){let I=await FR();if(await GR(I)>0){for(let g of I)eE("provider_added",{provider_type:g.type,method:"auto_detect"});dF(),g0()}}var Wg=fB(pI(),1);var hC=fB(pI(),1);OC();async function U5(){try{let I=await eU();if(!I)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let g=await(await fetch(`${Rg}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:I})})).json(),J=await(await fetch(`${Rg}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:I,period:"daily"})})).json();if(!g.success)return{success:!1,error:g.error||g.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let R=(J.data||[]).map((L)=>({model:L.model,requests:L.requests,cost:L.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:R}}}catch(I){return{success:!1,error:I instanceof Error?I.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function J5(I){return I.toLocaleString("en-US")}async function UR(){try{let I=await eU();if(!I)return{success:!1};let g=await(await fetch(`${Rg}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:I}),signal:AbortSignal.timeout(5000)})).json();if(!g.plan||!g.usage)return{success:!1};return{success:!0,data:{windowCost:g.usage.windowCost??0,dailyCost:g.usage.dailyCost??0,weeklyCost:g.usage.weeklyCost??0,windowCostLimit:g.plan.window_cost_limit??0,dailyCostLimit:g.plan.daily_cost_limit??0,weeklyCostLimit:g.plan.weekly_cost_limit??0,windowMinutes:g.plan.window_minutes??0}}}catch{return{success:!1}}}var EB=fB(tE(),1),oS="0.2.38",M5={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},R5={icon:"\u25AA",color:"white"};async function sS(){let I=A1(),E=await F5(),g=await I8(),w=rC()==="zh",J=[...I].sort((X,z)=>{if(X.id===E)return-1;if(z.id===E)return 1;return 0}),R=[];for(let X of J){let z=await g5(X.id,kN,!0),_=process.cwd(),i=[{label:w?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:VN(_,45),path:_},...z.map((JA)=>({label:VN(JA.path,45),hint:G5(JA.lastLaunchedAt),path:JA.path}))],BA=await fH(X.id),v=await bH(X.id)||BA.find((JA)=>JA.id===g?.id)||BA[0],h=v?BA.findIndex((JA)=>JA.id===v.id):0,b=zK(X),p=await D5(X.id),bA=b.map((JA)=>JA.id),_A=p.filter((JA)=>bA.includes(JA));R.push({client:X,projects:i,providers:BA,activeProvIdx:Math.max(h,0),launchOptions:b,lastSelectedOptionIds:_A})}let L=R.some((X)=>X.providers.length>0);return{clients:R,defaultIdx:0,hasProviders:L}}function N5({color:I}){let{stdout:E}=KN(),g=Math.max((E.columns||80)-6,20);return EB.jsxDEV(rA,{marginY:0,children:EB.jsxDEV(a,{dimColor:!0,color:I,children:"\u2500".repeat(g)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function nS({quota:I,zh:E}){let g,w,J;if(I.windowCostLimit>0)g=`${Math.round(I.windowMinutes/60)}h`,w=I.windowCost,J=I.windowCostLimit;else if(I.dailyCostLimit>0)g=E?"\u4ECA\u65E5":"Today",w=I.dailyCost,J=I.dailyCostLimit;else return null;let R=J>0?w/J:0,L=R<0.7?"green":R<0.9?"yellow":"red";return EB.jsxDEV(a,{dimColor:!0,children:["\uD83D\uDCB0 ",g,": ",EB.jsxDEV(a,{color:L,children:["$",w.toFixed(2)]},void 0,!0,void 0,this),"/$",J.toFixed(0)]},void 0,!0,void 0,this)}function rS({clients:I,defaultIdx:E,hasProviders:g,onResult:w}){let[J,R]=hC.useState(E),[L,X]=hC.useState("projects"),[z,_]=hC.useState(0),[i,BA]=hC.useState(0),[S,v]=hC.useState(()=>I[E]?.activeProvIdx||0),[h,b]=hC.useState(()=>new Set(I[E]?.lastSelectedOptionIds??[])),[p,bA]=hC.useState(""),_A=I[J],JA=_A.projects,uA=_A.launchOptions,$A=_A.providers,hA=M5[_A.client.id]||R5,ZA=rC()==="zh",pA=$A[S],oA=pA?.name||(ZA?"\u672A\u914D\u7F6E":"N/A"),JB=pA?.type==="tako",[yA,NB]=hC.useState(null);return hC.useEffect(()=>{if(!JB){NB(null);return}UR().then((gB)=>{if(gB.success&&gB.data)NB(gB.data)})},[JB,J,S]),hC.useEffect(()=>{_(0),BA(0),X("projects"),v(I[J]?.activeProvIdx||0),b(new Set(I[J]?.lastSelectedOptionIds??[]))},[J]),nC(hC.useCallback((gB,xB)=>{if(gB==="q"){w({type:"exit"});return}if(gB==="s"){w({type:"stats"});return}if(gB==="c"){w({type:"config"});return}if(gB==="l"){w({type:"language"});return}if(gB==="p"&&L!=="provider"){w({type:"providers"});return}let TA=parseInt(gB);if(TA>=1&&TA<=I.length&&L!=="provider"){R(TA-1);return}if(L==="provider"){let XA=(GA)=>{v(GA);let RA=$A[GA];if(RA)gR(_A.client.id,RA.id).then(()=>{_A.activeProvIdx=GA,bA(ZA?`\u2713 \u5DF2\u7ED1\u5B9A ${RA.name}`:`\u2713 Bound ${RA.name}`),setTimeout(()=>bA(""),2000)})};if(xB.leftArrow&&$A.length>1){XA(S>0?S-1:$A.length-1);return}if(xB.rightArrow&&$A.length>1){XA(S<$A.length-1?S+1:0);return}if(xB.downArrow){X("projects"),_(0);return}if(xB.return||gB==="p"){w({type:"providers"});return}if(xB.escape){X("projects");return}return}if(xB.leftArrow){R((XA)=>XA>0?XA-1:I.length-1);return}if(xB.rightArrow){R((XA)=>XA<I.length-1?XA+1:0);return}if(L==="projects"){if(xB.downArrow){if(z<JA.length-1)_((XA)=>XA+1);else if(uA.length>0)X("options"),BA(0);return}if(xB.upArrow){if(z>0)_((XA)=>XA-1);else X("provider");return}}if(L==="options"){if(xB.downArrow){if(i<uA.length-1)BA((XA)=>XA+1);return}if(xB.upArrow){if(i>0)BA((XA)=>XA-1);else X("projects"),_(JA.length-1);return}}if(gB===" "&&L==="options"&&uA.length>0){let XA=uA[i];b((GA)=>{let RA=new Set(GA);return RA.has(XA.id)?RA.delete(XA.id):RA.add(XA.id),RA});return}if(xB.return&&L!=="provider"){let XA=JA[z],GA=[],RA=[];for(let WA of uA)if(h.has(WA.id))GA.push(...WA.args),RA.push(WA.id);w({type:"launch",clientId:_A.client.id,projectPath:XA.path,args:GA,selectedOptionIds:RA})}},[L,J,z,i,S,$A,pA,_A,JA,uA,h,I,w,ZA])),EB.jsxDEV(rA,{flexDirection:"column",paddingX:0,paddingY:1,children:[EB.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:hA.color,paddingX:2,paddingY:1,children:[EB.jsxDEV(rA,{justifyContent:"space-between",children:[EB.jsxDEV(rA,{gap:1,children:[EB.jsxDEV(a,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:["v",oS]},void 0,!0,void 0,this),p&&EB.jsxDEV(a,{color:"green",children:p},void 0,!1,void 0,this),!p&&yA&&EB.jsxDEV(nS,{quota:yA,zh:ZA},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L==="provider"?EB.jsxDEV(rA,{borderStyle:"bold",borderColor:hA.color,paddingX:1,children:[$A.length>1&&EB.jsxDEV(a,{color:hA.color,children:"\u25C0 "},void 0,!1,void 0,this),EB.jsxDEV(a,{color:hA.color,bold:!0,children:oA},void 0,!1,void 0,this),EB.jsxDEV(a,{color:"yellow",children:" \u2605"},void 0,!1,void 0,this),$A.length>1&&EB.jsxDEV(a,{color:hA.color,children:" \u25B6"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):EB.jsxDEV(rA,{gap:1,children:[EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u670D\u52A1\u5546":"via"},void 0,!1,void 0,this),EB.jsxDEV(a,{color:hA.color,children:oA},void 0,!1,void 0,this),EB.jsxDEV(a,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"[p]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!g&&EB.jsxDEV(rA,{marginTop:1,justifyContent:"center",gap:1,children:[EB.jsxDEV(a,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\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),EB.jsxDEV(rA,{marginTop:1,gap:1,justifyContent:"center",children:[EB.jsxDEV(a,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),I.map((gB,xB)=>{let TA=M5[gB.client.id]||R5;return xB===J?EB.jsxDEV(rA,{borderStyle:"bold",borderColor:TA.color,paddingX:1,children:EB.jsxDEV(a,{color:TA.color,bold:!0,children:[TA.icon," ",gB.client.name]},void 0,!0,void 0,this)},gB.client.id,!1,void 0,this):EB.jsxDEV(rA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:EB.jsxDEV(a,{dimColor:!0,children:[TA.icon," ",gB.client.name]},void 0,!0,void 0,this)},gB.client.id,!1,void 0,this)}),EB.jsxDEV(a,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),EB.jsxDEV(N5,{color:hA.color},void 0,!1,void 0,this),JA.map((gB,xB)=>{let TA=L==="projects"&&xB===z;return EB.jsxDEV(rA,{paddingLeft:1,children:[EB.jsxDEV(rA,{flexGrow:1,gap:1,children:[EB.jsxDEV(a,{color:TA?hA.color:void 0,bold:TA,children:TA?"\u25B8":" "},void 0,!1,void 0,this),EB.jsxDEV(a,{bold:TA,color:TA?hA.color:void 0,children:gB.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),gB.hint?EB.jsxDEV(a,{dimColor:!0,children:gB.hint},void 0,!1,void 0,this):null]},xB,!0,void 0,this)}),uA.length>0&&EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(N5,{color:hA.color},void 0,!1,void 0,this),uA.map((gB,xB)=>{let TA=h.has(gB.id),XA=L==="options"&&xB===i;return EB.jsxDEV(rA,{paddingLeft:1,children:[EB.jsxDEV(rA,{flexGrow:1,gap:1,children:[EB.jsxDEV(a,{color:XA?hA.color:void 0,bold:XA,children:XA?"\u25B8":" "},void 0,!1,void 0,this),EB.jsxDEV(a,{color:TA?hA.color:void 0,bold:TA,children:TA?"\u25C9":"\u25CB"},void 0,!1,void 0,this),EB.jsxDEV(a,{bold:XA,color:XA?hA.color:void 0,children:gB.label[ZA?"zh":"en"]||gB.label.en},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:gB.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),XA&&EB.jsxDEV(a,{dimColor:!0,children:gB.description[ZA?"zh":"en"]||gB.description.en},void 0,!1,void 0,this)]},gB.id,!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),EB.jsxDEV(rA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:L==="provider"?EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5207\u6362\u5E76\u7ED1\u5B9A":"switch & bind"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u7BA1\u7406\u670D\u52A1\u5546":"manage"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):L==="options"?EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\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 K5({onResult:I}){let[E,g]=hC.useState(null);if(hC.useEffect(()=>{sS().then(g)},[]),!E)return EB.jsxDEV(a,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return EB.jsxDEV(rS,{clients:E.clients,defaultIdx:E.defaultIdx,hasProviders:E.hasProviders,onResult:I},void 0,!1,void 0,this)}var aQ=fB(pI(),1);OC();var GB=fB(tE(),1),i0={"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"}},TN={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},c1=["claude-subscription","codex-subscription","tako","anthropic","deepseek","custom"];function Y5({provider:I,focused:E,bound:g,isDefault:w,zh:J}){let R=i0[I.type]||i0.custom,L=J?Q0[I.type]?.zh:Q0[I.type]?.en;return GB.jsxDEV(rA,{flexDirection:"column",borderStyle:E?"bold":"round",borderColor:E?R.color:g?R.color:"gray",paddingX:2,paddingY:0,children:[GB.jsxDEV(rA,{justifyContent:"space-between",children:[GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{color:R.color,bold:!0,children:R.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:E||g,color:E?R.color:void 0,children:I.name},void 0,!1,void 0,this),w&&GB.jsxDEV(a,{color:"yellow",children:["\u2605 ",J?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),I.builtin&&GB.jsxDEV(a,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{gap:1,children:g?GB.jsxDEV(a,{color:R.color,bold:!0,children:["\u25CF ",J?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):GB.jsxDEV(a,{dimColor:!0,children:["\u25CB ",J?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:L},void 0,!1,void 0,this),I.model&&GB.jsxDEV(a,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),I.model&&GB.jsxDEV(a,{dimColor:!0,children:I.model},void 0,!1,void 0,this),I.email&&GB.jsxDEV(a,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),I.email&&GB.jsxDEV(a,{dimColor:!0,children:I.email},void 0,!1,void 0,this),I.apiKey&&GB.jsxDEV(a,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),I.apiKey&&GB.jsxDEV(a,{dimColor:!0,children:["Key: ",I.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),E&&GB.jsxDEV(rA,{marginTop:0,children:GB.jsxDEV(a,{color:R.color,dimColor:!0,children:["Enter ",J?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",J?"\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 L5({screen:I,addType:E,addKey:g,addUrl:w,addModel:J,rowIdx:R,zh:L}){let X=i0[E]||i0.custom,z=L?Q0[E]?.zh:Q0[E]?.en,_=I==="add-model"?CM(E):void 0;if(_)return GB.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[GB.jsxDEV(rA,{borderStyle:"bold",borderColor:X.color,paddingX:3,paddingY:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,marginBottom:1,children:[GB.jsxDEV(a,{color:X.color,bold:!0,children:X.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:!0,color:X.color,children:z},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:["\u2014 ",L?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_.map((h,b)=>{let p=R===b;return GB.jsxDEV(rA,{paddingLeft:1,gap:1,children:[GB.jsxDEV(a,{color:p?X.color:void 0,bold:p,children:p?"\u25B8":" "},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:p,color:p?X.color:void 0,children:h},void 0,!1,void 0,this)]},h,!0,void 0,this)})]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u9009\u62E9":"select"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let i=I==="add-key"?L?"\u8F93\u5165 API Key":"Enter API Key":I==="add-url"?"Base URL":L?"\u6A21\u578B":"Model",BA=I==="add-key"?g:I==="add-url"?w:J,S=I==="add-url"?"https://your-proxy.com":I==="add-model"?Q1(E)||(L?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,v=I==="add-url"?L?"\u4E0B\u4E00\u6B65":"next":I==="add-model"?L?"\u4FDD\u5B58":"save":L?"\u786E\u8BA4":"confirm";return GB.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[GB.jsxDEV(rA,{borderStyle:"bold",borderColor:X.color,paddingX:3,paddingY:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,marginBottom:1,children:[GB.jsxDEV(a,{color:X.color,bold:!0,children:X.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:!0,color:X.color,children:z},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:["\u2014 ",i]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),S&&GB.jsxDEV(a,{dimColor:!0,children:[" ",L?"\u9ED8\u8BA4":"Default",": ",S]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:S?1:0,children:[GB.jsxDEV(a,{color:X.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),GB.jsxDEV(a,{children:BA||S||""},void 0,!1,void 0,this),GB.jsxDEV(a,{color:X.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:v},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function Z5({provider:I,defaultId:E,detailActions:g,detailIdx:w,zh:J}){let R=i0[I.type]||i0.custom,L=J?Q0[I.type]?.zh:Q0[I.type]?.en;return GB.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[GB.jsxDEV(rA,{borderStyle:"bold",borderColor:R.color,paddingX:3,paddingY:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{color:R.color,bold:!0,children:R.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:!0,color:R.color,children:I.name},void 0,!1,void 0,this),I.id===E&&GB.jsxDEV(a,{color:"yellow",children:[" \u2605 ",J?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:[J?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),GB.jsxDEV(a,{children:L},void 0,!1,void 0,this),I.builtin&&GB.jsxDEV(a,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I.model&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:[J?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),GB.jsxDEV(a,{children:I.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I.email&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),GB.jsxDEV(a,{children:I.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I.apiKey&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),GB.jsxDEV(a,{children:[I.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),I.baseUrl&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),GB.jsxDEV(a,{children:I.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),GB.jsxDEV(rA,{gap:1,marginTop:1,children:g.map((X,z)=>{let _=X==="default"?`\u2B50 ${J?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:X==="rekey"?`\uD83D\uDD11 ${J?"\u4FEE\u6539 Key":"Change Key"}`:X==="delete"?`\uD83D\uDDD1\uFE0F ${J?"\u5220\u9664":"Delete"}`:`\u2190 ${J?"\u8FD4\u56DE":"Back"}`,i=z===w;return GB.jsxDEV(rA,{borderStyle:i?"bold":"round",borderColor:i?"cyan":"gray",paddingX:2,children:GB.jsxDEV(a,{bold:i,color:i?"cyan":void 0,dimColor:!i,children:_},void 0,!1,void 0,this)},X,!1,void 0,this)})},void 0,!1,void 0,this),GB.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:J?"\u9009\u62E9":"select"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:J?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:J?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var II=fB(tE(),1);function X5({onDone:I}){let[E,g]=aQ.useState("list"),[w,J]=aQ.useState([]),[R,L]=aQ.useState(),[X,z]=aQ.useState({}),[_,i]=aQ.useState(0),[BA,S]=aQ.useState(0),[v,h]=aQ.useState(0),[b,p]=aQ.useState(""),[bA,_A]=aQ.useState(""),[JA,uA]=aQ.useState("tako"),[$A,hA]=aQ.useState(""),[ZA,pA]=aQ.useState(""),[oA,JB]=aQ.useState(""),yA=rC()==="zh",NB=A1(),gB=NB[_],xB=TN[gB?.id]?.color||"white",TA=gB?w.filter((QA)=>E1(QA,gB.id)):[],XA=X[gB?.id]||R,GA=TA.length+3,RA=w.find((QA)=>QA.id===b),WA=RA?[...RA.id!==R?["default"]:[],...RA.builtin?["rekey"]:["delete"],"back"]:["back"],DA=aQ.useCallback(async()=>{let QA=await x1(),wA=await I8();J(QA),L(wA?.id);let NA={};for(let qA of A1()){let _B=await bH(qA.id);NA[qA.id]=_B?.id}z(NA)},[]);aQ.useEffect(()=>{DA()},[DA]),aQ.useEffect(()=>{S(0)},[_]),aQ.useEffect(()=>{if(bA){let QA=setTimeout(()=>_A(""),3000);return()=>clearTimeout(QA)}},[bA]);let DB=aQ.useCallback(async()=>{if(b&&w.find((qA)=>qA.id===b)?.builtin){await p1(b,{apiKey:$A}),_A(yA?"Key \u5DF2\u66F4\u65B0":"Key updated"),await DA(),g("list"),S(0);return}let QA=Q0[JA]?.[yA?"zh":"en"]||JA,wA=ZA||hK(JA),NA=oA||Q1(JA);await vH({name:QA,type:JA,apiKey:$A,baseUrl:wA,model:NA,supportedClients:Kg(JA)}),eE("provider_added",{provider_type:JA,method:"manual"}),dF(),g0(),_A(yA?"\u5DF2\u6DFB\u52A0":"Added"),await DA(),g("list"),S(0)},[JA,$A,ZA,oA,yA,DA,b,w]),aB=aQ.useCallback(async()=>{g("scanning");let QA=await FR(),wA=await GR(QA);if(wA>0)dF(),g0();_A(yA?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${wA} \u4E2A`:`Scan done, ${wA} added`),await DA(),g("list"),S(0)},[DA,yA]),[s,f]=aQ.useState("claude"),c=aQ.useCallback(async(QA)=>{f(QA),g("logging-in");let wA=QA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];if(await Bun.spawn(wA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited,QA==="claude")try{let qA=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),_B=await new Response(qA.stdout).text();await qA.exited;let AB=JSON.parse(_B.trim());if(AB.loggedIn&&AB.authMethod==="claude.ai"){let MB=AB.email||"",CB=AB.subscriptionType||"pro",iA=`Claude ${CB.charAt(0).toUpperCase()+CB.slice(1)}${MB?` (${MB})`:""}`;if(!w.find((vB)=>vB.type==="claude-subscription"&&vB.email===MB))await vH({name:iA,type:"claude-subscription",email:MB,subscriptionType:CB,supportedClients:Kg("claude-subscription")}),_A(yA?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else _A(yA?"\u6B64\u8D26\u53F7\u5DF2\u5B58\u5728":"Already exists")}else _A(yA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{_A(yA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let qA=await import("fs/promises"),{homedir:_B}=await import("os"),{join:AB}=await import("path"),MB=JSON.parse(await qA.readFile(AB(_B(),".codex","auth.json"),"utf-8"));if(MB.auth_mode==="chatgpt"&&MB.tokens?.access_token){let CB="";try{CB=JSON.parse(atob(MB.tokens.id_token.split(".")[1])).email||""}catch{}let iA=w.find((vB)=>vB.type==="codex-subscription"&&vB.email===CB);if(!iA)await vH({name:CB?`Codex Plus (${CB})`:"Codex Subscription",type:"codex-subscription",email:CB||void 0,supportedClients:Kg("codex-subscription"),authData:MB}),_A(yA?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await p1(iA.id,{authData:MB}),_A(yA?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else _A(yA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{_A(yA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await DA(),g("list"),S(0)},[w,yA,DA]);if(nC(aQ.useCallback((QA,wA)=>{if(E==="list"){if(wA.escape||QA==="q"){I();return}if(wA.leftArrow){i((qA)=>qA>0?qA-1:NB.length-1);return}if(wA.rightArrow){i((qA)=>qA<NB.length-1?qA+1:0);return}let NA=parseInt(QA);if(NA>=1&&NA<=NB.length){i(NA-1);return}if(wA.upArrow){S((qA)=>qA>0?qA-1:GA-1);return}if(wA.downArrow){S((qA)=>qA<GA-1?qA+1:0);return}if(wA.return){if(BA<TA.length){let qA=TA[BA];gR(gB.id,qA.id).then(()=>{I()})}else if(BA===TA.length)g("add-type"),S(0);else if(BA===TA.length+1)aB();else I();return}if((QA==="d"||QA==="e")&&BA<TA.length)p(TA[BA].id),g("detail"),h(0);return}if(E==="detail"){if(wA.leftArrow){h((NA)=>NA>0?NA-1:WA.length-1);return}if(wA.rightArrow){h((NA)=>NA<WA.length-1?NA+1:0);return}if(wA.escape){g("list"),S(0);return}if(wA.return){let NA=WA[v];if(NA==="back"){g("list"),S(0);return}if(NA==="default")I5(b).then(()=>{_A(yA?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),DA(),g("list"),S(0)});if(NA==="delete")B5(b).then(()=>{_A(yA?"\u5DF2\u5220\u9664":"Deleted"),DA(),g("list"),S(0)});if(NA==="rekey")uA(RA?.type||"tako"),hA(""),g("add-key"),S(0)}return}if(E==="add-type"){if(wA.upArrow){S((NA)=>NA>0?NA-1:c1.length-1);return}if(wA.downArrow){S((NA)=>NA<c1.length-1?NA+1:0);return}if(wA.escape){g("list"),S(0);return}if(wA.return){let NA=c1[BA];if(uA(NA),NA==="claude-subscription"){c("claude");return}if(NA==="codex-subscription"){c("codex");return}hA(""),pA(""),JB(Q1(NA)||""),g("add-key"),S(0)}return}if(E==="add-key"){if(wA.escape){g("list"),S(0);return}if(wA.return&&$A){if(JA==="custom")g("add-url");else if(JA==="deepseek"||JA==="anthropic")g("add-model"),S(0);else DB();return}if(wA.backspace||wA.delete){hA((NA)=>NA.slice(0,-1));return}if(QA&&!wA.ctrl)hA((NA)=>NA+QA);return}if(E==="add-url"){if(wA.escape){g("list"),S(0);return}if(wA.return){g("add-model"),S(0);return}if(wA.backspace||wA.delete){pA((NA)=>NA.slice(0,-1));return}if(QA&&!wA.ctrl)pA((NA)=>NA+QA);return}if(E==="add-model"){let NA=CM(JA);if(wA.escape){g("list"),S(0);return}if(NA){if(wA.upArrow){S((qA)=>qA>0?qA-1:NA.length-1);return}if(wA.downArrow){S((qA)=>qA<NA.length-1?qA+1:0);return}if(wA.return){JB(NA[BA]),setTimeout(()=>DB(),0);return}}else{if(wA.return){DB();return}if(wA.backspace||wA.delete){JB((qA)=>qA.slice(0,-1));return}if(QA&&!wA.ctrl)JB((qA)=>qA+QA)}return}},[E,BA,v,TA,GA,NB.length,gB,b,RA,WA,JA,$A,ZA,oA,I,aB,c,DB,DA,yA])),E==="scanning"||E==="logging-in"){let QA=E==="logging-in"?i0[s==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},wA=E==="scanning"?yA?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":yA?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return II.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:II.jsxDEV(rA,{borderStyle:"round",borderColor:QA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[II.jsxDEV(a,{color:QA.color,bold:!0,children:[QA.icon," ",wA]},void 0,!0,void 0,this),E==="logging-in"&&II.jsxDEV(a,{dimColor:!0,children:yA?"\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")return II.jsxDEV(L5,{screen:E,addType:JA,addKey:$A,addUrl:ZA,addModel:oA,rowIdx:BA,zh:yA},void 0,!1,void 0,this);if(E==="add-type")return II.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[II.jsxDEV(rA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:II.jsxDEV(a,{bold:!0,children:["\u2795 ",yA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),II.jsxDEV(rA,{flexDirection:"column",marginTop:1,gap:0,children:c1.map((QA,wA)=>{let NA=i0[QA]||i0.custom,qA=BA===wA,_B=yA?Q0[QA]?.zh:Q0[QA]?.en,AB=QA==="claude-subscription"||QA==="codex-subscription";return II.jsxDEV(rA,{borderStyle:qA?"bold":"round",borderColor:qA?NA.color:"gray",paddingX:2,paddingY:0,children:II.jsxDEV(rA,{gap:1,children:[II.jsxDEV(a,{color:NA.color,bold:!0,children:NA.icon},void 0,!1,void 0,this),II.jsxDEV(a,{bold:qA,color:qA?NA.color:void 0,children:_B},void 0,!1,void 0,this),AB&&II.jsxDEV(a,{dimColor:!0,children:["(",yA?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!AB&&II.jsxDEV(a,{dimColor:!0,children:["(",yA?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},QA,!1,void 0,this)})},void 0,!1,void 0,this),II.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[II.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(E==="detail"&&RA)return II.jsxDEV(Z5,{provider:RA,defaultId:R,detailActions:WA,detailIdx:v,zh:yA},void 0,!1,void 0,this);return II.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[II.jsxDEV(rA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[II.jsxDEV(a,{bold:!0,children:["\u26A1 ",yA?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),bA&&II.jsxDEV(a,{color:"green",children:[" \u2713 ",bA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),II.jsxDEV(rA,{marginTop:1,gap:1,justifyContent:"center",children:[II.jsxDEV(a,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),NB.map((QA,wA)=>{let NA=TN[QA.id]||{icon:"\u25AA",color:"white"},qA=wA===_;return II.jsxDEV(rA,{borderStyle:qA?"bold":"single",borderColor:qA?NA.color:"gray",paddingX:2,children:II.jsxDEV(a,{color:qA?NA.color:void 0,bold:qA,dimColor:!qA,children:[NA.icon," ",QA.name]},void 0,!0,void 0,this)},QA.id,!1,void 0,this)}),II.jsxDEV(a,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),II.jsxDEV(rA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:xB,paddingX:1,paddingY:1,children:[TA.length===0&&II.jsxDEV(rA,{paddingX:2,paddingY:1,justifyContent:"center",children:II.jsxDEV(a,{dimColor:!0,children:yA?"\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),TA.map((QA,wA)=>II.jsxDEV(Y5,{provider:QA,focused:BA===wA,bound:QA.id===XA,isDefault:QA.id===R,zh:yA},QA.id,!1,void 0,this))]},void 0,!0,void 0,this),II.jsxDEV(rA,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:yA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:yA?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"back",offset:2,icon:"\u2190",label:yA?"\u8FD4\u56DE":"Back"}].map((QA)=>{let wA=BA===TA.length+QA.offset;return II.jsxDEV(rA,{borderStyle:wA?"bold":"round",borderColor:wA?"cyan":"gray",paddingX:2,children:II.jsxDEV(a,{bold:wA,color:wA?"cyan":void 0,dimColor:!wA,children:[QA.icon," ",QA.label]},void 0,!0,void 0,this)},QA.id,!1,void 0,this)})},void 0,!1,void 0,this),II.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[II.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var aF=fB(pI(),1);OC();var OD=fB(tE(),1);function W5({onExit:I}){let[E,g]=aF.useState(null),[w,J]=aF.useState(!0),[R,L]=aF.useState(10),X=aF.useCallback(async()=>{J(!0);let _=await U5();if(_.success&&_.data)g(_.data);J(!1)},[]);aF.useEffect(()=>{X()},[X]),aF.useEffect(()=>{let _=setInterval(()=>{L((i)=>{if(i<=1)return X(),10;return i-1})},1000);return()=>clearInterval(_)},[X]),nC((_,i)=>{if(_==="q"||i.escape)I()});let z=rC()==="zh";return OD.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[OD.jsxDEV(a,{bold:!0,children:QI("stats.title")},void 0,!1,void 0,this),w&&!E?OD.jsxDEV(a,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):E?OD.jsxDEV(rA,{flexDirection:"column",marginTop:1,children:[OD.jsxDEV(a,{children:QI("stats.totalRequests",{count:J5(E.totalRequests)})},void 0,!1,void 0,this),OD.jsxDEV(a,{children:QI("stats.totalCost",{cost:E.totalCost})},void 0,!1,void 0,this),OD.jsxDEV(a,{children:QI("stats.todayCost",{cost:E.todayCost})},void 0,!1,void 0,this),E.modelStats.length>0&&OD.jsxDEV(rA,{flexDirection:"column",marginTop:1,children:[OD.jsxDEV(a,{bold:!0,dimColor:!0,children:z?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),E.modelStats.map((_,i)=>OD.jsxDEV(a,{dimColor:!0,children:[i===E.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",_.model.padEnd(25)," ",String(_.requests).padStart(5)," ",_.cost]},_.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):OD.jsxDEV(a,{color:"red",children:z?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),OD.jsxDEV(rA,{marginTop:1,children:OD.jsxDEV(a,{dimColor:!0,children:z?`${R}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${R}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var E8=fB(pI(),1);OC();OC();function tS(I){return I.startsWith("cr_")&&I.length>10}async function eS(I){try{let g=await(await fetch(`${Rg}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:I})})).json();if(g.success&&g.data?.id)return{valid:!0,apiId:g.data.id};return{valid:!1,error:g.error||QI("auth.validationFailed")}}catch(E){return{valid:!1,error:E instanceof Error?E.message:QI("auth.networkError")}}}async function q5(I){if(!tS(I))return eE("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:QI("auth.invalidFormat")};let E=await eS(I);if(!E.valid)return eE("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:E.error};return await t4({apiKey:I,apiId:E.apiId}),await Az(I,E.apiId),eE("api_key_validated",{success:!0}),dF(),g0(),{success:!0}}async function Az(I,E){let w=(await x1()).find((J)=>J.type==="tako");if(w)await p1(w.id,{apiKey:I,apiId:E});else await vH({name:"Tako \u5B98\u65B9",type:"tako",apiKey:I,baseUrl:Rg,apiId:E,supportedClients:Kg("tako"),builtin:!0})}var Xg=fB(tE(),1);function O5({isReconfigure:I,onDone:E}){let[g,w]=E8.useState(""),[J,R]=E8.useState("idle"),[L,X]=E8.useState(""),{stdin:z,setRawMode:_}=_H();E8.useEffect(()=>{if(!z)return;_(!0);let v=(h)=>{let b=h.toString();if(b.length>1&&!b.startsWith("\x1B"))w((p)=>p+b.replace(/[\r\n]/g,""))};return z.on("data",v),()=>{z.off("data",v)}},[z,_]);let i=E8.useCallback(async()=>{if(!g||J==="validating")return;R("validating");let v=await q5(g);if(v.success)R("success"),dF(),g0(),setTimeout(()=>E(!0),500);else R("error"),X(v.error||"Validation failed")},[g,J,E]);nC((v,h)=>{if(h.escape){E(!1);return}if(h.return){i();return}if(h.backspace||h.delete){w((b)=>b.slice(0,-1)),R("idle");return}if(v&&!h.ctrl&&v.length===1)w((b)=>b+v),R("idle")});let BA=g.length<=6?g:`${g.slice(0,3)}${"\u2022".repeat(Math.min(g.length-6,20))}${g.slice(-3)}`,S=rC()==="zh";return Xg.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[Xg.jsxDEV(a,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",I?QI("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),Xg.jsxDEV(rA,{marginTop:1,children:[Xg.jsxDEV(a,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),Xg.jsxDEV(a,{children:BA},void 0,!1,void 0,this),J==="idle"&&Xg.jsxDEV(a,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="validating"&&Xg.jsxDEV(a,{color:"yellow",children:["\u23F3 ",QI("prompts.validating")]},void 0,!0,void 0,this),J==="success"&&Xg.jsxDEV(a,{color:"green",children:["\u2713 ",QI("prompts.keyConfigured")]},void 0,!0,void 0,this),J==="error"&&Xg.jsxDEV(a,{color:"red",children:["\u2717 ",L]},void 0,!0,void 0,this),Xg.jsxDEV(rA,{marginTop:1,children:Xg.jsxDEV(a,{dimColor:!0,children:["Enter ",S?"\u63D0\u4EA4":"submit"," Esc ",S?"\u53D6\u6D88":"cancel"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var S5=fB(pI(),1);OC();var iF=fB(tE(),1),l1=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function z5({onDone:I}){let[E,g]=S5.useState(l1.findIndex((w)=>w.value===rC()));return nC((w,J)=>{if(J.upArrow)g((R)=>R>0?R-1:l1.length-1);if(J.downArrow)g((R)=>R<l1.length-1?R+1:0);if(J.return)LN(l1[E].value),I();if(J.escape)I()}),iF.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[iF.jsxDEV(a,{bold:!0,children:["\uD83C\uDF10 ",QI("menu.changeLanguage")]},void 0,!0,void 0,this),l1.map((w,J)=>iF.jsxDEV(rA,{gap:1,marginTop:J===0?1:0,children:[iF.jsxDEV(a,{color:"cyan",bold:J===E,children:J===E?"\u25B8":" "},void 0,!1,void 0,this),iF.jsxDEV(a,{bold:J===E,children:w.label},void 0,!1,void 0,this),w.value===rC()&&iF.jsxDEV(a,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},w.value,!0,void 0,this)),iF.jsxDEV(rA,{marginTop:1,children:iF.jsxDEV(a,{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 MR=fB(pI(),1);import{join as Bz}from"path";OC();var ME=fB(tE(),1),$5=Bz(jC,".key-prompt.json");async function Iz(){try{return await Bun.file($5).json()}catch{return{}}}async function k5(I){await Bun.write($5,JSON.stringify(I))}async function V5(){if(await qK())return!1;let I=await Iz();if(I.never)return!1;let E=new Date().toISOString().slice(0,10);if(I.dismissed===E)return!1;return!0}async function T5(I){if(I==="never")await k5({never:!0});else{let E=new Date().toISOString().slice(0,10);await k5({dismissed:E})}}var JR=[{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 y5({onDone:I}){let[E,g]=MR.useState(0),w=rC()==="zh";return nC(MR.useCallback((J,R)=>{if(R.upArrow){g((L)=>L>0?L-1:JR.length-1);return}if(R.downArrow){g((L)=>L<JR.length-1?L+1:0);return}if(R.escape){I("skip");return}if(R.return){I(JR[E].id);return}},[E,I])),ME.jsxDEV(rA,{flexDirection:"column",paddingX:0,paddingY:1,children:[ME.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[ME.jsxDEV(rA,{gap:1,children:[ME.jsxDEV(a,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),ME.jsxDEV(a,{bold:!0,children:w?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),ME.jsxDEV(rA,{marginTop:1,flexDirection:"column",children:[ME.jsxDEV(a,{dimColor:!0,children:w?"\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),ME.jsxDEV(a,{dimColor:!0,children:w?"\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),ME.jsxDEV(rA,{marginTop:1,flexDirection:"column",children:JR.map((J,R)=>{let L=R===E;return ME.jsxDEV(rA,{paddingLeft:1,gap:1,children:[ME.jsxDEV(a,{color:L?J.color||"white":void 0,bold:L,children:L?"\u25B8":" "},void 0,!1,void 0,this),ME.jsxDEV(a,{bold:L,color:L?J.color||"white":void 0,children:w?J.label.zh:J.label.en},void 0,!1,void 0,this),L&&ME.jsxDEV(a,{dimColor:!0,children:w?J.hint.zh:J.hint.en},void 0,!1,void 0,this)]},J.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),ME.jsxDEV(rA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[ME.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:w?"\u9009\u62E9":"select"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:w?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:w?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var F0=fB(tE(),1);function Qz({onLaunch:I,onExit:E,initialView:g="launcher"}){let[w,J]=Wg.useState(g),[R,L]=Wg.useState([]),X=Wg.useRef(null),z=Wg.useRef(!1);Wg.useEffect(()=>{if(z.current||g!=="launcher")return;z.current=!0,V5().then((h)=>{if(h)J("key-guide")})},[g]);let _=Wg.useCallback((h)=>{if(L((b)=>[...b.slice(-4),h]),X.current)clearTimeout(X.current);X.current=setTimeout(()=>L([]),5000)},[]);Wg.useEffect(()=>{return bK({info:(h)=>_({text:h,type:"info"}),warn:(h)=>_({text:h,type:"warn"}),error:(h)=>_({text:h,type:"error"}),success:(h)=>_({text:h,type:"success"}),spin:(h)=>{return _({text:h,type:"spin"}),{stop:(b)=>{if(b)_({text:b,type:"success"})}}}}),()=>DM()},[_]);let i=Wg.useCallback(()=>J("launcher"),[]),BA={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},S={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},v=(()=>{switch(w){case"launcher":return F0.jsxDEV(K5,{onResult:(h)=>{switch(h.type){case"launch":I(h);break;case"providers":J("providers");break;case"stats":J("stats");break;case"config":J("config");break;case"language":J("language");break;case"exit":E();break}}},void 0,!1,void 0,this);case"providers":return F0.jsxDEV(X5,{onDone:i},void 0,!1,void 0,this);case"stats":return F0.jsxDEV(W5,{onExit:i},void 0,!1,void 0,this);case"config":return F0.jsxDEV(O5,{isReconfigure:!0,onDone:i},void 0,!1,void 0,this);case"language":return F0.jsxDEV(z5,{onDone:i},void 0,!1,void 0,this);case"key-guide":return F0.jsxDEV(y5,{onDone:(h)=>{if(h==="configure")J("config");else T5(h).then(()=>J("launcher"))}},void 0,!1,void 0,this)}})();return F0.jsxDEV(rA,{flexDirection:"column",children:[R.length>0&&F0.jsxDEV(rA,{flexDirection:"column",paddingX:2,children:R.map((h,b)=>F0.jsxDEV(a,{color:BA[h.type],dimColor:h.type==="info",children:[S[h.type]," ",h.text]},b,!0,void 0,this))},void 0,!1,void 0,this),v]},void 0,!0,void 0,this)}function yN(){return new Promise((I)=>{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 w(R){E?.clear(),E?.unmount(),E=null,g(),DM(),I(R)}function J(){E?.clear(),E?.unmount(),E=null,g(),DM(),I(null)}E=v1(F0.jsxDEV(Qz,{onLaunch:w,onExit:J},void 0,!1,void 0,this))})}async function u5(){await Q5(),await E5(),await H5();while(!0){let I=await yN();if(!I)break;let E=AM(I.clientId);if(!E)continue;eE("menu_action",{action:"launch",client_id:I.clientId});let g=await HR(I.clientId);if(!g){WI.warn(QI("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let w=await wR(E,{projectPath:I.projectPath,args:I.args,selectedOptionIds:I.selectedOptionIds,providerContext:g});if(!w.success)WI.error(w.error||QI("cli.launchFailed"))}}OC();import{join as o0}from"path";var uN="tako-cli",d1="0.2.38";function Ez(I,E){let g=I.split(".").map(Number),w=E.split(".").map(Number);for(let J=0;J<3;J++){let R=g[J]||0,L=w[J]||0;if(R>L)return 1;if(R<L)return-1}return 0}async function Cz(){try{let I=await lF(),E=await fetch(`${I}/${uN}/latest`,{signal:AbortSignal.timeout(5000)});if(!E.ok)return null;return(await E.json()).version||null}catch{return null}}async function Dz(){let I=await Cz();if(!I)return{hasUpdate:!1,currentVersion:d1};return{hasUpdate:Ez(I,d1)>0,latestVersion:I,currentVersion:d1}}async function _5(){let I=await import("fs/promises"),E=o0(jC,"bin"),g=o0(E,"tako"),w=o0(p0,"node_modules/tako-cli/dist/index.js");if(await I.mkdir(E,{recursive:!0}),process.platform==="win32"){let R=`@echo off\r
613
+ `)}var LS={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(I){return{GEMINI_API_KEY:I.apiKey,GOOGLE_GEMINI_BASE_URL:I.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:YS};JH(LS);import{join as AC}from"path";OC();var ER=null,CR={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}};async function PH(){if(ER)return ER;let I=[ZS,XS,WS];for(let E of I)try{let g=await Promise.race([E(),new Promise((w,J)=>setTimeout(()=>J(Error("timeout")),3000))]);if(g)return ER=g,g}catch{}return ER="cn","cn"}async function ZS(){try{let I=await fetch("http://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(2000)});if(!I.ok)return null;return(await I.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function XS(){try{let I=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(2000)});if(!I.ok)return null;return(await I.json()).country==="CN"?"cn":"global"}catch{return null}}async function WS(){try{let I=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(2000)});if(!I.ok)return null;return(await I.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function qS(){let I=await PH();return CR[I]}async function lF(){return(await qS()).npm}function fL(){return"curl -fsSL https://bun.sh/install | bash"}async function OS(){let I=CR.cn.bunBinary,E=await fetch(`${I}/`,{signal:AbortSignal.timeout(1e4)});if(!E.ok)throw Error(`Failed to fetch bun versions: ${E.status}`);let w=(await E.json()).map((J)=>J.name.replace(/\/$/,"")).filter((J)=>/^bun-v\d+\.\d+\.\d+$/.test(J)).sort((J,R)=>{let L=J.replace("bun-v","").split(".").map(Number),X=R.replace("bun-v","").split(".").map(Number);for(let z=0;z<3;z++)if(L[z]!==X[z])return X[z]-L[z];return 0});if(w.length===0)throw Error("No bun versions found on mirror");return w[0]}async function vL(){let I=CR.cn.bunBinary,E=await OS(),w={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",J=process.arch==="arm64"?"aarch64":"x64",R=`bun-${w}-${J}`;return`${I}/${E}/${R}.zip`}async function bL(){let I=await PH(),E=CR[I];if(I==="cn")WI.info(`${QI("region.usingChinaMirror")} npm: ${E.npm}`);else WI.info(QI("region.usingGlobalMirror"))}var SS=class{constructor(I){this.baseUrl=I.baseUrl,this.headers={"Content-Type":"application/json",...I.defaultHeaders},this.maxRetries=I.maxRetries??3,this.initialRetryDelay=I.initialRetryDelay??500}async resolveHeaders(){let I={};for(let[E,g]of Object.entries(this.headers)){let w=await g;w!==null&&(I[E]=w)}return I}addHeader(I,E){this.headers[I]=E}async post(I,E,g,w){try{let J=await fetch(I,{method:"POST",headers:await this.resolveHeaders(),body:E?JSON.stringify(E??{}):void 0,keepalive:!0,...g});if(J.status===401)return null;if(J.status!==200&&J.status!==202)throw Error(`HTTP error! status: ${J.status}`);let R=await J.text();return R?JSON.parse(R):null}catch(J){if(w<this.maxRetries){let R=this.initialRetryDelay*2**w;return await new Promise((L)=>setTimeout(L,R)),this.post(I,E,g,w+1)}return console.error("Max retries reached:",J),null}}async fetch(I,E,g={}){let w=`${this.baseUrl}${I}`;return this.post(w,E,g,0)}},mL=class{constructor(I){this.options=I,this.queue=[];let E={"openpanel-client-id":I.clientId};I.clientSecret&&(E["openpanel-client-secret"]=I.clientSecret),E["openpanel-sdk-name"]=I.sdk||"node",E["openpanel-sdk-version"]=I.sdkVersion||"1.0.4",this.api=new SS({baseUrl:I.apiUrl||"https://api.openpanel.dev",defaultHeaders:E})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(I){return this.options.disabled||this.options.filter&&!this.options.filter(I)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(I),Promise.resolve()):this.api.fetch("/track",I)}setGlobalProperties(I){this.global={...this.global,...I}}async track(I,E){return this.log("track event",I,E),this.send({type:"track",payload:{name:I,profileId:E?.profileId??this.profileId,properties:{...this.global??{},...E??{}}}})}async identify(I){if(this.log("identify user",I),I.profileId&&(this.profileId=I.profileId,this.flush()),Object.keys(I).length>1)return this.send({type:"identify",payload:{...I,properties:{...this.global,...I.properties}}})}async alias(I){}async increment(I){return this.send({type:"increment",payload:I})}async decrement(I){return this.send({type:"decrement",payload:I})}async revenue(I,E){let g=E?.deviceId;return delete E?.deviceId,this.track("revenue",{...E??{},...g?{__deviceId:g}:{},__revenue:I})}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((I)=>{this.send({...I,payload:{...I.payload,profileId:I.payload.profileId??this.profileId}})}),this.queue=[]}log(...I){this.options.debug&&console.log("[OpenPanel.dev]",...I)}};var zS="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",kS="sec_1e0ea34016bc3a5f8ef5",$S="https://op.shiroha.tech/api",jH=null;function xL(){if(!jH)jH=new mL({clientId:zS,clientSecret:kS,apiUrl:$S});return jH}var DR=[];function pL(I,E,g){let w=xL().track(I,{profileId:E,...g}).catch(()=>{});DR.push(w)}function cL(I,E){let{email:g,...w}=E,J=xL().identify({profileId:I,...typeof g==="string"?{email:g}:{},firstName:String(w.platform||""),properties:w}).catch(()=>{});DR.push(J)}async function lL(){if(await Promise.allSettled(DR),DR.length=0,jH){try{jH.flush()}catch{}jH=null}}OC();OC();var VS="0.2.39";function dL(){return{cli_version:VS,platform:process.platform,arch:process.arch,locale:RG(),node_version:process.version}}function aL(I){return Bun.hash(I).toString(16).slice(0,8)}var TS="0.2.39",ZN=!1,hH=null;async function iL(){if(hH!==null)return hH;try{return hH=(await FQ()).telemetryEnabled!==!1,hH}catch{return hH=!1,!1}}async function oL(){try{let I=await FQ();if(I.apiId)return I.apiId;let E=I.providers??[],g=I.defaultProviderId,w=g?E.find((J)=>J.id===g):E[0];if(w){if(w.apiId)return w.apiId;if(w.email)return w.email;return w.id}return"anonymous"}catch{return"anonymous"}}async function g0(){if(ZN)return;try{if(!await iL())return;let I=await FQ(),E=await oL();if(E==="anonymous")return;let w=(I.providers??[]).find((R)=>R.email)?.email,J=await PH();cL(E,{...w?{email:w}:{},region:J,locale:RG(),first_seen_version:TS,platform:process.platform,arch:process.arch}),ZN=!0}catch{}}function eE(I,E){yS(I,E).catch(()=>{})}async function yS(I,E){try{if(!await iL())return;let g=await oL();pL(I,g,{...dL(),...E})}catch{}}async function b1(){await lL()}function dF(){hH=null,ZN=!1}var NG=null;function uS(I){return I.startsWith(o2)}async function _S(){try{if(!await Bun.file(qD).exists())return null;let E=Bun.spawn([qD,"--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 sL(){return await _S()!==null}async function PS(){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{}WI.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let I=["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 I)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 jS(I){let E=await import("fs/promises"),{join:g}=await import("path"),w=process.platform==="win32",J=w?"bun.exe":"bun",R=await vL();WI.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${R}`);let L=await fetch(R);if(!L.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${L.status}`);let X=g(I,"bun-download.zip");await Bun.write(X,L);let z=g(I,"bin");if(await E.mkdir(z,{recursive:!0}),w){let i=`Expand-Archive -Path "${X}" -DestinationPath "${I}" -Force`,BA=Bun.spawn(["powershell","-Command",i],{stdout:"pipe",stderr:"pipe"});if(await BA.exited,BA.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let i=Bun.spawn(["unzip","-oq",X,"-d",I],{stdout:"pipe",stderr:"pipe"});if(await i.exited,i.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let _=await E.readdir(I);for(let i of _){let BA=g(I,i);if((await E.stat(BA)).isDirectory()&&i.startsWith("bun-")){let v=g(BA,J);try{if(await E.access(v),await E.rename(v,g(z,J)),!w)await E.chmod(g(z,J),493);await E.rm(BA,{recursive:!0,force:!0});break}catch{}}}return await E.rm(X,{force:!0}),!0}async function hS(){let I=RH();if(!await PS())return WI.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await bL(),I.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(o2,{recursive:!0}),await PH()==="cn")await jS(o2);else if(process.platform==="win32"){let w=`$env:BUN_INSTALL="${o2}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",w],{stdout:"inherit",stderr:"inherit"}).exited!==0)return I.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let w=`BUN_INSTALL="${o2}" ${fL()}`;if(await Bun.spawn(["bash","-c",w],{stdout:"inherit",stderr:"inherit"}).exited!==0)return I.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return NG=qD,I.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),WI.info(`\u5B89\u88C5\u4F4D\u7F6E: ${o2}`),!0}catch(E){return I.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function fS(){if(await sL())return NG=qD,!0;return WI.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),WI.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await hS()}async function m1(){if(NG){if(!uS(NG))NG=qD;return NG}if(await sL())return NG=qD,qD;return qD}async function zN(I){try{let E=await lF(),g=await fetch(`${E}/${I}/latest`);if(!g.ok)return null;return(await g.json()).version}catch{return null}}async function vS(I){return(await FQ()).installedClients[I.id]?.version||null}async function nL(I){let E=UH(I.id),g=AC(E,"package.json");try{return await Bun.file(g).exists()}catch{return!1}}async function rL(I){let E=await vS(I);if(!E)return!0;let g=await zN(I.package);if(!g)return!1;return E!==g}function tL(I){let{platform:E,arch:g}=process,w=`${E}-${g}`;for(let[J,R]of Object.entries(I))if(J.endsWith(w))return{pkg:J,version:R};return null}async function eL(I,E,g,w){let J=AC(E,"node_modules",I.package,"package.json");try{let R=Bun.file(J);if(!await R.exists())return;let X=(await R.json()).optionalDependencies;if(!X||typeof X!=="object")return;let z=tL(X);if(!z)return;let i=process.platform==="win32"?`${I.command}.exe`:I.command,BA=AC(E,"node_modules",z.pkg,i),S=Bun.file(BA);if(await S.exists()&&S.size>1024)return;WI.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${z.pkg}...`);for(let v of[z.version,"latest"]){let h=Bun.spawn([g,"add",`${z.pkg}@${v}`],{cwd:E,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:w}});if(await h.exited,h.exitCode===0)break;if(v==="latest"){let b=await new Response(h.stderr).text();WI.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${b.slice(0,200)}`)}}}catch(R){WI.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${R instanceof Error?R.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function qN(I,E){let g=await import("fs/promises"),w=AC(E,"node_modules",I.package,"package.json");try{let J=Bun.file(w);if(!await J.exists())return!1;let R=await J.json(),L=R.optionalDependencies;if(!L)return!0;let X=tL(L);if(!X)return WI.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let z=R.bin,_=typeof z==="string"?z:z?.[I.command];if(!_)return!1;let i=AC(E,"node_modules",I.package,_),BA=process.platform==="win32",S=BA?`${I.command}.exe`:I.command,v=AC(E,"node_modules",X.pkg,S),h=Bun.file(v);if(await h.exists()&&h.size>1024){if(await Bun.write(i,h),!BA)await g.chmod(i,493);return!0}let b=AC(E,"node_modules",I.package,"install.cjs");if(await Bun.file(b).exists()){WI.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let bA=await m1(),_A=Bun.spawn([bA,b],{cwd:AC(E,"node_modules",I.package),stdout:"pipe",stderr:"pipe"});if(await _A.exited,_A.exitCode!==0){let uA=await new Response(_A.stderr).text();WI.warn(`postinstall \u5931\u8D25: ${uA.slice(0,200)}`)}let JA=Bun.file(i);if(await JA.exists()&&JA.size>1024){if(!BA)await g.chmod(i,493);return!0}}WI.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let p=await lF();for(let bA of[X.version,"latest"])try{let _A=await fetch(`${p}/${X.pkg}/${bA}`);if(!_A.ok)continue;let uA=(await _A.json()).dist?.tarball;if(!uA)continue;let $A=AC(jC,".tmp-extract-"+Date.now());await g.mkdir($A,{recursive:!0});let hA=AC($A,"pkg.tgz"),ZA=Bun.spawn(["curl","-fsSL","-o",hA,uA],{stdout:"pipe",stderr:"pipe"});if(await ZA.exited,ZA.exitCode!==0){let gB=await new Response(ZA.stderr).text();WI.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${gB.slice(0,200)}`),await g.rm($A,{recursive:!0,force:!0}).catch(()=>{});continue}let pA=Bun.file(hA).size;if(pA<1024){WI.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${pA} bytes, url: ${uA.slice(0,100)})`),await g.rm($A,{recursive:!0,force:!0}).catch(()=>{});continue}let oA=Bun.spawn(["tar","xzf",hA,"-C",$A,`package/${S}`],{stdout:"pipe",stderr:"pipe"});await oA.exited;let JB=AC($A,"package",S),yA=Bun.file(JB);if(await yA.exists()&&yA.size>1024){if(await Bun.write(i,yA),!BA)await g.chmod(i,493);return await g.rm($A,{recursive:!0,force:!0}).catch(()=>{}),!0}let NB=await new Response(oA.stderr).text();WI.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${pA} bytes, exit=${oA.exitCode}): ${NB.slice(0,200)}`),await g.rm($A,{recursive:!0,force:!0}).catch(()=>{})}catch(_A){WI.warn(`\u4E0B\u8F7D\u5931\u8D25: ${_A instanceof Error?_A.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(p!=="https://registry.npmjs.org")try{let bA=`https://registry.npmjs.org/${X.pkg}/-/${X.pkg.split("/").pop()}-${X.version}.tgz`;WI.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let _A=AC(jC,".tmp-extract-"+Date.now());await g.mkdir(_A,{recursive:!0});let JA=AC(_A,"pkg.tgz"),uA=Bun.spawn(["curl","-fsSL","-o",JA,bA],{stdout:"pipe",stderr:"pipe"});if(await uA.exited,uA.exitCode===0&&Bun.file(JA).size>1024){await Bun.spawn(["tar","xzf",JA,"-C",_A,`package/${S}`],{stdout:"pipe",stderr:"pipe"}).exited;let hA=Bun.file(AC(_A,"package",S));if(await hA.exists()&&hA.size>1024){if(await Bun.write(i,hA),!BA)await g.chmod(i,493);return await g.rm(_A,{recursive:!0,force:!0}).catch(()=>{}),!0}}await g.rm(_A,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(J){return WI.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function ON(I,E=!1){let g=RH(),w=UH(I.id);try{if(!await fS())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 J=await nL(I),R=E||await rL(I);if(J&&!R)return{success:!0};let L=J?"\u66F4\u65B0":"\u5B89\u88C5";g.start(`\u6B63\u5728${L} ${I.name}...`);let X=await import("fs/promises");await X.mkdir(w,{recursive:!0});let z=AC(w,"package.json");if(!await Bun.file(z).exists())await Bun.write(z,JSON.stringify({name:`tako-${I.id}`,private:!0,dependencies:{}},null,2));let i=await m1(),BA=await lF();if(J){let p=AC(w,"bun.lock");try{await X.unlink(p)}catch{}}let S=Bun.spawn([i,"add",`${I.package}@latest`],{cwd:w,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:BA}});if(await S.exited!==0){let p=await new Response(S.stderr).text();return g.stop(`${L} ${I.name} \u5931\u8D25`),{success:!1,error:p}}await eL(I,w,i,BA),await qN(I,w);let h=await zN(I.package),b=(await FQ()).installedClients[I.id]?.version;if(h){let p=await FQ();if(p.installedClients[I.id]={version:h,installedAt:new Date().toISOString()},await t4(p),J&&b)eE("client_updated",{client_id:I.id,from_version:b,to_version:h});else eE("client_installed",{client_id:I.id,client_version:h})}return g.stop(`${I.name} ${L}\u5B8C\u6210`),{success:!0}}catch(J){return g.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}}}async function XN(I){try{let E=Bun.file(I);if(!await E.exists())return!0;if(E.size<100)return!0;let w=new Uint8Array(await E.slice(0,4).arrayBuffer());if(w[0]===127&&w[1]===69&&w[2]===76&&w[3]===70)return!1;if(w[0]===254||w[0]===207||w[0]===206||w[0]===202)return!1;if(w[0]===77&&w[1]===90)return!1;return!0}catch{return!0}}async function WN(I){if(I.runtime!=="native")return;let E=UH(I.id),g=AC(E,"node_modules",I.package,"package.json");try{let w=Bun.file(g);if(!await w.exists())return;let R=(await w.json()).bin;if(!R)return;let L=typeof R==="string"?R:R[I.command];if(!L)return;let X=AC(E,"node_modules",I.package,L);if(!await XN(X))return;WI.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let z=await m1(),_=await lF();if(await eL(I,E,z,_),!await qN(I,E)||await XN(X)){if(WI.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 ON(I)).success)if(await qN(I,E),await XN(X))WI.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else WI.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else WI.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function A5(I){if(!await nL(I)){let w=await ON(I);if(w.success)await WN(I);return w}if(await WN(I),await rL(I)){let w=await zN(I.package),J=(await FQ()).installedClients[I.id]?.version||"\u672A\u77E5",R=w?`${J} \u2192 ${w}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(WI.info(`${I.name} \u53D1\u73B0\u66F4\u65B0: ${R}`),await bS(I.id))return WI.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await IR({message:`\u662F\u5426\u66F4\u65B0 ${I.name}\uFF1F`,defaultValue:!1}))return await mS(I.id),WI.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let X=await ON(I,!0);if(X.success)await WN(I);return X}return{success:!0}}var SN=AC(jC,".update-dismissed.json");async function bS(I){try{let E=Bun.file(SN);if(!await E.exists())return!1;let w=(await E.json())[I];if(!w)return!1;let J=new Date().toISOString().slice(0,10);return w===J}catch{return!1}}async function mS(I){try{let E={},g=Bun.file(SN);if(await g.exists())try{E=await g.json()}catch{}E[I]=new Date().toISOString().slice(0,10),await Bun.write(SN,JSON.stringify(E))}catch{}}async function x1(){return(await FQ()).providers??[]}async function I8(){let I=await FQ(),E=I.providers??[];if(E.length===0)return;if(I.defaultProviderId){let g=E.find((w)=>w.id===I.defaultProviderId);if(g)return g}return E[0]}async function fH(I){return(await x1()).filter((w)=>E1(w,I)).sort((w,J)=>{let R=w.lastUsedAt?new Date(w.lastUsedAt).getTime():0,L=J.lastUsedAt?new Date(J.lastUsedAt).getTime():0;if(R!==L)return L-R;return new Date(J.createdAt).getTime()-new Date(w.createdAt).getTime()})}async function vH(I){let E=await FQ(),g={...I,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(E.providers=[...E.providers??[],g],!E.defaultProviderId)E.defaultProviderId=g.id;return await Ng(E),g}async function p1(I,E){let g=await FQ(),w=g.providers??[],J=w.findIndex((R)=>R.id===I);if(J===-1)return;w[J]={...w[J],...E},g.providers=w,await Ng(g)}async function B5(I){let E=await FQ();if((E.providers??[]).find((w)=>w.id===I)?.builtin)return;if(E.providers=(E.providers??[]).filter((w)=>w.id!==I),E.defaultProviderId===I)E.defaultProviderId=E.providers[0]?.id;if(E.clientProviderMap){for(let[w,J]of Object.entries(E.clientProviderMap))if(J===I)delete E.clientProviderMap[w]}await Ng(E)}async function I5(I){let E=await FQ();if(!(E.providers??[]).some((w)=>w.id===I))return;E.defaultProviderId=I,await Ng(E)}async function bH(I){let E=await FQ(),g=E.clientProviderMap?.[I];if(g){let w=(E.providers??[]).find((J)=>J.id===g);if(w&&E1(w,I))return w}return}async function gR(I,E){let g=await FQ();g.clientProviderMap={...g.clientProviderMap,[I]:E};let w=g.providers??[],J=w.findIndex((R)=>R.id===E);if(J!==-1)w[J]={...w[J],lastUsedAt:new Date().toISOString()},g.providers=w;await Ng(g)}function Q8(I){return{type:I.type,apiKey:I.apiKey,baseUrl:I.baseUrl,authData:I.authData,model:I.model}}async function xS(){try{let I=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),E=await new Response(I.stdout).text();if(await I.exited!==0)return null;let w=JSON.parse(E.trim());if(!w.loggedIn||w.authMethod!=="claude.ai")return null;let J=w.subscriptionType||"pro",R=w.email||"",L=`Claude ${J.charAt(0).toUpperCase()+J.slice(1)}${R?` (${R})`:""}`;return{id:crypto.randomUUID(),name:L,type:"claude-subscription",supportedClients:Kg("claude-subscription"),createdAt:new Date().toISOString(),email:R,subscriptionType:J}}catch{return null}}async function pS(){try{let{homedir:I}=await import("os"),{join:E}=await import("path"),g=await import("fs/promises"),w=E(I(),".codex","auth.json"),J=JSON.parse(await g.readFile(w,"utf-8"));if(J.auth_mode!=="chatgpt"||!J.tokens?.access_token)return null;let R="";try{R=JSON.parse(atob(J.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:J,email:R}}catch{return null}}async function cS(){let I=await pS();if(I){let{auth:E,email:g}=I;return{id:crypto.randomUUID(),name:g?`Codex Plus (${g})`:"Codex Subscription",type:"codex-subscription",email:g||void 0,supportedClients:Kg("codex-subscription"),authData:E,createdAt:new Date().toISOString()}}try{let E=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited!==0||!g.includes("Logged in")||g.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:Kg("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function FR(){let I=[],[E,g]=await Promise.all([xS(),cS()]);if(E)I.push(E);if(g)I.push(g);return I}async function GR(I){let E=await FQ(),g=E.providers??[],w=new Set(g.map((R)=>`${R.type}:${R.email||""}`)),J=0;for(let R of I){let L=`${R.type}:${R.email||""}`;if(!w.has(L))g.push(R),w.add(L),J++;else if(R.authData){let X=g.find((z)=>z.type===R.type&&z.email===R.email);if(X)X.authData=R.authData}}if(J>0){if(E.providers=g,!E.defaultProviderId&&g.length>0)E.defaultProviderId=g[0].id;await Ng(E)}return J}async function Q5(){let I=await FQ();if(!I.apiKey||I.providers&&I.providers.length>0)return!1;let E={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:I.apiKey,baseUrl:Rg,apiId:I.apiId,supportedClients:Kg("tako"),createdAt:new Date().toISOString(),builtin:!0};return I.providers=[E],I.defaultProviderId=E.id,await Ng(I),!0}async function E5(){let I=await FQ(),E=I.providers??[],g=!1;for(let w of E)if(w.type==="tako"&&!w.builtin)w.builtin=!0,g=!0;if(I.apiKey&&!E.some((w)=>w.type==="tako")){if(E.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:I.apiKey,baseUrl:Rg,apiId:I.apiId,supportedClients:Kg("tako"),createdAt:new Date().toISOString(),builtin:!0}),!I.defaultProviderId)I.defaultProviderId=E[E.length-1].id;g=!0}if(g)I.providers=E,await Ng(I)}import{homedir as lS}from"os";var dS=50,kN=3;async function $N(I){try{return(await(await import("fs/promises")).stat(I)).isDirectory()}catch{return!1}}async function C5(I,E,g){let w=await FQ(),J=w.recentProjects||[],R=new Date().toISOString(),L=J.findIndex((z)=>z.path===I);if(L>=0){let z=J[L],_=z.clientUsage||{},i=_[E]||{count:0,lastAt:R};J[L]={...z,launchCount:z.launchCount+1,lastLaunchedAt:R,lastClientId:E,clientUsage:{..._,[E]:{count:i.count+1,lastAt:R,lastSelectedOptionIds:g??i.lastSelectedOptionIds}}}}else J.push({path:I,launchCount:1,lastLaunchedAt:R,lastClientId:E,clientUsage:{[E]:{count:1,lastAt:R,lastSelectedOptionIds:g}}});let X=J.sort((z,_)=>new Date(_.lastLaunchedAt).getTime()-new Date(z.lastLaunchedAt).getTime()).slice(0,dS);w.recentProjects=X,await Ng(w)}async function D5(I){let g=(await FQ()).recentProjects||[],w=process.cwd(),R=g.find((X)=>X.path===w)?.clientUsage?.[I]?.lastSelectedOptionIds;if(R)return R;return g.filter((X)=>X.path!==w&&X.clientUsage?.[I]?.lastSelectedOptionIds).sort((X,z)=>{let _=new Date(X.clientUsage[I].lastAt).getTime();return new Date(z.clientUsage[I].lastAt).getTime()-_})[0]?.clientUsage?.[I]?.lastSelectedOptionIds??[]}function aS(I,E){let g=I.clientUsage?.[E];if(g)return new Date(g.lastAt).getTime();if(I.lastClientId===E)return new Date(I.lastLaunchedAt).getTime();return 0}async function g5(I,E=kN,g=!0){let J=(await FQ()).recentProjects||[],R=process.cwd(),X=J.filter((_)=>{if(g&&_.path===R)return!1;return _.clientUsage?.[I]||_.lastClientId===I}).map((_)=>({..._,lastUsedTime:aS(_,I)})).sort((_,i)=>i.lastUsedTime-_.lastUsedTime),z=[];for(let{lastUsedTime:_,...i}of X){if(z.length>=E)break;if(await $N(i.path))z.push(i)}return z}async function F5(){let E=(await FQ()).recentProjects||[],g=process.cwd();return E.find((J)=>J.path===g)?.lastClientId||null}function VN(I,E=25){let g=lS(),w=I.startsWith(g)?"~"+I.slice(g.length):I;if(w.length>E){let R=w.split("/").pop()||"";if(R.length>E-4)w="..."+R.slice(-E+3);else w=`.../${R}`}return w}function G5(I){let{t:E}=(OC(),d5(uL)),g=Date.now(),w=new Date(I).getTime(),J=g-w,R=Math.floor(J/60000),L=Math.floor(J/3600000),X=Math.floor(J/86400000),z=Math.floor(X/7),_=Math.floor(X/30);if(R<1)return E("time.justNow");if(R<60)return E("time.minutesAgo",{n:R});if(L<24)return E("time.hoursAgo",{n:L});if(X===1)return E("time.yesterday");if(X<7)return E("time.daysAgo",{n:X});if(X<30)return E("time.weeksAgo",{n:z});return E("time.monthsAgo",{n:_})}OC();async function w5(I,E){try{let g=E?.projectPath||process.cwd(),w=E?.providerContext;if(!w)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let J=await OK(I);if(!J)J=SK(I);if(!await Bun.file(J).exists())return{success:!1,error:`\u627E\u4E0D\u5230\u53EF\u6267\u884C\u6587\u4EF6: ${J}`};let L=I.getEnvVars(w),X={...process.env,...L},z;if(I.runtime==="native")z=[J];else z=[await m1(),J];if(E?.args&&E.args.length>0)z=[...z,...E.args];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{}try{Bun.spawnSync(z,{env:X,stdio:["inherit","inherit","inherit"],cwd:g})}catch{await Bun.spawn(z,{env:X,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 iS(I,E){if(E?.providerContext)return E.providerContext;let g=await I8();if(g){let w=await fH(I.id);if(w.some((R)=>R.id===g.id))return Q8(g);if(w.length>0)return Q8(w[0])}return null}async function wR(I,E){try{let g=E?.projectPath||process.cwd();if(E?.projectPath){if(!await $N(E.projectPath))return{success:!1,error:QI("launcher.directoryNotFound",{path:E.projectPath})}}let w=await A5(I);if(!w.success)return w;let J=await iS(I,E);if(!J)return{success:!1,error:QI("launcher.apiKeyNotConfigured")};if(I.setupConfigFiles)await I.setupConfigFiles(J,E?.selectedOptionIds);await C5(g,I.id,E?.selectedOptionIds);let L=(await FQ()).installedClients[I.id]?.version;return eE("client_launched",{client_id:I.id,client_version:L,project_hash:aL(g),is_recent_project:!!E?.projectPath}),WI.info(QI("launcher.starting",{client:I.name})),await w5(I,{...E,providerContext:J})}catch(g){return{success:!1,error:g instanceof Error?g.message:"Launch failed"}}}OC();async function HR(I){let E=await fH(I);if(E.length===0)return null;let g=await bH(I);if(g)return Q8(g);if(E.length===1)return Q8(E[0]);let w=await I8();if(w&&E.some((J)=>J.id===w.id))return Q8(w);return Q8(E[0])}async function H5(){let I=await FR();if(await GR(I)>0){for(let g of I)eE("provider_added",{provider_type:g.type,method:"auto_detect"});dF(),g0()}}var Wg=fB(pI(),1);var hC=fB(pI(),1);OC();async function U5(){try{let I=await eU();if(!I)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let g=await(await fetch(`${Rg}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:I})})).json(),J=await(await fetch(`${Rg}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:I,period:"daily"})})).json();if(!g.success)return{success:!1,error:g.error||g.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let R=(J.data||[]).map((L)=>({model:L.model,requests:L.requests,cost:L.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:R}}}catch(I){return{success:!1,error:I instanceof Error?I.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function J5(I){return I.toLocaleString("en-US")}async function UR(){try{let I=await eU();if(!I)return{success:!1};let g=await(await fetch(`${Rg}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:I}),signal:AbortSignal.timeout(5000)})).json();if(!g.plan||!g.usage)return{success:!1};return{success:!0,data:{windowCost:g.usage.windowCost??0,dailyCost:g.usage.dailyCost??0,weeklyCost:g.usage.weeklyCost??0,windowCostLimit:g.plan.window_cost_limit??0,dailyCostLimit:g.plan.daily_cost_limit??0,weeklyCostLimit:g.plan.weekly_cost_limit??0,windowMinutes:g.plan.window_minutes??0}}}catch{return{success:!1}}}var EB=fB(tE(),1),oS="0.2.39",M5={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},R5={icon:"\u25AA",color:"white"};async function sS(){let I=A1(),E=await F5(),g=await I8(),w=rC()==="zh",J=[...I].sort((X,z)=>{if(X.id===E)return-1;if(z.id===E)return 1;return 0}),R=[];for(let X of J){let z=await g5(X.id,kN,!0),_=process.cwd(),i=[{label:w?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:VN(_,45),path:_},...z.map((JA)=>({label:VN(JA.path,45),hint:G5(JA.lastLaunchedAt),path:JA.path}))],BA=await fH(X.id),v=await bH(X.id)||BA.find((JA)=>JA.id===g?.id)||BA[0],h=v?BA.findIndex((JA)=>JA.id===v.id):0,b=zK(X),p=await D5(X.id),bA=b.map((JA)=>JA.id),_A=p.filter((JA)=>bA.includes(JA));R.push({client:X,projects:i,providers:BA,activeProvIdx:Math.max(h,0),launchOptions:b,lastSelectedOptionIds:_A})}let L=R.some((X)=>X.providers.length>0);return{clients:R,defaultIdx:0,hasProviders:L}}function N5({color:I}){let{stdout:E}=KN(),g=Math.max((E.columns||80)-6,20);return EB.jsxDEV(rA,{marginY:0,children:EB.jsxDEV(a,{dimColor:!0,color:I,children:"\u2500".repeat(g)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function nS({quota:I,zh:E}){let g,w,J;if(I.windowCostLimit>0)g=`${Math.round(I.windowMinutes/60)}h`,w=I.windowCost,J=I.windowCostLimit;else if(I.dailyCostLimit>0)g=E?"\u4ECA\u65E5":"Today",w=I.dailyCost,J=I.dailyCostLimit;else return null;let R=J>0?w/J:0,L=R<0.7?"green":R<0.9?"yellow":"red";return EB.jsxDEV(a,{dimColor:!0,children:["\uD83D\uDCB0 ",g,": ",EB.jsxDEV(a,{color:L,children:["$",w.toFixed(2)]},void 0,!0,void 0,this),"/$",J.toFixed(0)]},void 0,!0,void 0,this)}function rS({clients:I,defaultIdx:E,hasProviders:g,onResult:w}){let[J,R]=hC.useState(E),[L,X]=hC.useState("projects"),[z,_]=hC.useState(0),[i,BA]=hC.useState(0),[S,v]=hC.useState(()=>I[E]?.activeProvIdx||0),[h,b]=hC.useState(()=>new Set(I[E]?.lastSelectedOptionIds??[])),[p,bA]=hC.useState(""),_A=I[J],JA=_A.projects,uA=_A.launchOptions,$A=_A.providers,hA=M5[_A.client.id]||R5,ZA=rC()==="zh",pA=$A[S],oA=pA?.name||(ZA?"\u672A\u914D\u7F6E":"N/A"),JB=pA?.type==="tako",[yA,NB]=hC.useState(null);return hC.useEffect(()=>{if(!JB){NB(null);return}UR().then((gB)=>{if(gB.success&&gB.data)NB(gB.data)})},[JB,J,S]),hC.useEffect(()=>{_(0),BA(0),X("projects"),v(I[J]?.activeProvIdx||0),b(new Set(I[J]?.lastSelectedOptionIds??[]))},[J]),nC(hC.useCallback((gB,xB)=>{if(gB==="q"){w({type:"exit"});return}if(gB==="s"){w({type:"stats"});return}if(gB==="c"){w({type:"config"});return}if(gB==="l"){w({type:"language"});return}if(gB==="p"&&L!=="provider"){w({type:"providers"});return}let TA=parseInt(gB);if(TA>=1&&TA<=I.length&&L!=="provider"){R(TA-1);return}if(L==="provider"){let XA=(GA)=>{v(GA);let RA=$A[GA];if(RA)gR(_A.client.id,RA.id).then(()=>{_A.activeProvIdx=GA,bA(ZA?`\u2713 \u5DF2\u7ED1\u5B9A ${RA.name}`:`\u2713 Bound ${RA.name}`),setTimeout(()=>bA(""),2000)})};if(xB.leftArrow&&$A.length>1){XA(S>0?S-1:$A.length-1);return}if(xB.rightArrow&&$A.length>1){XA(S<$A.length-1?S+1:0);return}if(xB.downArrow){X("projects"),_(0);return}if(xB.return||gB==="p"){w({type:"providers"});return}if(xB.escape){X("projects");return}return}if(xB.leftArrow){R((XA)=>XA>0?XA-1:I.length-1);return}if(xB.rightArrow){R((XA)=>XA<I.length-1?XA+1:0);return}if(L==="projects"){if(xB.downArrow){if(z<JA.length-1)_((XA)=>XA+1);else if(uA.length>0)X("options"),BA(0);return}if(xB.upArrow){if(z>0)_((XA)=>XA-1);else X("provider");return}}if(L==="options"){if(xB.downArrow){if(i<uA.length-1)BA((XA)=>XA+1);return}if(xB.upArrow){if(i>0)BA((XA)=>XA-1);else X("projects"),_(JA.length-1);return}}if(gB===" "&&L==="options"&&uA.length>0){let XA=uA[i];b((GA)=>{let RA=new Set(GA);return RA.has(XA.id)?RA.delete(XA.id):RA.add(XA.id),RA});return}if(xB.return&&L!=="provider"){let XA=JA[z],GA=[],RA=[];for(let WA of uA)if(h.has(WA.id))GA.push(...WA.args),RA.push(WA.id);w({type:"launch",clientId:_A.client.id,projectPath:XA.path,args:GA,selectedOptionIds:RA})}},[L,J,z,i,S,$A,pA,_A,JA,uA,h,I,w,ZA])),EB.jsxDEV(rA,{flexDirection:"column",paddingX:0,paddingY:1,children:[EB.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:hA.color,paddingX:2,paddingY:1,children:[EB.jsxDEV(rA,{justifyContent:"space-between",children:[EB.jsxDEV(rA,{gap:1,children:[EB.jsxDEV(a,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:["v",oS]},void 0,!0,void 0,this),p&&EB.jsxDEV(a,{color:"green",children:p},void 0,!1,void 0,this),!p&&yA&&EB.jsxDEV(nS,{quota:yA,zh:ZA},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L==="provider"?EB.jsxDEV(rA,{borderStyle:"bold",borderColor:hA.color,paddingX:1,children:[$A.length>1&&EB.jsxDEV(a,{color:hA.color,children:"\u25C0 "},void 0,!1,void 0,this),EB.jsxDEV(a,{color:hA.color,bold:!0,children:oA},void 0,!1,void 0,this),EB.jsxDEV(a,{color:"yellow",children:" \u2605"},void 0,!1,void 0,this),$A.length>1&&EB.jsxDEV(a,{color:hA.color,children:" \u25B6"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):EB.jsxDEV(rA,{gap:1,children:[EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u670D\u52A1\u5546":"via"},void 0,!1,void 0,this),EB.jsxDEV(a,{color:hA.color,children:oA},void 0,!1,void 0,this),EB.jsxDEV(a,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"[p]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!g&&EB.jsxDEV(rA,{marginTop:1,justifyContent:"center",gap:1,children:[EB.jsxDEV(a,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\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),EB.jsxDEV(rA,{marginTop:1,gap:1,justifyContent:"center",children:[EB.jsxDEV(a,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),I.map((gB,xB)=>{let TA=M5[gB.client.id]||R5;return xB===J?EB.jsxDEV(rA,{borderStyle:"bold",borderColor:TA.color,paddingX:1,children:EB.jsxDEV(a,{color:TA.color,bold:!0,children:[TA.icon," ",gB.client.name]},void 0,!0,void 0,this)},gB.client.id,!1,void 0,this):EB.jsxDEV(rA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:EB.jsxDEV(a,{dimColor:!0,children:[TA.icon," ",gB.client.name]},void 0,!0,void 0,this)},gB.client.id,!1,void 0,this)}),EB.jsxDEV(a,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),EB.jsxDEV(N5,{color:hA.color},void 0,!1,void 0,this),JA.map((gB,xB)=>{let TA=L==="projects"&&xB===z;return EB.jsxDEV(rA,{paddingLeft:1,children:[EB.jsxDEV(rA,{flexGrow:1,gap:1,children:[EB.jsxDEV(a,{color:TA?hA.color:void 0,bold:TA,children:TA?"\u25B8":" "},void 0,!1,void 0,this),EB.jsxDEV(a,{bold:TA,color:TA?hA.color:void 0,children:gB.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),gB.hint?EB.jsxDEV(a,{dimColor:!0,children:gB.hint},void 0,!1,void 0,this):null]},xB,!0,void 0,this)}),uA.length>0&&EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(N5,{color:hA.color},void 0,!1,void 0,this),uA.map((gB,xB)=>{let TA=h.has(gB.id),XA=L==="options"&&xB===i;return EB.jsxDEV(rA,{paddingLeft:1,children:[EB.jsxDEV(rA,{flexGrow:1,gap:1,children:[EB.jsxDEV(a,{color:XA?hA.color:void 0,bold:XA,children:XA?"\u25B8":" "},void 0,!1,void 0,this),EB.jsxDEV(a,{color:TA?hA.color:void 0,bold:TA,children:TA?"\u25C9":"\u25CB"},void 0,!1,void 0,this),EB.jsxDEV(a,{bold:XA,color:XA?hA.color:void 0,children:gB.label[ZA?"zh":"en"]||gB.label.en},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:gB.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),XA&&EB.jsxDEV(a,{dimColor:!0,children:gB.description[ZA?"zh":"en"]||gB.description.en},void 0,!1,void 0,this)]},gB.id,!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),EB.jsxDEV(rA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:L==="provider"?EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5207\u6362\u5E76\u7ED1\u5B9A":"switch & bind"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u7BA1\u7406\u670D\u52A1\u5546":"manage"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):L==="options"?EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):EB.jsxDEV(EB.Fragment,{children:[EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),EB.jsxDEV(a,{dimColor:!0,children:ZA?"\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 K5({onResult:I}){let[E,g]=hC.useState(null);if(hC.useEffect(()=>{sS().then(g)},[]),!E)return EB.jsxDEV(a,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return EB.jsxDEV(rS,{clients:E.clients,defaultIdx:E.defaultIdx,hasProviders:E.hasProviders,onResult:I},void 0,!1,void 0,this)}var aQ=fB(pI(),1);OC();var GB=fB(tE(),1),i0={"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"}},TN={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},c1=["claude-subscription","codex-subscription","tako","anthropic","deepseek","custom"];function Y5({provider:I,focused:E,bound:g,isDefault:w,zh:J}){let R=i0[I.type]||i0.custom,L=J?Q0[I.type]?.zh:Q0[I.type]?.en;return GB.jsxDEV(rA,{flexDirection:"column",borderStyle:E?"bold":"round",borderColor:E?R.color:g?R.color:"gray",paddingX:2,paddingY:0,children:[GB.jsxDEV(rA,{justifyContent:"space-between",children:[GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{color:R.color,bold:!0,children:R.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:E||g,color:E?R.color:void 0,children:I.name},void 0,!1,void 0,this),w&&GB.jsxDEV(a,{color:"yellow",children:["\u2605 ",J?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),I.builtin&&GB.jsxDEV(a,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{gap:1,children:g?GB.jsxDEV(a,{color:R.color,bold:!0,children:["\u25CF ",J?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):GB.jsxDEV(a,{dimColor:!0,children:["\u25CB ",J?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:L},void 0,!1,void 0,this),I.model&&GB.jsxDEV(a,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),I.model&&GB.jsxDEV(a,{dimColor:!0,children:I.model},void 0,!1,void 0,this),I.email&&GB.jsxDEV(a,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),I.email&&GB.jsxDEV(a,{dimColor:!0,children:I.email},void 0,!1,void 0,this),I.apiKey&&GB.jsxDEV(a,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),I.apiKey&&GB.jsxDEV(a,{dimColor:!0,children:["Key: ",I.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),E&&GB.jsxDEV(rA,{marginTop:0,children:GB.jsxDEV(a,{color:R.color,dimColor:!0,children:["Enter ",J?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",J?"\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 L5({screen:I,addType:E,addKey:g,addUrl:w,addModel:J,rowIdx:R,zh:L}){let X=i0[E]||i0.custom,z=L?Q0[E]?.zh:Q0[E]?.en,_=I==="add-model"?CM(E):void 0;if(_)return GB.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[GB.jsxDEV(rA,{borderStyle:"bold",borderColor:X.color,paddingX:3,paddingY:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,marginBottom:1,children:[GB.jsxDEV(a,{color:X.color,bold:!0,children:X.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:!0,color:X.color,children:z},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:["\u2014 ",L?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),_.map((h,b)=>{let p=R===b;return GB.jsxDEV(rA,{paddingLeft:1,gap:1,children:[GB.jsxDEV(a,{color:p?X.color:void 0,bold:p,children:p?"\u25B8":" "},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:p,color:p?X.color:void 0,children:h},void 0,!1,void 0,this)]},h,!0,void 0,this)})]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u9009\u62E9":"select"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let i=I==="add-key"?L?"\u8F93\u5165 API Key":"Enter API Key":I==="add-url"?"Base URL":L?"\u6A21\u578B":"Model",BA=I==="add-key"?g:I==="add-url"?w:J,S=I==="add-url"?"https://your-proxy.com":I==="add-model"?Q1(E)||(L?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,v=I==="add-url"?L?"\u4E0B\u4E00\u6B65":"next":I==="add-model"?L?"\u4FDD\u5B58":"save":L?"\u786E\u8BA4":"confirm";return GB.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[GB.jsxDEV(rA,{borderStyle:"bold",borderColor:X.color,paddingX:3,paddingY:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,marginBottom:1,children:[GB.jsxDEV(a,{color:X.color,bold:!0,children:X.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:!0,color:X.color,children:z},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:["\u2014 ",i]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),S&&GB.jsxDEV(a,{dimColor:!0,children:[" ",L?"\u9ED8\u8BA4":"Default",": ",S]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:S?1:0,children:[GB.jsxDEV(a,{color:X.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),GB.jsxDEV(a,{children:BA||S||""},void 0,!1,void 0,this),GB.jsxDEV(a,{color:X.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:v},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:L?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function Z5({provider:I,defaultId:E,detailActions:g,detailIdx:w,zh:J}){let R=i0[I.type]||i0.custom,L=J?Q0[I.type]?.zh:Q0[I.type]?.en;return GB.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[GB.jsxDEV(rA,{borderStyle:"bold",borderColor:R.color,paddingX:3,paddingY:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{color:R.color,bold:!0,children:R.icon},void 0,!1,void 0,this),GB.jsxDEV(a,{bold:!0,color:R.color,children:I.name},void 0,!1,void 0,this),I.id===E&&GB.jsxDEV(a,{color:"yellow",children:[" \u2605 ",J?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),GB.jsxDEV(rA,{marginTop:1,flexDirection:"column",children:[GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:[J?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),GB.jsxDEV(a,{children:L},void 0,!1,void 0,this),I.builtin&&GB.jsxDEV(a,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I.model&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:[J?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),GB.jsxDEV(a,{children:I.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I.email&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),GB.jsxDEV(a,{children:I.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),I.apiKey&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),GB.jsxDEV(a,{children:[I.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),I.baseUrl&&GB.jsxDEV(rA,{gap:1,children:[GB.jsxDEV(a,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),GB.jsxDEV(a,{children:I.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),GB.jsxDEV(rA,{gap:1,marginTop:1,children:g.map((X,z)=>{let _=X==="default"?`\u2B50 ${J?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:X==="rekey"?`\uD83D\uDD11 ${J?"\u4FEE\u6539 Key":"Change Key"}`:X==="delete"?`\uD83D\uDDD1\uFE0F ${J?"\u5220\u9664":"Delete"}`:`\u2190 ${J?"\u8FD4\u56DE":"Back"}`,i=z===w;return GB.jsxDEV(rA,{borderStyle:i?"bold":"round",borderColor:i?"cyan":"gray",paddingX:2,children:GB.jsxDEV(a,{bold:i,color:i?"cyan":void 0,dimColor:!i,children:_},void 0,!1,void 0,this)},X,!1,void 0,this)})},void 0,!1,void 0,this),GB.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:J?"\u9009\u62E9":"select"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:J?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),GB.jsxDEV(a,{dimColor:!0,children:J?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var II=fB(tE(),1);function X5({onDone:I}){let[E,g]=aQ.useState("list"),[w,J]=aQ.useState([]),[R,L]=aQ.useState(),[X,z]=aQ.useState({}),[_,i]=aQ.useState(0),[BA,S]=aQ.useState(0),[v,h]=aQ.useState(0),[b,p]=aQ.useState(""),[bA,_A]=aQ.useState(""),[JA,uA]=aQ.useState("tako"),[$A,hA]=aQ.useState(""),[ZA,pA]=aQ.useState(""),[oA,JB]=aQ.useState(""),yA=rC()==="zh",NB=A1(),gB=NB[_],xB=TN[gB?.id]?.color||"white",TA=gB?w.filter((QA)=>E1(QA,gB.id)):[],XA=X[gB?.id]||R,GA=TA.length+3,RA=w.find((QA)=>QA.id===b),WA=RA?[...RA.id!==R?["default"]:[],...RA.builtin?["rekey"]:["delete"],"back"]:["back"],DA=aQ.useCallback(async()=>{let QA=await x1(),wA=await I8();J(QA),L(wA?.id);let NA={};for(let qA of A1()){let _B=await bH(qA.id);NA[qA.id]=_B?.id}z(NA)},[]);aQ.useEffect(()=>{DA()},[DA]),aQ.useEffect(()=>{S(0)},[_]),aQ.useEffect(()=>{if(bA){let QA=setTimeout(()=>_A(""),3000);return()=>clearTimeout(QA)}},[bA]);let DB=aQ.useCallback(async()=>{if(b&&w.find((qA)=>qA.id===b)?.builtin){await p1(b,{apiKey:$A}),_A(yA?"Key \u5DF2\u66F4\u65B0":"Key updated"),await DA(),g("list"),S(0);return}let QA=Q0[JA]?.[yA?"zh":"en"]||JA,wA=ZA||hK(JA),NA=oA||Q1(JA);await vH({name:QA,type:JA,apiKey:$A,baseUrl:wA,model:NA,supportedClients:Kg(JA)}),eE("provider_added",{provider_type:JA,method:"manual"}),dF(),g0(),_A(yA?"\u5DF2\u6DFB\u52A0":"Added"),await DA(),g("list"),S(0)},[JA,$A,ZA,oA,yA,DA,b,w]),aB=aQ.useCallback(async()=>{g("scanning");let QA=await FR(),wA=await GR(QA);if(wA>0)dF(),g0();_A(yA?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${wA} \u4E2A`:`Scan done, ${wA} added`),await DA(),g("list"),S(0)},[DA,yA]),[s,f]=aQ.useState("claude"),c=aQ.useCallback(async(QA)=>{f(QA),g("logging-in");let wA=QA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];if(await Bun.spawn(wA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited,QA==="claude")try{let qA=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),_B=await new Response(qA.stdout).text();await qA.exited;let AB=JSON.parse(_B.trim());if(AB.loggedIn&&AB.authMethod==="claude.ai"){let MB=AB.email||"",CB=AB.subscriptionType||"pro",iA=`Claude ${CB.charAt(0).toUpperCase()+CB.slice(1)}${MB?` (${MB})`:""}`;if(!w.find((vB)=>vB.type==="claude-subscription"&&vB.email===MB))await vH({name:iA,type:"claude-subscription",email:MB,subscriptionType:CB,supportedClients:Kg("claude-subscription")}),_A(yA?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else _A(yA?"\u6B64\u8D26\u53F7\u5DF2\u5B58\u5728":"Already exists")}else _A(yA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{_A(yA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let qA=await import("fs/promises"),{homedir:_B}=await import("os"),{join:AB}=await import("path"),MB=JSON.parse(await qA.readFile(AB(_B(),".codex","auth.json"),"utf-8"));if(MB.auth_mode==="chatgpt"&&MB.tokens?.access_token){let CB="";try{CB=JSON.parse(atob(MB.tokens.id_token.split(".")[1])).email||""}catch{}let iA=w.find((vB)=>vB.type==="codex-subscription"&&vB.email===CB);if(!iA)await vH({name:CB?`Codex Plus (${CB})`:"Codex Subscription",type:"codex-subscription",email:CB||void 0,supportedClients:Kg("codex-subscription"),authData:MB}),_A(yA?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await p1(iA.id,{authData:MB}),_A(yA?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else _A(yA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{_A(yA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await DA(),g("list"),S(0)},[w,yA,DA]);if(nC(aQ.useCallback((QA,wA)=>{if(E==="list"){if(wA.escape||QA==="q"){I();return}if(wA.leftArrow){i((qA)=>qA>0?qA-1:NB.length-1);return}if(wA.rightArrow){i((qA)=>qA<NB.length-1?qA+1:0);return}let NA=parseInt(QA);if(NA>=1&&NA<=NB.length){i(NA-1);return}if(wA.upArrow){S((qA)=>qA>0?qA-1:GA-1);return}if(wA.downArrow){S((qA)=>qA<GA-1?qA+1:0);return}if(wA.return){if(BA<TA.length){let qA=TA[BA];gR(gB.id,qA.id).then(()=>{I()})}else if(BA===TA.length)g("add-type"),S(0);else if(BA===TA.length+1)aB();else I();return}if((QA==="d"||QA==="e")&&BA<TA.length)p(TA[BA].id),g("detail"),h(0);return}if(E==="detail"){if(wA.leftArrow){h((NA)=>NA>0?NA-1:WA.length-1);return}if(wA.rightArrow){h((NA)=>NA<WA.length-1?NA+1:0);return}if(wA.escape){g("list"),S(0);return}if(wA.return){let NA=WA[v];if(NA==="back"){g("list"),S(0);return}if(NA==="default")I5(b).then(()=>{_A(yA?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),DA(),g("list"),S(0)});if(NA==="delete")B5(b).then(()=>{_A(yA?"\u5DF2\u5220\u9664":"Deleted"),DA(),g("list"),S(0)});if(NA==="rekey")uA(RA?.type||"tako"),hA(""),g("add-key"),S(0)}return}if(E==="add-type"){if(wA.upArrow){S((NA)=>NA>0?NA-1:c1.length-1);return}if(wA.downArrow){S((NA)=>NA<c1.length-1?NA+1:0);return}if(wA.escape){g("list"),S(0);return}if(wA.return){let NA=c1[BA];if(uA(NA),NA==="claude-subscription"){c("claude");return}if(NA==="codex-subscription"){c("codex");return}hA(""),pA(""),JB(Q1(NA)||""),g("add-key"),S(0)}return}if(E==="add-key"){if(wA.escape){g("list"),S(0);return}if(wA.return&&$A){if(JA==="custom")g("add-url");else if(JA==="deepseek"||JA==="anthropic")g("add-model"),S(0);else DB();return}if(wA.backspace||wA.delete){hA((NA)=>NA.slice(0,-1));return}if(QA&&!wA.ctrl)hA((NA)=>NA+QA);return}if(E==="add-url"){if(wA.escape){g("list"),S(0);return}if(wA.return){g("add-model"),S(0);return}if(wA.backspace||wA.delete){pA((NA)=>NA.slice(0,-1));return}if(QA&&!wA.ctrl)pA((NA)=>NA+QA);return}if(E==="add-model"){let NA=CM(JA);if(wA.escape){g("list"),S(0);return}if(NA){if(wA.upArrow){S((qA)=>qA>0?qA-1:NA.length-1);return}if(wA.downArrow){S((qA)=>qA<NA.length-1?qA+1:0);return}if(wA.return){JB(NA[BA]),setTimeout(()=>DB(),0);return}}else{if(wA.return){DB();return}if(wA.backspace||wA.delete){JB((qA)=>qA.slice(0,-1));return}if(QA&&!wA.ctrl)JB((qA)=>qA+QA)}return}},[E,BA,v,TA,GA,NB.length,gB,b,RA,WA,JA,$A,ZA,oA,I,aB,c,DB,DA,yA])),E==="scanning"||E==="logging-in"){let QA=E==="logging-in"?i0[s==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},wA=E==="scanning"?yA?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":yA?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return II.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:II.jsxDEV(rA,{borderStyle:"round",borderColor:QA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[II.jsxDEV(a,{color:QA.color,bold:!0,children:[QA.icon," ",wA]},void 0,!0,void 0,this),E==="logging-in"&&II.jsxDEV(a,{dimColor:!0,children:yA?"\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")return II.jsxDEV(L5,{screen:E,addType:JA,addKey:$A,addUrl:ZA,addModel:oA,rowIdx:BA,zh:yA},void 0,!1,void 0,this);if(E==="add-type")return II.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[II.jsxDEV(rA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:II.jsxDEV(a,{bold:!0,children:["\u2795 ",yA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),II.jsxDEV(rA,{flexDirection:"column",marginTop:1,gap:0,children:c1.map((QA,wA)=>{let NA=i0[QA]||i0.custom,qA=BA===wA,_B=yA?Q0[QA]?.zh:Q0[QA]?.en,AB=QA==="claude-subscription"||QA==="codex-subscription";return II.jsxDEV(rA,{borderStyle:qA?"bold":"round",borderColor:qA?NA.color:"gray",paddingX:2,paddingY:0,children:II.jsxDEV(rA,{gap:1,children:[II.jsxDEV(a,{color:NA.color,bold:!0,children:NA.icon},void 0,!1,void 0,this),II.jsxDEV(a,{bold:qA,color:qA?NA.color:void 0,children:_B},void 0,!1,void 0,this),AB&&II.jsxDEV(a,{dimColor:!0,children:["(",yA?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!AB&&II.jsxDEV(a,{dimColor:!0,children:["(",yA?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},QA,!1,void 0,this)})},void 0,!1,void 0,this),II.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[II.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(E==="detail"&&RA)return II.jsxDEV(Z5,{provider:RA,defaultId:R,detailActions:WA,detailIdx:v,zh:yA},void 0,!1,void 0,this);return II.jsxDEV(rA,{flexDirection:"column",paddingX:2,paddingY:1,children:[II.jsxDEV(rA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[II.jsxDEV(a,{bold:!0,children:["\u26A1 ",yA?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),bA&&II.jsxDEV(a,{color:"green",children:[" \u2713 ",bA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),II.jsxDEV(rA,{marginTop:1,gap:1,justifyContent:"center",children:[II.jsxDEV(a,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),NB.map((QA,wA)=>{let NA=TN[QA.id]||{icon:"\u25AA",color:"white"},qA=wA===_;return II.jsxDEV(rA,{borderStyle:qA?"bold":"single",borderColor:qA?NA.color:"gray",paddingX:2,children:II.jsxDEV(a,{color:qA?NA.color:void 0,bold:qA,dimColor:!qA,children:[NA.icon," ",QA.name]},void 0,!0,void 0,this)},QA.id,!1,void 0,this)}),II.jsxDEV(a,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),II.jsxDEV(rA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:xB,paddingX:1,paddingY:1,children:[TA.length===0&&II.jsxDEV(rA,{paddingX:2,paddingY:1,justifyContent:"center",children:II.jsxDEV(a,{dimColor:!0,children:yA?"\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),TA.map((QA,wA)=>II.jsxDEV(Y5,{provider:QA,focused:BA===wA,bound:QA.id===XA,isDefault:QA.id===R,zh:yA},QA.id,!1,void 0,this))]},void 0,!0,void 0,this),II.jsxDEV(rA,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:yA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:yA?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"back",offset:2,icon:"\u2190",label:yA?"\u8FD4\u56DE":"Back"}].map((QA)=>{let wA=BA===TA.length+QA.offset;return II.jsxDEV(rA,{borderStyle:wA?"bold":"round",borderColor:wA?"cyan":"gray",paddingX:2,children:II.jsxDEV(a,{bold:wA,color:wA?"cyan":void 0,dimColor:!wA,children:[QA.icon," ",QA.label]},void 0,!0,void 0,this)},QA.id,!1,void 0,this)})},void 0,!1,void 0,this),II.jsxDEV(rA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[II.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),II.jsxDEV(a,{dimColor:!0,children:yA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var aF=fB(pI(),1);OC();var OD=fB(tE(),1);function W5({onExit:I}){let[E,g]=aF.useState(null),[w,J]=aF.useState(!0),[R,L]=aF.useState(10),X=aF.useCallback(async()=>{J(!0);let _=await U5();if(_.success&&_.data)g(_.data);J(!1)},[]);aF.useEffect(()=>{X()},[X]),aF.useEffect(()=>{let _=setInterval(()=>{L((i)=>{if(i<=1)return X(),10;return i-1})},1000);return()=>clearInterval(_)},[X]),nC((_,i)=>{if(_==="q"||i.escape)I()});let z=rC()==="zh";return OD.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[OD.jsxDEV(a,{bold:!0,children:QI("stats.title")},void 0,!1,void 0,this),w&&!E?OD.jsxDEV(a,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):E?OD.jsxDEV(rA,{flexDirection:"column",marginTop:1,children:[OD.jsxDEV(a,{children:QI("stats.totalRequests",{count:J5(E.totalRequests)})},void 0,!1,void 0,this),OD.jsxDEV(a,{children:QI("stats.totalCost",{cost:E.totalCost})},void 0,!1,void 0,this),OD.jsxDEV(a,{children:QI("stats.todayCost",{cost:E.todayCost})},void 0,!1,void 0,this),E.modelStats.length>0&&OD.jsxDEV(rA,{flexDirection:"column",marginTop:1,children:[OD.jsxDEV(a,{bold:!0,dimColor:!0,children:z?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),E.modelStats.map((_,i)=>OD.jsxDEV(a,{dimColor:!0,children:[i===E.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",_.model.padEnd(25)," ",String(_.requests).padStart(5)," ",_.cost]},_.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):OD.jsxDEV(a,{color:"red",children:z?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),OD.jsxDEV(rA,{marginTop:1,children:OD.jsxDEV(a,{dimColor:!0,children:z?`${R}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${R}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var E8=fB(pI(),1);OC();OC();function tS(I){return I.startsWith("cr_")&&I.length>10}async function eS(I){try{let g=await(await fetch(`${Rg}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:I})})).json();if(g.success&&g.data?.id)return{valid:!0,apiId:g.data.id};return{valid:!1,error:g.error||QI("auth.validationFailed")}}catch(E){return{valid:!1,error:E instanceof Error?E.message:QI("auth.networkError")}}}async function q5(I){if(!tS(I))return eE("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:QI("auth.invalidFormat")};let E=await eS(I);if(!E.valid)return eE("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:E.error};return await t4({apiKey:I,apiId:E.apiId}),await Az(I,E.apiId),eE("api_key_validated",{success:!0}),dF(),g0(),{success:!0}}async function Az(I,E){let w=(await x1()).find((J)=>J.type==="tako");if(w)await p1(w.id,{apiKey:I,apiId:E});else await vH({name:"Tako \u5B98\u65B9",type:"tako",apiKey:I,baseUrl:Rg,apiId:E,supportedClients:Kg("tako"),builtin:!0})}var Xg=fB(tE(),1);function O5({isReconfigure:I,onDone:E}){let[g,w]=E8.useState(""),[J,R]=E8.useState("idle"),[L,X]=E8.useState(""),{stdin:z,setRawMode:_}=_H();E8.useEffect(()=>{if(!z)return;_(!0);let v=(h)=>{let b=h.toString();if(b.length>1&&!b.startsWith("\x1B"))w((p)=>p+b.replace(/[\r\n]/g,""))};return z.on("data",v),()=>{z.off("data",v)}},[z,_]);let i=E8.useCallback(async()=>{if(!g||J==="validating")return;R("validating");let v=await q5(g);if(v.success)R("success"),dF(),g0(),setTimeout(()=>E(!0),500);else R("error"),X(v.error||"Validation failed")},[g,J,E]);nC((v,h)=>{if(h.escape){E(!1);return}if(h.return){i();return}if(h.backspace||h.delete){w((b)=>b.slice(0,-1)),R("idle");return}if(v&&!h.ctrl&&v.length===1)w((b)=>b+v),R("idle")});let BA=g.length<=6?g:`${g.slice(0,3)}${"\u2022".repeat(Math.min(g.length-6,20))}${g.slice(-3)}`,S=rC()==="zh";return Xg.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[Xg.jsxDEV(a,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",I?QI("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),Xg.jsxDEV(rA,{marginTop:1,children:[Xg.jsxDEV(a,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),Xg.jsxDEV(a,{children:BA},void 0,!1,void 0,this),J==="idle"&&Xg.jsxDEV(a,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J==="validating"&&Xg.jsxDEV(a,{color:"yellow",children:["\u23F3 ",QI("prompts.validating")]},void 0,!0,void 0,this),J==="success"&&Xg.jsxDEV(a,{color:"green",children:["\u2713 ",QI("prompts.keyConfigured")]},void 0,!0,void 0,this),J==="error"&&Xg.jsxDEV(a,{color:"red",children:["\u2717 ",L]},void 0,!0,void 0,this),Xg.jsxDEV(rA,{marginTop:1,children:Xg.jsxDEV(a,{dimColor:!0,children:["Enter ",S?"\u63D0\u4EA4":"submit"," Esc ",S?"\u53D6\u6D88":"cancel"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var S5=fB(pI(),1);OC();var iF=fB(tE(),1),l1=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function z5({onDone:I}){let[E,g]=S5.useState(l1.findIndex((w)=>w.value===rC()));return nC((w,J)=>{if(J.upArrow)g((R)=>R>0?R-1:l1.length-1);if(J.downArrow)g((R)=>R<l1.length-1?R+1:0);if(J.return)LN(l1[E].value),I();if(J.escape)I()}),iF.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[iF.jsxDEV(a,{bold:!0,children:["\uD83C\uDF10 ",QI("menu.changeLanguage")]},void 0,!0,void 0,this),l1.map((w,J)=>iF.jsxDEV(rA,{gap:1,marginTop:J===0?1:0,children:[iF.jsxDEV(a,{color:"cyan",bold:J===E,children:J===E?"\u25B8":" "},void 0,!1,void 0,this),iF.jsxDEV(a,{bold:J===E,children:w.label},void 0,!1,void 0,this),w.value===rC()&&iF.jsxDEV(a,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},w.value,!0,void 0,this)),iF.jsxDEV(rA,{marginTop:1,children:iF.jsxDEV(a,{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 MR=fB(pI(),1);import{join as Bz}from"path";OC();var ME=fB(tE(),1),$5=Bz(jC,".key-prompt.json");async function Iz(){try{return await Bun.file($5).json()}catch{return{}}}async function k5(I){await Bun.write($5,JSON.stringify(I))}async function V5(){if(await qK())return!1;let I=await Iz();if(I.never)return!1;let E=new Date().toISOString().slice(0,10);if(I.dismissed===E)return!1;return!0}async function T5(I){if(I==="never")await k5({never:!0});else{let E=new Date().toISOString().slice(0,10);await k5({dismissed:E})}}var JR=[{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 y5({onDone:I}){let[E,g]=MR.useState(0),w=rC()==="zh";return nC(MR.useCallback((J,R)=>{if(R.upArrow){g((L)=>L>0?L-1:JR.length-1);return}if(R.downArrow){g((L)=>L<JR.length-1?L+1:0);return}if(R.escape){I("skip");return}if(R.return){I(JR[E].id);return}},[E,I])),ME.jsxDEV(rA,{flexDirection:"column",paddingX:0,paddingY:1,children:[ME.jsxDEV(rA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[ME.jsxDEV(rA,{gap:1,children:[ME.jsxDEV(a,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),ME.jsxDEV(a,{bold:!0,children:w?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),ME.jsxDEV(rA,{marginTop:1,flexDirection:"column",children:[ME.jsxDEV(a,{dimColor:!0,children:w?"\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),ME.jsxDEV(a,{dimColor:!0,children:w?"\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),ME.jsxDEV(rA,{marginTop:1,flexDirection:"column",children:JR.map((J,R)=>{let L=R===E;return ME.jsxDEV(rA,{paddingLeft:1,gap:1,children:[ME.jsxDEV(a,{color:L?J.color||"white":void 0,bold:L,children:L?"\u25B8":" "},void 0,!1,void 0,this),ME.jsxDEV(a,{bold:L,color:L?J.color||"white":void 0,children:w?J.label.zh:J.label.en},void 0,!1,void 0,this),L&&ME.jsxDEV(a,{dimColor:!0,children:w?J.hint.zh:J.hint.en},void 0,!1,void 0,this)]},J.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),ME.jsxDEV(rA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[ME.jsxDEV(a,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:w?"\u9009\u62E9":"select"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:w?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),ME.jsxDEV(a,{dimColor:!0,children:w?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var F0=fB(tE(),1);function Qz({onLaunch:I,onExit:E,initialView:g="launcher"}){let[w,J]=Wg.useState(g),[R,L]=Wg.useState([]),X=Wg.useRef(null),z=Wg.useRef(!1);Wg.useEffect(()=>{if(z.current||g!=="launcher")return;z.current=!0,V5().then((h)=>{if(h)J("key-guide")})},[g]);let _=Wg.useCallback((h)=>{if(L((b)=>[...b.slice(-4),h]),X.current)clearTimeout(X.current);X.current=setTimeout(()=>L([]),5000)},[]);Wg.useEffect(()=>{return bK({info:(h)=>_({text:h,type:"info"}),warn:(h)=>_({text:h,type:"warn"}),error:(h)=>_({text:h,type:"error"}),success:(h)=>_({text:h,type:"success"}),spin:(h)=>{return _({text:h,type:"spin"}),{stop:(b)=>{if(b)_({text:b,type:"success"})}}}}),()=>DM()},[_]);let i=Wg.useCallback(()=>J("launcher"),[]),BA={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},S={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},v=(()=>{switch(w){case"launcher":return F0.jsxDEV(K5,{onResult:(h)=>{switch(h.type){case"launch":I(h);break;case"providers":J("providers");break;case"stats":J("stats");break;case"config":J("config");break;case"language":J("language");break;case"exit":E();break}}},void 0,!1,void 0,this);case"providers":return F0.jsxDEV(X5,{onDone:i},void 0,!1,void 0,this);case"stats":return F0.jsxDEV(W5,{onExit:i},void 0,!1,void 0,this);case"config":return F0.jsxDEV(O5,{isReconfigure:!0,onDone:i},void 0,!1,void 0,this);case"language":return F0.jsxDEV(z5,{onDone:i},void 0,!1,void 0,this);case"key-guide":return F0.jsxDEV(y5,{onDone:(h)=>{if(h==="configure")J("config");else T5(h).then(()=>J("launcher"))}},void 0,!1,void 0,this)}})();return F0.jsxDEV(rA,{flexDirection:"column",children:[R.length>0&&F0.jsxDEV(rA,{flexDirection:"column",paddingX:2,children:R.map((h,b)=>F0.jsxDEV(a,{color:BA[h.type],dimColor:h.type==="info",children:[S[h.type]," ",h.text]},b,!0,void 0,this))},void 0,!1,void 0,this),v]},void 0,!0,void 0,this)}function yN(){return new Promise((I)=>{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 w(R){E?.clear(),E?.unmount(),E=null,g(),DM(),I(R)}function J(){E?.clear(),E?.unmount(),E=null,g(),DM(),I(null)}E=v1(F0.jsxDEV(Qz,{onLaunch:w,onExit:J},void 0,!1,void 0,this))})}async function u5(){await Q5(),await E5(),await H5();while(!0){let I=await yN();if(!I)break;let E=AM(I.clientId);if(!E)continue;eE("menu_action",{action:"launch",client_id:I.clientId});let g=await HR(I.clientId);if(!g){WI.warn(QI("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let w=await wR(E,{projectPath:I.projectPath,args:I.args,selectedOptionIds:I.selectedOptionIds,providerContext:g});if(!w.success)WI.error(w.error||QI("cli.launchFailed"))}}OC();import{join as o0}from"path";var uN="tako-cli",d1="0.2.39";function Ez(I,E){let g=I.split(".").map(Number),w=E.split(".").map(Number);for(let J=0;J<3;J++){let R=g[J]||0,L=w[J]||0;if(R>L)return 1;if(R<L)return-1}return 0}async function Cz(){try{let I=await lF(),E=await fetch(`${I}/${uN}/latest`,{signal:AbortSignal.timeout(5000)});if(!E.ok)return null;return(await E.json()).version||null}catch{return null}}async function Dz(){let I=await Cz();if(!I)return{hasUpdate:!1,currentVersion:d1};return{hasUpdate:Ez(I,d1)>0,latestVersion:I,currentVersion:d1}}async function _5(){let I=await import("fs/promises"),E=o0(jC,"bin"),g=o0(E,"tako"),w=o0(p0,"node_modules/tako-cli/dist/index.js");if(await I.mkdir(E,{recursive:!0}),process.platform==="win32"){let R=`@echo off\r
614
614
  "${qD}" "${w}" %*\r
615
615
  `;await I.writeFile(o0(E,"tako.cmd"),R)}else{let R=`#!/bin/bash
616
616
  exec "${qD}" "${w}" "$@"
617
617
  `;await I.writeFile(g,R,{mode:493})}}async function gz(I){let E=RH();E.start(`\u6B63\u5728\u66F4\u65B0\u5230 v${I}...`);try{let g=await lF(),w=await import("fs/promises");await w.mkdir(p0,{recursive:!0});let J=o0(p0,"package.json");try{await w.access(J)}catch{await w.writeFile(J,JSON.stringify({name:"tako-local",private:!0},null,2))}let R=Bun.spawn([qD,"update",uN,"--latest"],{cwd:p0,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:g}});if(await R.exited,R.exitCode===0)return await _5(),eE("cli_updated",{from_version:d1,to_version:I}),E.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${I}`),!0;else{let L=await new Response(R.stderr).text();return E.stop(`\u66F4\u65B0\u5931\u8D25: ${L||"\u672A\u77E5\u9519\u8BEF"}`),!1}}catch(g){return E.stop(`\u66F4\u65B0\u5931\u8D25: ${g instanceof Error?g.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function Fz(){let I=await import("fs/promises"),E=o0(p0,"bun.lock");try{await I.unlink(E)}catch{}}async function Gz(){let I=await import("fs/promises");try{let E=await lF();await I.mkdir(p0,{recursive:!0});let g=o0(p0,"package.json");try{await I.access(g)}catch{await I.writeFile(g,JSON.stringify({name:"tako-local",private:!0},null,2))}await Fz();let w=Bun.spawn([qD,"add",`${uN}@latest`],{cwd:p0,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:E}});return await w.exited,w.exitCode===0}catch{return!1}}async function wz(){let I=await import("fs/promises"),E=o0(jC,"bin"),g=o0(E,"tako"),w=o0(p0,"node_modules/tako-cli/dist/index.js");try{let J=await I.readFile(g,"utf-8");if(J.includes("bun run tako-cli")||J.includes("run tako-cli")){WI.info(QI("updater.migrating"));let R=!1;try{await I.access(w),R=!0}catch{R=!1}if(!R){let L=RH();if(L.start(QI("updater.installingLocally")),!await Gz())return L.stop(QI("updater.migrationFailed")),!1;L.stop(QI("updater.installComplete"))}return await _5(),!0}}catch{}return!1}async function a1(){try{if(await wz())WI.info(QI("updater.migrationComplete")),process.exit(0);let E=await Dz();if(E.hasUpdate&&E.latestVersion){if(WI.warn(QI("updater.newVersionAvailable",{version:E.latestVersion,current:d1})),await gz(E.latestVersion))WI.info(QI("updater.pleaseRestart")),process.exit(0)}}catch{}}OC();import{homedir as Uz}from"os";var LQ={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 SE={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var RE={directory:{icon:LQ.brightYellow,text:LQ.brightGreen},git:{icon:LQ.brightBlue,text:LQ.brightBlue,clean:LQ.brightGreen,dirty:LQ.brightYellow,conflict:LQ.brightRed},model:{icon:LQ.brightCyan,text:LQ.brightCyan},version:{icon:LQ.brightWhite,text:LQ.brightBlack},outputStyle:{icon:LQ.brightMagenta,text:LQ.brightMagenta},context:{icon:LQ.brightMagenta,low:LQ.brightGreen,medium:LQ.brightYellow,high:LQ.brightRed},todayUsage:{icon:LQ.brightGreen,text:LQ.brightGreen},separator:LQ.brightBlack},oF={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 Hz(){return!1}function G0(I){let E=oF[I];if(typeof E==="string")return E;return Hz()?E.nerd:E.plain}class RR{id="directory";render(I){let E=this.formatPath(I.workspace.current_dir),g=G0("directory");return`${RE.directory.icon}${g}${SE.reset} ${RE.directory.text}${E}${SE.reset}`}formatPath(I){let E=Uz();if(I===E)return"~";if(I.startsWith(E+"/"))return"~"+I.slice(E.length);return I}}class NR{id="git";async render(I){let E=I.workspace.current_dir;if(!await this.isGitRepository(E))return null;let w=await this.getBranch(E);if(!w)return null;let{status:J,statusColor:R}=await this.getStatus(E),{ahead:L,behind:X}=await this.getAheadBehind(E),z=G0("git"),_=`${RE.git.icon}${z}${SE.reset} ${RE.git.text}${w}${SE.reset}`;if(_+=` ${R}${J}${SE.reset}`,L>0)_+=` ${RE.git.clean}${oF.gitAhead}${L}${SE.reset}`;if(X>0)_+=` ${RE.git.dirty}${oF.gitBehind}${X}${SE.reset}`;return _}async isGitRepository(I){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:I,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(I){try{let E=Bun.spawn(["git","branch","--show-current"],{cwd:I,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited===0&&g.trim())return g.trim();let J=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:I,stdout:"pipe",stderr:"pipe"}),R=await new Response(J.stdout).text();if(await J.exited===0&&R.trim())return`detached:${R.trim()}`;return null}catch{return null}}async getStatus(I){try{let E=Bun.spawn(["git","status","--porcelain"],{cwd:I,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited!==0)return{status:oF.gitClean,statusColor:RE.git.clean};let J=g.trim();if(!J)return{status:oF.gitClean,statusColor:RE.git.clean};if(J.includes("UU")||J.includes("AA")||J.includes("DD"))return{status:oF.gitConflict,statusColor:RE.git.conflict};return{status:oF.gitDirty,statusColor:RE.git.dirty}}catch{return{status:oF.gitClean,statusColor:RE.git.clean}}}async getAheadBehind(I){try{let E=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:I,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text(),J=await E.exited===0?parseInt(g.trim(),10)||0:0,R=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:I,stdout:"pipe",stderr:"pipe"}),L=await new Response(R.stdout).text(),z=await R.exited===0?parseInt(L.trim(),10)||0:0;return{ahead:J,behind:z}}catch{return{ahead:0,behind:0}}}}var Jz={"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 KR{id="model";render(I){let E=I.model.id,g=Jz[E]||this.simplifyModelName(I.model.display_name),w=G0("model");return`${RE.model.icon}${w}${SE.reset} ${RE.model.text}${g}${SE.reset}`}simplifyModelName(I){let E=I.replace(/^Claude\s+/i,"");return E=E.replace(/-\d{8}$/,""),E}}var Mz={"claude-opus-4-5-20251101":200000,"claude-opus-4-5":200000,"claude-opus-4-6-20260415":1e6,"claude-opus-4-6":1e6,"claude-sonnet-4-5-20250514":200000,"claude-sonnet-4-5":200000,"claude-sonnet-4-6-20260415":200000,"claude-sonnet-4-6":200000,"claude-sonnet-4-20250514":200000,"claude-sonnet-4":200000,"claude-sonnet-3-5-20241022":200000,"claude-3-5-sonnet-20241022":200000,"claude-3-5-sonnet":200000,"claude-haiku-3-5-20241022":200000,"claude-3-5-haiku-20241022":200000,"claude-3-5-haiku":200000,"claude-haiku-4-5-20251001":200000,"claude-haiku-4-5":200000},Rz=200000;class s0{id="context";static cache=null;static CACHE_TTL=5000;async render(I){let E=await this.getTokensWithCache(I.transcript_path),g=Mz[I.model.id]||Rz,w=Math.round((E??0)/g*100),J=Math.max(0,100-w),R=G0("context"),L=J<=20?LQ.brightRed:J<=50?LQ.brightYellow:LQ.brightGreen;return`${RE.context.icon}${R}${SE.reset} ${L}${J}%${SE.reset}`}async getTokensWithCache(I){let E=Date.now();if(s0.cache&&s0.cache.path===I&&E-s0.cache.timestamp<s0.CACHE_TTL)return s0.cache.tokens;let g=await this.parseTranscriptTokens(I);return s0.cache={path:I,tokens:g,timestamp:E},g}async parseTranscriptTokens(I){try{let E=Bun.file(I);if(!await E.exists())return null;let g=await E.text();if(!g.trim())return null;let w=g.split(`
618
- `).filter((J)=>J.trim());for(let J=w.length-1;J>=0;J--)try{let R=JSON.parse(w[J]);if(R.type==="assistant"&&R.message?.usage){let L=R.message.usage;return(L.input_tokens||0)+(L.output_tokens||0)+(L.cache_creation_input_tokens||0)+(L.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}class sF{id="quota";static cache=null;static CACHE_TTL=30000;async render(I){if(await eU().catch(()=>""))return this.renderTakoQuota();return this.renderSessionCost(I)}async renderTakoQuota(){if(sF.cache&&Date.now()-sF.cache.timestamp<sF.CACHE_TTL)return sF.cache.data;let I=await this.fetchTakoQuota();return sF.cache={data:I,timestamp:Date.now()},I}async fetchTakoQuota(){try{let I=await UR();if(!I.success||!I.data)return null;let{data:E}=I,g,w,J;if(E.windowCostLimit>0)g=`${Math.round(E.windowMinutes/60)}h`,w=E.windowCost,J=E.windowCostLimit;else if(E.dailyCostLimit>0)g="Day",w=E.dailyCost,J=E.dailyCostLimit;else if(E.weeklyCostLimit>0)g="Week",w=E.weeklyCost,J=E.weeklyCostLimit;else return null;let R=Math.max(0,J-w),L=J>0?R/J:0,X=L<=0.1?LQ.brightRed:L<=0.3?LQ.brightYellow:LQ.brightGreen,z=G0("todayUsage");return`${RE.todayUsage.icon}${z}${SE.reset} ${X}${g}:${this.fmtCost(R)}/${this.fmtCost(J)}${SE.reset}`}catch{return null}}renderSessionCost(I){let E=I.cost?.total_cost_usd;if(E==null||E<=0)return null;let g=G0("todayUsage");return`${RE.todayUsage.icon}${g}${SE.reset} ${LQ.brightGreen}Session:${this.fmtCost(E)}${SE.reset}`}fmtCost(I){if(I>=100)return`$${Math.round(I)}`;if(I>=10)return`$${I.toFixed(1)}`;return`$${I.toFixed(2)}`}}class _N{separator=`${RE.separator} \u2502 ${SE.reset}`;render(I){let E=["directory","git","model","context","quota"],g=[];for(let w of E){let J=I.get(w);if(J)g.push(J)}return g.join(this.separator)}}import{join as KG,dirname as Nz}from"path";import{homedir as PN}from"os";import{mkdir as Kz}from"fs/promises";var P5=KG(PN(),".tako"),Yz=KG(P5,"cli"),Lz=KG(P5,"bin",process.platform==="win32"?"tako.cmd":"tako");function Zz(){if(process.platform==="win32")return KG(process.env.APPDATA||KG(PN(),"AppData","Roaming"),"claude","settings.json");return KG(PN(),".claude","settings.json")}var Xz=process.platform==="win32",Wz="0.1.48";function qz(I,E){let g=I.split(".").map(Number),w=E.split(".").map(Number),J=Math.max(g.length,w.length);for(let R=0;R<J;R++){let L=g[R]||0,X=w[R]||0;if(L!==X)return L-X}return 0}async function Oz(){let I=KG(Yz,"node_modules","tako-cli","package.json");try{let E=Bun.file(I);if(!await E.exists())return null;return(await E.json()).version||null}catch{return null}}async function Sz(){let I=await Oz();if(!I)return!1;return qz(I,Wz)>=0}function zz(){return Lz}function kz(){return`"${$z(zz())}" statusline`}function $z(I){if(Xz)return I.replace(/\\/g,"/");return I}async function jN(){if(!await Sz())return;let E=Zz(),g={};try{let R=Bun.file(E);if(await R.exists())g=await R.json()}catch{}let w={type:"command",command:kz(),padding:0},J=typeof g.statusLine==="object"&&g.statusLine!==null?g.statusLine.command:null;if(typeof J==="string"&&J.includes("tako statusline"))return;g.statusLine=w,await Kz(Nz(E),{recursive:!0}),await Bun.write(E,JSON.stringify(g,null,2))}var Vz=[new RR,new NR,new KR,new s0,new sF];async function Tz(I){let E=await Promise.all(Vz.map(async(J)=>{try{let R=await J.render(I);return{id:J.id,content:R}}catch{return{id:J.id,content:null}}})),g=new Map;for(let{id:J,content:R}of E)g.set(J,R);return new _N().render(g)}async function j5(){try{let I=await Bun.stdin.json(),E=await Tz(I);console.log(E)}catch{process.exit(0)}}var fN="0.2.38";function yz(){console.log(`
618
+ `).filter((J)=>J.trim());for(let J=w.length-1;J>=0;J--)try{let R=JSON.parse(w[J]);if(R.type==="assistant"&&R.message?.usage){let L=R.message.usage;return(L.input_tokens||0)+(L.output_tokens||0)+(L.cache_creation_input_tokens||0)+(L.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}class sF{id="quota";static cache=null;static CACHE_TTL=30000;async render(I){if(await eU().catch(()=>""))return this.renderTakoQuota();return this.renderSessionCost(I)}async renderTakoQuota(){if(sF.cache&&Date.now()-sF.cache.timestamp<sF.CACHE_TTL)return sF.cache.data;let I=await this.fetchTakoQuota();return sF.cache={data:I,timestamp:Date.now()},I}async fetchTakoQuota(){try{let I=await UR();if(!I.success||!I.data)return null;let{data:E}=I,g,w,J;if(E.windowCostLimit>0)g=`${Math.round(E.windowMinutes/60)}h`,w=E.windowCost,J=E.windowCostLimit;else if(E.dailyCostLimit>0)g="Day",w=E.dailyCost,J=E.dailyCostLimit;else if(E.weeklyCostLimit>0)g="Week",w=E.weeklyCost,J=E.weeklyCostLimit;else return null;let R=Math.max(0,J-w),L=J>0?R/J:0,X=L<=0.1?LQ.brightRed:L<=0.3?LQ.brightYellow:LQ.brightGreen,z=G0("todayUsage");return`${RE.todayUsage.icon}${z}${SE.reset} ${X}${g}:${this.fmtCost(R)}/${this.fmtCost(J)}${SE.reset}`}catch{return null}}renderSessionCost(I){let E=I.cost?.total_cost_usd;if(E==null||E<=0)return null;let g=G0("todayUsage");return`${RE.todayUsage.icon}${g}${SE.reset} ${LQ.brightGreen}Session:${this.fmtCost(E)}${SE.reset}`}fmtCost(I){if(I>=100)return`$${Math.round(I)}`;if(I>=10)return`$${I.toFixed(1)}`;return`$${I.toFixed(2)}`}}class _N{separator=`${RE.separator} \u2502 ${SE.reset}`;render(I){let E=["directory","git","model","context","quota"],g=[];for(let w of E){let J=I.get(w);if(J)g.push(J)}return g.join(this.separator)}}import{join as KG,dirname as Nz}from"path";import{homedir as PN}from"os";import{mkdir as Kz}from"fs/promises";var P5=KG(PN(),".tako"),Yz=KG(P5,"cli"),Lz=KG(P5,"bin",process.platform==="win32"?"tako.cmd":"tako");function Zz(){if(process.platform==="win32")return KG(process.env.APPDATA||KG(PN(),"AppData","Roaming"),"claude","settings.json");return KG(PN(),".claude","settings.json")}var Xz=process.platform==="win32",Wz="0.1.48";function qz(I,E){let g=I.split(".").map(Number),w=E.split(".").map(Number),J=Math.max(g.length,w.length);for(let R=0;R<J;R++){let L=g[R]||0,X=w[R]||0;if(L!==X)return L-X}return 0}async function Oz(){let I=KG(Yz,"node_modules","tako-cli","package.json");try{let E=Bun.file(I);if(!await E.exists())return null;return(await E.json()).version||null}catch{return null}}async function Sz(){let I=await Oz();if(!I)return!1;return qz(I,Wz)>=0}function zz(){return Lz}function kz(){return`"${$z(zz())}" statusline`}function $z(I){if(Xz)return I.replace(/\\/g,"/");return I}async function jN(){if(!await Sz())return;let E=Zz(),g={};try{let R=Bun.file(E);if(await R.exists())g=await R.json()}catch{}let w={type:"command",command:kz(),padding:0},J=typeof g.statusLine==="object"&&g.statusLine!==null?g.statusLine.command:null;if(typeof J==="string"&&J.includes("tako statusline"))return;g.statusLine=w,await Kz(Nz(E),{recursive:!0}),await Bun.write(E,JSON.stringify(g,null,2))}var Vz=[new RR,new NR,new KR,new s0,new sF];async function Tz(I){let E=await Promise.all(Vz.map(async(J)=>{try{let R=await J.render(I);return{id:J.id,content:R}}catch{return{id:J.id,content:null}}})),g=new Map;for(let{id:J,content:R}of E)g.set(J,R);return new _N().render(g)}async function j5(){try{let I=await Bun.stdin.json(),E=await Tz(I);console.log(E)}catch{process.exit(0)}}var fN="0.2.39";function yz(){console.log(`
619
619
  ${QI("cli.version",{version:fN})}
620
620
 
621
621
  ${QI("cli.usage")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tako-cli",
3
- "version": "0.2.38",
3
+ "version": "0.2.39",
4
4
  "description": "Tako CLI - AI coding tools launcher",
5
5
  "type": "module",
6
6
  "bin": {