tako-cli 0.2.59 → 0.2.61
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.
- package/dist/index.js +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -619,15 +619,15 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
619
619
|
`)}patchConsole(){if(this.options.debug)return;this.restoreConsole=e7((Q,E)=>{if(Q==="stdout")this.writeToStdout(E);if(Q==="stderr"){if(!E.startsWith("The above error occurred"))this.writeToStderr(E)}})}initKittyKeyboard(){if(!this.options.kittyKeyboard)return;let Q=this.options.kittyKeyboard,E=Q.mode??"auto";if(E==="disabled"||!this.options.stdin.isTTY||!this.options.stdout.isTTY)return;let g=Q.flags??["disambiguateEscapeCodes"];if(E==="enabled"){this.enableKittyProtocol(g);return}let F=A4.env.TERM??"",N=A4.env.TERM_PROGRAM??"",J="KITTY_WINDOW_ID"in A4.env||F==="xterm-kitty"||N==="WezTerm"||N==="ghostty";if(!tD&&J)this.confirmKittySupport(g)}confirmKittySupport(Q){let{stdin:E,stdout:g}=this.options,F=[],N=()=>{this.cancelKittyDetection=void 0,clearTimeout(R),E.removeListener("data",J);let Y=Vz(F);if(F=[],Y.length>0)E.unshift(Buffer.from(Y))},J=(Y)=>{let O=typeof Y==="string"?Buffer.from(Y):Y;for(let k of O)F.push(k);if(yz(F)){if(N(),!this.isUnmounted)this.enableKittyProtocol(Q)}};E.on("data",J);let R=setTimeout(N,200);this.cancelKittyDetection=N,g.write("\x1B[?u")}enableKittyProtocol(Q){this.options.stdout.write(`\x1B[>${MK(Q)}u`),this.kittyProtocolEnabled=!0}}var Pz=(Q,E)=>{let g={stdout:X9.stdout,stdin:X9.stdin,stderr:X9.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,maxFps:30,incrementalRendering:!1,concurrent:!1,...mz(E)},F=vz(g.stdout,()=>new Z9(g),g.concurrent??!1);return F.render(Q),{rerender:F.render,unmount(){F.unmount()},waitUntilExit:F.waitUntilExit,cleanup:()=>ew.delete(g.stdout),clear:F.clear}},k1=Pz,mz=(Q={})=>{if(Q instanceof Tz)return{stdout:Q,stdin:X9.stdin};return Q},vz=(Q,E,g)=>{let F=ew.get(Q);if(!F)F=E(),ew.set(Q,F);else if(F.isConcurrent!==g)console.warn(`Warning: render() was called with concurrent: ${g}, but the existing instance for this stdout uses concurrent: ${F.isConcurrent}. The concurrent option only takes effect on the first render. Call unmount() first if you need to change the rendering mode.`);return F};var _z=SB(_5(),1);var u9=SB(pQ(),1);var KK=SB(pQ(),1);var jz=SB(pQ(),1);var hz=SB(pQ(),1);var eJ=SB(pQ(),1);import{Buffer as bz}from"buffer";var fz=/^(?:\x1b)([a-zA-Z0-9])$/,xz=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,ZK={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"},XK=[...Object.values(ZK),"backspace"],pz=(Q)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(Q)},dz=(Q)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(Q)},uK=/^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/,iz=/^\x1b\[(\d+);(\d+):(\d+)([A-Za-z~])$/,cz={A:"up",B:"down",C:"right",D:"left",E:"clear",F:"end",H:"home",P:"f1",Q:"f2",R:"f3",S:"f4"},lz={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"},YK={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"},qK=(Q)=>Q>=0&&Q<=1114111&&!(Q>=55296&&Q<=57343),tJ=(Q)=>qK(Q)?String.fromCodePoint(Q):"?";function OK(Q){if(Q===3)return"release";if(Q===2)return"repeat";return"press"}function zK(Q){return{ctrl:!!(Q&B2.ctrl),shift:!!(Q&B2.shift),meta:!!(Q&B2.meta),option:!!(Q&B2.alt),super:!!(Q&B2.super),hyper:!!(Q&B2.hyper),capsLock:!!(Q&B2.capsLock),numLock:!!(Q&B2.numLock)}}var az=(Q)=>{let E=uK.exec(Q);if(!E)return null;let g=parseInt(E[1],10),F=E[2]?Math.max(0,parseInt(E[2],10)-1):0,N=E[3]?parseInt(E[3],10):1,J=E[4];if(!qK(g))return null;let R;if(J)R=J.split(":").map((k)=>tJ(parseInt(k,10))).join("");let Y,O;if(g===32)Y="space",O=!0;else if(g===13)Y="return",O=!0;else if(YK[g])Y=YK[g],O=!1;else if(g>=1&&g<=26)Y=String.fromCodePoint(g+96),O=!1;else Y=tJ(g).toLowerCase(),O=!0;if(O&&!R)R=tJ(g);return{name:Y,...zK(F),eventType:OK(N),sequence:Q,raw:Q,isKittyProtocol:!0,isPrintable:O,text:R}},oz=(Q)=>{let E=iz.exec(Q);if(!E)return null;let g=parseInt(E[1],10),F=Math.max(0,parseInt(E[2],10)-1),N=parseInt(E[3],10),J=E[4],R=J==="~"?lz[g]:cz[J];if(!R)return null;return{name:R,...zK(F),eventType:OK(N),sequence:Q,raw:Q,isKittyProtocol:!0,isPrintable:!1}},nz=(Q="")=>{let E;if(bz.isBuffer(Q))if(Q[0]>127&&Q[1]===void 0)Q[0]-=128,Q="\x1B"+String(Q);else Q=String(Q);else if(Q!==void 0&&typeof Q!=="string")Q=String(Q);else if(!Q)Q="";let g=az(Q);if(g)return g;let F=oz(Q);if(F)return F;if(uK.test(Q))return{name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:Q,raw:Q,isKittyProtocol:!0,isPrintable:!1};let N={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:Q,raw:Q};if(N.sequence=N.sequence||Q||N.name,Q==="\r"||Q==="\x1B\r")N.raw=void 0,N.name="return",N.option=Q.length===2;else if(Q===`
|
|
620
620
|
`)N.name="enter";else if(Q==="\t")N.name="tab";else if(Q==="\b"||Q==="\x1B\b")N.name="backspace",N.meta=Q.charAt(0)==="\x1B";else if(Q==="\x7F"||Q==="\x1B\x7F")N.name="delete",N.meta=Q.charAt(0)==="\x1B";else if(Q==="\x1B"||Q==="\x1B\x1B")N.name="escape",N.meta=Q.length===2;else if(Q===" "||Q==="\x1B ")N.name="space",N.meta=Q.length===2;else if(Q.length===1&&Q<="\x1A")N.name=String.fromCharCode(Q.charCodeAt(0)+97-1),N.ctrl=!0;else if(Q.length===1&&Q>="0"&&Q<="9")N.name="number";else if(Q.length===1&&Q>="a"&&Q<="z")N.name=Q;else if(Q.length===1&&Q>="A"&&Q<="Z")N.name=Q.toLowerCase(),N.shift=!0;else if(E=fz.exec(Q))N.meta=!0,N.shift=/^[A-Z]$/.test(E[1]);else if(E=xz.exec(Q)){let J=[...Q];if(J[0]==="\x1B"&&J[1]==="\x1B")N.option=!0;let R=[E[1],E[2],E[4],E[6]].filter(Boolean).join(""),Y=(E[3]||E[5]||1)-1;N.ctrl=!!(Y&4),N.meta=!!(Y&10),N.shift=!!(Y&1),N.code=R,N.name=ZK[R],N.shift=pz(R)||N.shift,N.ctrl=dz(R)||N.ctrl}return N},SK=nz;var kK=SB(pQ(),1);var sz=()=>kK.useContext(H9),B4=sz;var rz=(Q,E={})=>{let{stdin:g,setRawMode:F,internal_exitOnCtrlC:N,internal_eventEmitter:J}=B4();eJ.useEffect(()=>{if(E.isActive===!1)return;return F(!0),()=>{F(!1)}},[E.isActive,F]),eJ.useEffect(()=>{if(E.isActive===!1)return;let R=(Y)=>{let O=SK(Y),k={upArrow:O.name==="up",downArrow:O.name==="down",leftArrow:O.name==="left",rightArrow:O.name==="right",pageDown:O.name==="pagedown",pageUp:O.name==="pageup",home:O.name==="home",end:O.name==="end",return:O.name==="return",escape:O.name==="escape",ctrl:O.ctrl,shift:O.shift,tab:O.name==="tab",backspace:O.name==="backspace",delete:O.name==="delete",meta:O.meta||O.name==="escape"||O.option,super:O.super??!1,hyper:O.hyper??!1,capsLock:O.capsLock??!1,numLock:O.numLock??!1,eventType:O.eventType},i;if(O.isKittyProtocol)if(O.isPrintable)i=O.text??O.name;else if(O.ctrl&&O.name.length===1)i=O.name;else i="";else if(O.ctrl)i=O.name;else i=O.sequence;if(!O.isKittyProtocol&&XK.includes(O.name))i="";if(i.startsWith("\x1B"))i=i.slice(1);if(i.length===1&&typeof i[0]==="string"&&/[A-Z]/.test(i[0]))k.shift=!0;if(!(i==="c"&&k.ctrl)||!N)zg.batchedUpdates(()=>{Q(i,k)})};return J?.on("input",R),()=>{J?.removeListener("input",R)}},[E.isActive,g,N,Q])},I0=rz;var tz=SB(pQ(),1);var $K=SB(pQ(),1);var ez=()=>$K.useContext(U9),AM=ez;var AS=SB(pQ(),1);var BM=SB(pQ(),1);var BS=SB(pQ(),1);var QS=SB(pQ(),1);var q9=SB(pQ(),1);var eC=SB(sI(),1);function ES({message:Q,defaultValue:E,onResult:g}){let[F,N]=yK.useState(E);return I0((J,R)=>{if(R.leftArrow||R.rightArrow||J==="h"||J==="l"){N((Y)=>!Y);return}if(J==="y"||J==="Y"){g(!0);return}if(J==="n"||J==="N"){g(!1);return}if(R.return){g(F);return}if(R.escape){g(!1);return}}),eC.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[eC.jsxDEV(PA,{gap:1,children:[eC.jsxDEV(f,{color:"yellow",bold:!0,children:"?"},void 0,!1,void 0,this),eC.jsxDEV(f,{bold:!0,children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this),eC.jsxDEV(PA,{marginTop:1,gap:3,children:[eC.jsxDEV(PA,{gap:1,children:eC.jsxDEV(f,{color:F?"green":void 0,bold:F,inverse:F,children:F?" Yes ":" Yes "},void 0,!1,void 0,this)},void 0,!1,void 0,this),eC.jsxDEV(PA,{gap:1,children:eC.jsxDEV(f,{color:!F?"red":void 0,bold:!F,inverse:!F,children:!F?" No ":" No "},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),eC.jsxDEV(PA,{marginTop:1,children:eC.jsxDEV(f,{dimColor:!0,children:"\u2190\u2192 \u5207\u6362 y/n \u5FEB\u6377\u9009\u62E9 Enter \u786E\u8BA4 Esc \u53D6\u6D88"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function O9(Q){return new Promise((E)=>{let g=null;g=k1(eC.jsxDEV(ES,{message:Q.message,defaultValue:Q.defaultValue??!0,onResult:(F)=>{g?.clear(),g?.unmount(),g=null,E(F)}},void 0,!1,void 0,this))})}K0();var bK=ZS(YS(),".claude","settings.json"),XS=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];function uS(Q){if(Q.startsWith("ANTHROPIC_"))return!0;return XS.includes(Q)}async function qS(){let Q=await import("fs/promises"),E;try{E=await Q.readFile(bK,"utf-8")}catch{return}let g;try{g=JSON.parse(E)}catch{return}let F=[];if(g.env&&typeof g.env==="object"){for(let J of Object.keys(g.env))if(uS(J))F.push(J),delete g.env[J];if(Object.keys(g.env).length===0)delete g.env}if(F.length===0)return;if(RQ.warn(tB("claudeCode.settingsDetected",{fields:F.join(", ")})),!await O9({message:tB("claudeCode.confirmClean"),defaultValue:!0})){RQ.info(tB("claudeCode.cleanSkipped"));return}await Q.writeFile(bK,JSON.stringify(g,null,2)+`
|
|
621
621
|
`),RQ.success(tB("claudeCode.settingsCleaned"))}async function OS(Q){let{readClaudeAuth:E,writeClaudeAuth:g}=await Promise.resolve().then(() => (k9(),S9)),{getProviders:F,updateProvider:N}=await Promise.resolve().then(() => (Q2(),hK)),J=Q.authData?.credentials,R=Q.authData?.oauthAccount;if(!J){RQ.warn(tB("claudeCode.subscriptionMissingAuth"));return}let Y=await E(),O=Y.oauthAccount?.emailAddress;if(O&&Y.credentials){let n=(await F()).find((z)=>z.type==="claude-subscription"&&z.email===O);if(n){let z={credentials:Y.credentials,oauthAccount:Y.oauthAccount};if(JSON.stringify(n.authData)!==JSON.stringify(z))await N(n.id,{authData:z})}else if(O!==R?.emailAddress)RQ.warn(tB("claudeCode.unknownCurrentAccount",{email:O}))}await g({credentials:J,oauthAccount:R});let k=R?.emailAddress||"?";RQ.info(tB("claudeCode.subscriptionSwitched",{email:k}))}var zS={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(Q){let E={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"},g=Q.model?wM(Q.model):void 0;switch(Q.type){case"claude-subscription":return E;case"tako":return{...E,ANTHROPIC_BASE_URL:`${Q.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"anthropic":return{...E,ANTHROPIC_API_KEY:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"deepseek":return{...E,ANTHROPIC_BASE_URL:mL,ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"xiaomi":return{...E,ANTHROPIC_BASE_URL:_L(Q.apiKey),ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};case"custom":return{...E,ANTHROPIC_BASE_URL:Q.baseUrl,ANTHROPIC_AUTH_TOKEN:Q.apiKey,...g?{ANTHROPIC_MODEL:g}:{}};default:return E}},async setupConfigFiles(Q){if(Q.type==="tako"||Q.type==="custom")await qS();if(Q.type==="claude-subscription")await OS(Q)},launchOptions:(Q)=>vS(Q)},SS=[{id:"skip-permissions",label:{en:"Skip Permissions",zh:"\u8DF3\u8FC7\u6743\u9650\u786E\u8BA4"},shortLabel:"Skip Perms",description:{en:"Auto-execute all operations without confirmation",zh:"\u5141\u8BB8\u81EA\u52A8\u6267\u884C\u6240\u6709\u64CD\u4F5C\uFF0C\u65E0\u9700\u786E\u8BA4"},flag:"--dangerously-skip-permissions",args:["--dangerously-skip-permissions"]},{id:"worktree",label:{en:"Git Worktree",zh:"Git Worktree"},shortLabel:"Worktree",description:{en:"Run in an isolated worktree",zh:"\u5728\u9694\u79BB\u7684 worktree \u4E2D\u8FD0\u884C"},flag:"--worktree",args:["--worktree"]}],kS=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],$S=["deepseek-v4-flash","deepseek-v4-pro"],yS=["mimo-v2.5-pro"];function VS(Q){let E=Q.match(/^claude-(haiku|sonnet|opus)-(\d{1,2})-(\d{1,2})$/);if(E)return`${E[1].charAt(0).toUpperCase()+E[1].slice(1)} ${E[2]}.${E[3]}`;return $C.find((F)=>F.id===Q)?.displayName??Q}function wM(Q){if(!Q)return Q;if(Q.endsWith("[1m]")||/:1m$/i.test(Q))return Q;if(!/^(claude|deepseek|kimi|mimo)[-_]/i.test(Q))return Q;let E=$C.find((g)=>g.id===Q);if(!E||E.contextWindow<1e6)return Q;return`${Q}[1m]`}function fK(Q){if(Q>=1e6)return"1M";if(Q>0)return`${Math.round(Q/1000)}k`;return"?"}function TS(Q){return/^(gpt[-_]|chatgpt[-_]|o\d+([-_]|$)|davinci[-_]|text-davinci[-_]|openai[-_/])/i.test(Q)}function PS(Q){if(!Q.baseUrl)return null;let E=mw(Q.baseUrl,"claude");if(!E||E.length===0)return null;let g=E.filter((F)=>!TS(F.id));if(g.length===0)return null;return g.map((F)=>{let N=wM(F.id);return{id:`model-${F.id}`,label:{en:F.displayName,zh:F.displayName},shortLabel:F.displayName,description:{en:`Use ${F.displayName} (${fK(F.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${F.displayName}\uFF08\u4E0A\u4E0B\u6587 ${fK(F.contextWindow)}\uFF09`},flag:`--model ${N}`,args:["--model",N],group:"model"}})}function mS(Q){if(AF(),Q&&(Q.type==="tako"||Q.type==="custom")){let F=PS(Q);if(F)return F}let E=Q?.type==="deepseek"?$S:Q?.type==="xiaomi"?yS:kS,g=[];for(let F of E){let J=$C.find((k)=>k.id===F)?.contextWindow??0,R=J>=1e6?"1M":J>0?`${Math.round(J/1000)}k`:"?",Y=VS(F),O=wM(F);g.push({id:`model-${F}`,label:{en:Y,zh:Y},shortLabel:Y,description:{en:`Use ${Y} (${R} ctx)`,zh:`\u4F7F\u7528 ${Y}\uFF08\u4E0A\u4E0B\u6587 ${R}\uFF09`},flag:`--model ${O}`,args:["--model",O],group:"model"})}return g}function vS(Q){return[...SS,...mS(Q)]}Tw(zS);import{homedir as _S}from"os";import{join as pK}from"path";var dK=pK(_S(),".gemini"),xK=pK(dK,"settings.json");async function jS(){let Q=await import("fs/promises");try{await Q.mkdir(dK,{recursive:!0})}catch{}let E={};try{E=JSON.parse(await Q.readFile(xK,"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(xK,JSON.stringify(E,null,2)+`
|
|
622
|
-
`)}var hS={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(Q){return{GEMINI_API_KEY:Q.apiKey,GOOGLE_GEMINI_BASE_URL:Q.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:jS};Tw(hS);import{join as C0}from"path";B0();K0();import{readFileSync as bS,writeFileSync as fS,mkdirSync as xS}from"fs";import{join as cK}from"path";import{homedir as lK}from"os";var Q4=null,$9=null,aK=cK(lK(),".tako","region.json"),pS=2592000000,y9={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}};function dS(){let Q=process.env.TAKO_REGION?.trim().toLowerCase();if(Q==="cn"||Q==="china")return"cn";if(Q==="global"||Q==="intl"||Q==="international")return"global";return null}function iS(){try{let Q=bS(aK,"utf-8"),E=JSON.parse(Q);if(E.region!=="cn"&&E.region!=="global")return null;if(typeof E.detectedAt!=="number")return null;if(Date.now()-E.detectedAt>pS)return null;return E.region}catch{return null}}function iK(Q){try{xS(cK(lK(),".tako"),{recursive:!0}),fS(aK,JSON.stringify({region:Q,detectedAt:Date.now()}),"utf-8")}catch{}}function cS(){try{let E=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(E)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(E))return"cn"}}catch{}let Q=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(Q.startsWith("zh_cn")||Q.startsWith("zh-cn"))return"cn";return null}async function lS(){if($9)return $9;return $9=(async()=>{let E=[aS,oS,nS].map((g)=>g().then((F)=>F?F:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(E),new Promise((F,N)=>setTimeout(()=>N(Error("net-timeout")),1200))])}catch{return"cn"}})(),$9}async function I4(){if(Q4)return Q4;let Q=dS();if(Q)return Q4=Q,Q;let E=iS();if(E)return Q4=E,E;let g=cS();if(g)return Q4=g,iK(g),g;let F=await lS();return Q4=F,iK(F),F}async function aS(){try{let Q=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function oS(){try{let Q=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country==="CN"?"cn":"global"}catch{return null}}async function nS(){try{let Q=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function sS(){let Q=await I4();return y9[Q]}async function kg(){return(await sS()).npm}function oK(){return"curl -fsSL https://bun.sh/install | bash"}async function rS(){let Q=y9.cn.bunBinary,E=await fetch(`${Q}/`,{signal:AbortSignal.timeout(1e4)});if(!E.ok)throw Error(`Failed to fetch bun versions: ${E.status}`);let F=(await E.json()).map((N)=>N.name.replace(/\/$/,"")).filter((N)=>/^bun-v\d+\.\d+\.\d+$/.test(N)).sort((N,J)=>{let R=N.replace("bun-v","").split(".").map(Number),Y=J.replace("bun-v","").split(".").map(Number);for(let O=0;O<3;O++)if(R[O]!==Y[O])return Y[O]-R[O];return 0});if(F.length===0)throw Error("No bun versions found on mirror");return F[0]}async function nK(){let Q=y9.cn.bunBinary,E=await rS(),F={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",N=process.arch==="arm64"?"aarch64":"x64",J=`bun-${F}-${N}`;return`${Q}/${E}/${J}.zip`}async function sK(){let Q=await I4(),E=y9[Q];if(Q==="cn")RQ.info(`${tB("region.usingChinaMirror")} npm: ${E.npm}`);else RQ.info(tB("region.usingGlobalMirror"))}var tS=class{constructor(Q){this.baseUrl=Q.baseUrl,this.headers={"Content-Type":"application/json",...Q.defaultHeaders},this.maxRetries=Q.maxRetries??3,this.initialRetryDelay=Q.initialRetryDelay??500}async resolveHeaders(){let Q={};for(let[E,g]of Object.entries(this.headers)){let F=await g;F!==null&&(Q[E]=F)}return Q}addHeader(Q,E){this.headers[Q]=E}async post(Q,E,g,F){try{let N=await fetch(Q,{method:"POST",headers:await this.resolveHeaders(),body:E?JSON.stringify(E??{}):void 0,keepalive:!0,...g});if(N.status===401)return null;if(N.status!==200&&N.status!==202)throw Error(`HTTP error! status: ${N.status}`);let J=await N.text();return J?JSON.parse(J):null}catch(N){if(F<this.maxRetries){let J=this.initialRetryDelay*2**F;return await new Promise((R)=>setTimeout(R,J)),this.post(Q,E,g,F+1)}return console.error("Max retries reached:",N),null}}async fetch(Q,E,g={}){let F=`${this.baseUrl}${Q}`;return this.post(F,E,g,0)}},rK=class{constructor(Q){this.options=Q,this.queue=[];let E={"openpanel-client-id":Q.clientId};Q.clientSecret&&(E["openpanel-client-secret"]=Q.clientSecret),E["openpanel-sdk-name"]=Q.sdk||"node",E["openpanel-sdk-version"]=Q.sdkVersion||"1.0.4",this.api=new tS({baseUrl:Q.apiUrl||"https://api.openpanel.dev",defaultHeaders:E})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(Q){return this.options.disabled||this.options.filter&&!this.options.filter(Q)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(Q),Promise.resolve()):this.api.fetch("/track",Q)}setGlobalProperties(Q){this.global={...this.global,...Q}}async track(Q,E){return this.log("track event",Q,E),this.send({type:"track",payload:{name:Q,profileId:E?.profileId??this.profileId,properties:{...this.global??{},...E??{}}}})}async identify(Q){if(this.log("identify user",Q),Q.profileId&&(this.profileId=Q.profileId,this.flush()),Object.keys(Q).length>1)return this.send({type:"identify",payload:{...Q,properties:{...this.global,...Q.properties}}})}async alias(Q){}async increment(Q){return this.send({type:"increment",payload:Q})}async decrement(Q){return this.send({type:"decrement",payload:Q})}async revenue(Q,E){let g=E?.deviceId;return delete E?.deviceId,this.track("revenue",{...E??{},...g?{__deviceId:g}:{},__revenue:Q})}async fetchDeviceId(){return(await this.api.fetch("/track/device-id",void 0,{method:"GET",keepalive:!1}))?.deviceId??""}clear(){this.profileId=void 0}flush(){this.queue.forEach((Q)=>{this.send({...Q,payload:{...Q.payload,profileId:Q.payload.profileId??this.profileId}})}),this.queue=[]}log(...Q){this.options.debug&&console.log("[OpenPanel.dev]",...Q)}};var eS="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",Ak="sec_1e0ea34016bc3a5f8ef5",Bk="https://op.shiroha.tech/api",E4=null;function tK(){if(!E4)E4=new rK({clientId:eS,clientSecret:Ak,apiUrl:Bk});return E4}var V9=[];function eK(Q,E,g){let F=tK().track(Q,{profileId:E,...g}).catch(()=>{});V9.push(F)}function AY(Q,E){let{email:g,...F}=E,N=tK().identify({profileId:Q,...typeof g==="string"?{email:g}:{},firstName:String(F.platform||""),properties:F}).catch(()=>{});V9.push(N)}async function BY(){if(await Promise.allSettled(V9),V9.length=0,E4){try{E4.flush()}catch{}E4=null}}B0();K0();K0();var Qk="0.2.
|
|
622
|
+
`)}var hS={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(Q){return{GEMINI_API_KEY:Q.apiKey,GOOGLE_GEMINI_BASE_URL:Q.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:jS};Tw(hS);import{join as C0}from"path";B0();K0();import{readFileSync as bS,writeFileSync as fS,mkdirSync as xS}from"fs";import{join as cK}from"path";import{homedir as lK}from"os";var Q4=null,$9=null,aK=cK(lK(),".tako","region.json"),pS=2592000000,y9={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}};function dS(){let Q=process.env.TAKO_REGION?.trim().toLowerCase();if(Q==="cn"||Q==="china")return"cn";if(Q==="global"||Q==="intl"||Q==="international")return"global";return null}function iS(){try{let Q=bS(aK,"utf-8"),E=JSON.parse(Q);if(E.region!=="cn"&&E.region!=="global")return null;if(typeof E.detectedAt!=="number")return null;if(Date.now()-E.detectedAt>pS)return null;return E.region}catch{return null}}function iK(Q){try{xS(cK(lK(),".tako"),{recursive:!0}),fS(aK,JSON.stringify({region:Q,detectedAt:Date.now()}),"utf-8")}catch{}}function cS(){try{let E=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(E)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(E))return"cn"}}catch{}let Q=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(Q.startsWith("zh_cn")||Q.startsWith("zh-cn"))return"cn";return null}async function lS(){if($9)return $9;return $9=(async()=>{let E=[aS,oS,nS].map((g)=>g().then((F)=>F?F:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(E),new Promise((F,N)=>setTimeout(()=>N(Error("net-timeout")),1200))])}catch{return"cn"}})(),$9}async function I4(){if(Q4)return Q4;let Q=dS();if(Q)return Q4=Q,Q;let E=iS();if(E)return Q4=E,E;let g=cS();if(g)return Q4=g,iK(g),g;let F=await lS();return Q4=F,iK(F),F}async function aS(){try{let Q=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function oS(){try{let Q=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country==="CN"?"cn":"global"}catch{return null}}async function nS(){try{let Q=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!Q.ok)return null;return(await Q.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function sS(){let Q=await I4();return y9[Q]}async function kg(){return(await sS()).npm}function oK(){return"curl -fsSL https://bun.sh/install | bash"}async function rS(){let Q=y9.cn.bunBinary,E=await fetch(`${Q}/`,{signal:AbortSignal.timeout(1e4)});if(!E.ok)throw Error(`Failed to fetch bun versions: ${E.status}`);let F=(await E.json()).map((N)=>N.name.replace(/\/$/,"")).filter((N)=>/^bun-v\d+\.\d+\.\d+$/.test(N)).sort((N,J)=>{let R=N.replace("bun-v","").split(".").map(Number),Y=J.replace("bun-v","").split(".").map(Number);for(let O=0;O<3;O++)if(R[O]!==Y[O])return Y[O]-R[O];return 0});if(F.length===0)throw Error("No bun versions found on mirror");return F[0]}async function nK(){let Q=y9.cn.bunBinary,E=await rS(),F={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",N=process.arch==="arm64"?"aarch64":"x64",J=`bun-${F}-${N}`;return`${Q}/${E}/${J}.zip`}async function sK(){let Q=await I4(),E=y9[Q];if(Q==="cn")RQ.info(`${tB("region.usingChinaMirror")} npm: ${E.npm}`);else RQ.info(tB("region.usingGlobalMirror"))}var tS=class{constructor(Q){this.baseUrl=Q.baseUrl,this.headers={"Content-Type":"application/json",...Q.defaultHeaders},this.maxRetries=Q.maxRetries??3,this.initialRetryDelay=Q.initialRetryDelay??500}async resolveHeaders(){let Q={};for(let[E,g]of Object.entries(this.headers)){let F=await g;F!==null&&(Q[E]=F)}return Q}addHeader(Q,E){this.headers[Q]=E}async post(Q,E,g,F){try{let N=await fetch(Q,{method:"POST",headers:await this.resolveHeaders(),body:E?JSON.stringify(E??{}):void 0,keepalive:!0,...g});if(N.status===401)return null;if(N.status!==200&&N.status!==202)throw Error(`HTTP error! status: ${N.status}`);let J=await N.text();return J?JSON.parse(J):null}catch(N){if(F<this.maxRetries){let J=this.initialRetryDelay*2**F;return await new Promise((R)=>setTimeout(R,J)),this.post(Q,E,g,F+1)}return console.error("Max retries reached:",N),null}}async fetch(Q,E,g={}){let F=`${this.baseUrl}${Q}`;return this.post(F,E,g,0)}},rK=class{constructor(Q){this.options=Q,this.queue=[];let E={"openpanel-client-id":Q.clientId};Q.clientSecret&&(E["openpanel-client-secret"]=Q.clientSecret),E["openpanel-sdk-name"]=Q.sdk||"node",E["openpanel-sdk-version"]=Q.sdkVersion||"1.0.4",this.api=new tS({baseUrl:Q.apiUrl||"https://api.openpanel.dev",defaultHeaders:E})}init(){}ready(){this.options.waitForProfile=!1,this.flush()}async send(Q){return this.options.disabled||this.options.filter&&!this.options.filter(Q)?Promise.resolve():this.options.waitForProfile&&!this.profileId?(this.queue.push(Q),Promise.resolve()):this.api.fetch("/track",Q)}setGlobalProperties(Q){this.global={...this.global,...Q}}async track(Q,E){return this.log("track event",Q,E),this.send({type:"track",payload:{name:Q,profileId:E?.profileId??this.profileId,properties:{...this.global??{},...E??{}}}})}async identify(Q){if(this.log("identify user",Q),Q.profileId&&(this.profileId=Q.profileId,this.flush()),Object.keys(Q).length>1)return this.send({type:"identify",payload:{...Q,properties:{...this.global,...Q.properties}}})}async alias(Q){}async increment(Q){return this.send({type:"increment",payload:Q})}async decrement(Q){return this.send({type:"decrement",payload:Q})}async revenue(Q,E){let g=E?.deviceId;return delete E?.deviceId,this.track("revenue",{...E??{},...g?{__deviceId:g}:{},__revenue:Q})}async fetchDeviceId(){return(await this.api.fetch("/track/device-id",void 0,{method:"GET",keepalive:!1}))?.deviceId??""}clear(){this.profileId=void 0}flush(){this.queue.forEach((Q)=>{this.send({...Q,payload:{...Q.payload,profileId:Q.payload.profileId??this.profileId}})}),this.queue=[]}log(...Q){this.options.debug&&console.log("[OpenPanel.dev]",...Q)}};var eS="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",Ak="sec_1e0ea34016bc3a5f8ef5",Bk="https://op.shiroha.tech/api",E4=null;function tK(){if(!E4)E4=new rK({clientId:eS,clientSecret:Ak,apiUrl:Bk});return E4}var V9=[];function eK(Q,E,g){let F=tK().track(Q,{profileId:E,...g}).catch(()=>{});V9.push(F)}function AY(Q,E){let{email:g,...F}=E,N=tK().identify({profileId:Q,...typeof g==="string"?{email:g}:{},firstName:String(F.platform||""),properties:F}).catch(()=>{});V9.push(N)}async function BY(){if(await Promise.allSettled(V9),V9.length=0,E4){try{E4.flush()}catch{}E4=null}}B0();K0();K0();var Qk="0.2.61";function QY(){return{cli_version:Qk,platform:process.platform,arch:process.arch,locale:y1(),node_version:process.version}}function IY(Q){return Bun.hash(Q).toString(16).slice(0,8)}var Ik="0.2.61",GM=!1,C4=null;async function EY(){if(C4!==null)return C4;try{return C4=(await oQ()).telemetryEnabled!==!1,C4}catch{return C4=!1,!1}}async function CY(){try{let Q=await oQ();if(Q.apiId)return Q.apiId;let E=Q.providers??[],g=Q.defaultProviderId,F=g?E.find((N)=>N.id===g):E[0];if(F){if(F.apiId)return F.apiId;if(F.email)return F.email;return F.id}return"anonymous"}catch{return"anonymous"}}async function RD(){if(GM)return;try{if(!await EY())return;let Q=await oQ(),E=await CY();if(E==="anonymous")return;let F=(Q.providers??[]).find((J)=>J.email)?.email,N=await I4();AY(E,{...F?{email:F}:{},region:N,locale:y1(),first_seen_version:Ik,platform:process.platform,arch:process.arch}),GM=!0}catch{}}function E0(Q,E){Ek(Q,E).catch(()=>{})}async function Ek(Q,E){try{if(!await EY())return;let g=await CY();eK(Q,g,{...QY(),...E})}catch{}}async function FN(){await BY()}function EF(){C4=null,GM=!1}var Ck=/^Resolving dependencies/,gY=/^Resolved, downloaded and extracted \[(\d+)\]/,gk=/^Saved lockfile/,Dk=/^(\d+) packages? installed/;function Fk(Q,E){let g=[];if(E.phase)g.push(E.phase);if(E.pkgCount>0)g.push(`\u5DF2\u5904\u7406 ${E.pkgCount} \u4E2A\u5305`);return g.push(`${E.elapsedSec}s`),`${Q} \xB7 ${g.join(" \xB7 ")}`}async function T9(Q,E,g){let F=Date.now(),N={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},J=[],R=()=>{N.elapsedSec=Math.floor((Date.now()-F)/1000),g(Fk(E,N))};R();let Y=setInterval(R,1000),O=(i)=>{if(!i)return;if(J.push(i),Ck.test(i))N.phase="\u89E3\u6790\u4F9D\u8D56";else if(gY.test(i)){N.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let n=i.match(gY);if(n)N.pkgCount=parseInt(n[1],10)}else if(gk.test(i))N.phase="\u5199\u5165 lockfile";else if(Dk.test(i))N.phase="\u5B8C\u6210";R()},k=async(i)=>{if(!i)return;let n=i.getReader(),z=new TextDecoder,_="";try{while(!0){let{done:b,value:j}=await n.read();if(b)break;_+=z.decode(j,{stream:!0}).replace(/\r/g,"");let c=_.split(`
|
|
623
623
|
`);_=c.pop()??"";for(let ZA of c)O(ZA)}if(_)O(_)}finally{n.releaseLock()}};try{await Promise.all([k(Q.stderr),k(Q.stdout)])}finally{clearInterval(Y)}return J.join(`
|
|
624
|
-
`)}var m1=null;function wk(Q){return Q.startsWith(D8)}async function Gk(){try{if(!await Bun.file(p0).exists())return null;let E=Bun.spawn([p0,"--version"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode!==0)return null;return(await new Response(E.stdout).text()).trim()}catch{return null}}async function DY(){return await Gk()!==null}async function Nk(){if(process.platform==="win32")return!0;try{let E=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode===0)return!0}catch{}RQ.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let Q=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let E of Q)try{let g=Bun.spawn(["bash","-c",`sudo ${E} 2>/dev/null || ${E}`],{stdout:"pipe",stderr:"pipe"});if(await g.exited,g.exitCode===0)return!0}catch{}return!1}async function Hk(Q){let E=await import("fs/promises"),{join:g}=await import("path"),F=process.platform==="win32",N=F?"bun.exe":"bun",J=await nK();RQ.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${J}`);let R=await fetch(J);if(!R.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${R.status}`);let Y=g(Q,"bun-download.zip");await Bun.write(Y,R);let O=g(Q,"bin");if(await E.mkdir(O,{recursive:!0}),F){let i=`Expand-Archive -Path "${Y}" -DestinationPath "${Q}" -Force`,n=Bun.spawn(["powershell","-Command",i],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let i=Bun.spawn(["unzip","-oq",Y,"-d",Q],{stdout:"pipe",stderr:"pipe"});if(await i.exited,i.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let k=await E.readdir(Q);for(let i of k){let n=g(Q,i);if((await E.stat(n)).isDirectory()&&i.startsWith("bun-")){let _=g(n,N);try{if(await E.access(_),await E.rename(_,g(O,N)),!F)await E.chmod(g(O,N),493);await E.rm(n,{recursive:!0,force:!0});break}catch{}}}return await E.rm(Y,{force:!0}),!0}async function Uk(){let Q=jw();if(!await Nk())return RQ.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await sK(),Q.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(D8,{recursive:!0}),await I4()==="cn")await Hk(D8);else if(process.platform==="win32"){let F=`$env:BUN_INSTALL="${D8}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let F=`BUN_INSTALL="${D8}" ${oK()}`;if(await Bun.spawn(["bash","-c",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return m1=p0,Q.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),RQ.info(`\u5B89\u88C5\u4F4D\u7F6E: ${D8}`),!0}catch(E){return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Lk(){if(await DY())return m1=p0,!0;return RQ.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),RQ.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await Uk()}async function wN(){if(m1){if(!wk(m1))m1=p0;return m1}if(await DY())return m1=p0,p0;return p0}async function MM(Q){try{let E=await kg(),g=await fetch(`${E}/${Q}/latest`);if(!g.ok)return null;return(await g.json()).version}catch{return null}}async function Jk(Q){return(await oQ()).installedClients[Q.id]?.version||null}async function FY(Q){let E=F8(Q.id),g=C0(E,"package.json");try{return await Bun.file(g).exists()}catch{return!1}}async function wY(Q){let E=await Jk(Q);if(!E)return!0;let g=await MM(Q.package);if(!g)return!1;return E!==g}function GY(Q){let{platform:E,arch:g}=process,F=`${E}-${g}`;for(let[N,J]of Object.entries(Q))if(N.endsWith(F))return{pkg:N,version:J};return null}async function NY(Q,E,g,F){let N=C0(E,"node_modules",Q.package,"package.json");try{let J=Bun.file(N);if(!await J.exists())return;let Y=(await J.json()).optionalDependencies;if(!Y||typeof Y!=="object")return;let O=GY(Y);if(!O)return;let i=process.platform==="win32"?`${Q.command}.exe`:Q.command,n=C0(E,"node_modules",O.pkg,i),z=Bun.file(n);if(await z.exists()&&z.size>1024)return;RQ.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${O.pkg}...`);for(let _ of[O.version,"latest"]){let b=Bun.spawn([g,"add",`${O.pkg}@${_}`],{cwd:E,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:F}});if(await b.exited,b.exitCode===0)break;if(_==="latest"){let j=await new Response(b.stderr).text();RQ.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${j.slice(0,200)}`)}}}catch(J){RQ.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function UM(Q,E){let g=await import("fs/promises"),F=C0(E,"node_modules",Q.package,"package.json");try{let N=Bun.file(F);if(!await N.exists())return!1;let J=await N.json(),R=J.optionalDependencies;if(!R)return!0;let Y=GY(R);if(!Y)return RQ.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let O=J.bin,k=typeof O==="string"?O:O?.[Q.command];if(!k)return!1;let i=C0(E,"node_modules",Q.package,k),n=process.platform==="win32",z=n?`${Q.command}.exe`:Q.command,_=C0(E,"node_modules",Y.pkg,z),b=Bun.file(_);if(await b.exists()&&b.size>1024){if(await Bun.write(i,b),!n)await g.chmod(i,493);return!0}let j=C0(E,"node_modules",Q.package,"install.cjs");if(await Bun.file(j).exists()){RQ.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let ZA=await wN(),SA=Bun.spawn([ZA,j],{cwd:C0(E,"node_modules",Q.package),stdout:"pipe",stderr:"pipe"});if(await SA.exited,SA.exitCode!==0){let mA=await new Response(SA.stderr).text();RQ.warn(`postinstall \u5931\u8D25: ${mA.slice(0,200)}`)}let wA=Bun.file(i);if(await wA.exists()&&wA.size>1024){if(!n)await g.chmod(i,493);return!0}}RQ.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await kg();for(let ZA of[Y.version,"latest"])try{let SA=await fetch(`${c}/${Y.pkg}/${ZA}`);if(!SA.ok)continue;let mA=(await SA.json()).dist?.tarball;if(!mA)continue;let TA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(TA,{recursive:!0});let WA=C0(TA,"pkg.tgz"),KA=Bun.spawn(["curl","-fsSL","-o",WA,mA],{stdout:"pipe",stderr:"pipe"});if(await KA.exited,KA.exitCode!==0){let AB=await new Response(KA.stderr).text();RQ.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${AB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let kA=Bun.file(WA).size;if(kA<1024){RQ.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${kA} bytes, url: ${mA.slice(0,100)})`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let $A=Bun.spawn(["tar","xzf",WA,"-C",TA,`package/${z}`],{stdout:"pipe",stderr:"pipe"});await $A.exited;let GB=C0(TA,"package",z),nA=Bun.file(GB);if(await nA.exists()&&nA.size>1024){if(await Bun.write(i,nA),!n)await g.chmod(i,493);return await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{}),!0}let CB=await new Response($A.stderr).text();RQ.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${kA} bytes, exit=${$A.exitCode}): ${CB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{})}catch(SA){RQ.warn(`\u4E0B\u8F7D\u5931\u8D25: ${SA instanceof Error?SA.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(c!=="https://registry.npmjs.org")try{let ZA=`https://registry.npmjs.org/${Y.pkg}/-/${Y.pkg.split("/").pop()}-${Y.version}.tgz`;RQ.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let SA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(SA,{recursive:!0});let wA=C0(SA,"pkg.tgz"),mA=Bun.spawn(["curl","-fsSL","-o",wA,ZA],{stdout:"pipe",stderr:"pipe"});if(await mA.exited,mA.exitCode===0&&Bun.file(wA).size>1024){await Bun.spawn(["tar","xzf",wA,"-C",SA,`package/${z}`],{stdout:"pipe",stderr:"pipe"}).exited;let WA=Bun.file(C0(SA,"package",z));if(await WA.exists()&&WA.size>1024){if(await Bun.write(i,WA),!n)await g.chmod(i,493);return await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{}),!0}}await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(N){return RQ.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function LM(Q,E=!1){let g=jw(),F=F8(Q.id);try{if(!await Lk())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let N=await FY(Q),J=E||await wY(Q);if(N&&!J)return{success:!0};let R=N?"\u66F4\u65B0":"\u5B89\u88C5",Y=`\u6B63\u5728${R} ${Q.name}`;g.start(Y);let O=await import("fs/promises");await O.mkdir(F,{recursive:!0});let k=C0(F,"package.json");if(!await Bun.file(k).exists())await Bun.write(k,JSON.stringify({name:`tako-${Q.id}`,private:!0,dependencies:{}},null,2));let n=await wN(),z=await kg();if(N){let SA=C0(F,"bun.lock");try{await O.unlink(SA)}catch{}}let _=Bun.spawn([n,"add",`${Q.package}@latest`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:z}}),b=await T9(_,Y,(SA)=>g.update(SA));if(await _.exited!==0)return g.stop(`${R} ${Q.name} \u5931\u8D25`),{success:!1,error:b||"\u672A\u77E5\u9519\u8BEF"};await NY(Q,F,n,z),await UM(Q,F);let c=await MM(Q.package),ZA=(await oQ()).installedClients[Q.id]?.version;if(c){let SA=await oQ();if(SA.installedClients[Q.id]={version:c,installedAt:new Date().toISOString()},await yw(SA),N&&ZA)E0("client_updated",{client_id:Q.id,from_version:ZA,to_version:c});else E0("client_installed",{client_id:Q.id,client_version:c})}return g.stop(`${Q.name} ${R}\u5B8C\u6210`),{success:!0}}catch(N){return g.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}}}async function NM(Q){try{let E=Bun.file(Q);if(!await E.exists())return!0;if(E.size<100)return!0;let F=new Uint8Array(await E.slice(0,4).arrayBuffer());if(F[0]===127&&F[1]===69&&F[2]===76&&F[3]===70)return!1;if(F[0]===254||F[0]===207||F[0]===206||F[0]===202)return!1;if(F[0]===77&&F[1]===90)return!1;return!0}catch{return!0}}async function HM(Q){if(Q.runtime!=="native")return;let E=F8(Q.id),g=C0(E,"node_modules",Q.package,"package.json");try{let F=Bun.file(g);if(!await F.exists())return;let J=(await F.json()).bin;if(!J)return;let R=typeof J==="string"?J:J[Q.command];if(!R)return;let Y=C0(E,"node_modules",Q.package,R);if(!await NM(Y))return;RQ.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let O=await wN(),k=await kg();if(await NY(Q,E,O,k),!await UM(Q,E)||await NM(Y)){if(RQ.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(E,{recursive:!0,force:!0}),(await LM(Q)).success)if(await UM(Q,E),await NM(Y))RQ.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else RQ.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else RQ.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function HY(Q){if(!await FY(Q)){let F=await LM(Q);if(F.success)await HM(Q);return F}if(await HM(Q),await wY(Q)){let F=await MM(Q.package),N=(await oQ()).installedClients[Q.id]?.version||"\u672A\u77E5",J=F?`${N} \u2192 ${F}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(RQ.info(`${Q.name} \u53D1\u73B0\u66F4\u65B0: ${J}`),await Mk(Q.id))return RQ.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await O9({message:`\u662F\u5426\u66F4\u65B0 ${Q.name}\uFF1F`,defaultValue:!1}))return await Rk(Q.id),RQ.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let Y=await LM(Q,!0);if(Y.success)await HM(Q);return Y}return{success:!0}}var JM=C0(W0,".update-dismissed.json");async function Mk(Q){try{let E=Bun.file(JM);if(!await E.exists())return!1;let F=(await E.json())[Q];if(!F)return!1;let N=new Date().toISOString().slice(0,10);return F===N}catch{return!1}}async function Rk(Q){try{let E={},g=Bun.file(JM);if(await g.exists())try{E=await g.json()}catch{}E[Q]=new Date().toISOString().slice(0,10),await Bun.write(JM,JSON.stringify(E))}catch{}}Q2();B0();B0();import{homedir as Wk}from"os";var Kk=50,RM=3;async function WM(Q){try{return(await(await import("fs/promises")).stat(Q)).isDirectory()}catch{return!1}}async function UY(Q,E,g){let F=await oQ(),N=F.recentProjects||[],J=new Date().toISOString(),R=N.findIndex((O)=>O.path===Q);if(R>=0){let O=N[R],k=O.clientUsage||{},i=k[E]||{count:0,lastAt:J};N[R]={...O,launchCount:O.launchCount+1,lastLaunchedAt:J,lastClientId:E,clientUsage:{...k,[E]:{count:i.count+1,lastAt:J,lastSelectedOptionIds:g??i.lastSelectedOptionIds}}}}else N.push({path:Q,launchCount:1,lastLaunchedAt:J,lastClientId:E,clientUsage:{[E]:{count:1,lastAt:J,lastSelectedOptionIds:g}}});let Y=N.sort((O,k)=>new Date(k.lastLaunchedAt).getTime()-new Date(O.lastLaunchedAt).getTime()).slice(0,Kk);F.recentProjects=Y,await kC(F)}async function LY(Q){let g=(await oQ()).recentProjects||[],F=process.cwd(),J=g.find((Y)=>Y.path===F)?.clientUsage?.[Q]?.lastSelectedOptionIds;if(J)return J;return g.filter((Y)=>Y.path!==F&&Y.clientUsage?.[Q]?.lastSelectedOptionIds).sort((Y,O)=>{let k=new Date(Y.clientUsage[Q].lastAt).getTime();return new Date(O.clientUsage[Q].lastAt).getTime()-k})[0]?.clientUsage?.[Q]?.lastSelectedOptionIds??[]}function Yk(Q,E){let g=Q.clientUsage?.[E];if(g)return new Date(g.lastAt).getTime();if(Q.lastClientId===E)return new Date(Q.lastLaunchedAt).getTime();return 0}async function JY(Q,E=RM,g=!0){let N=(await oQ()).recentProjects||[],J=process.cwd(),Y=N.filter((k)=>{if(g&&k.path===J)return!1;return k.clientUsage?.[Q]||k.lastClientId===Q}).map((k)=>({...k,lastUsedTime:Yk(k,Q)})).sort((k,i)=>i.lastUsedTime-k.lastUsedTime),O=[];for(let{lastUsedTime:k,...i}of Y){if(O.length>=E)break;if(await WM(i.path))O.push(i)}return O}async function MY(){let E=(await oQ()).recentProjects||[],g=process.cwd();return E.find((N)=>N.path===g)?.lastClientId||null}function KM(Q,E=25){let g=Wk(),F=Q.startsWith(g)?"~"+Q.slice(g.length):Q;if(F.length>E){let J=F.split("/").pop()||"";if(J.length>E-4)F="..."+J.slice(-E+3);else F=`.../${J}`}return F}function RY(Q){let{t:E}=(K0(),YZ(VK)),g=Date.now(),F=new Date(Q).getTime(),N=g-F,J=Math.floor(N/60000),R=Math.floor(N/3600000),Y=Math.floor(N/86400000),O=Math.floor(Y/7),k=Math.floor(Y/30);if(J<1)return E("time.justNow");if(J<60)return E("time.minutesAgo",{n:J});if(R<24)return E("time.hoursAgo",{n:R});if(Y===1)return E("time.yesterday");if(Y<7)return E("time.daysAgo",{n:Y});if(Y<30)return E("time.weeksAgo",{n:O});return E("time.monthsAgo",{n:k})}K0();async function WY(Q,E){try{let g=E?.projectPath||process.cwd(),F=E?.providerContext;if(!F)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let N=await R7(Q);if(!N)N=W7(Q);if(!await Bun.file(N).exists())return{success:!1,error:`\u627E\u4E0D\u5230\u53EF\u6267\u884C\u6587\u4EF6: ${N}`};let R=Q.getEnvVars(F),Y={...process.env,...R},O;if(Q.runtime==="native")O=[N];else O=[await wN(),N];if(E?.args&&E.args.length>0)O=[...O,...E.args];let k=process.platform==="win32";if(!k)try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1)}catch{}if(process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}if(k){let{spawnSync:i}=await import("child_process");i(O[0],O.slice(1),{env:Y,stdio:"inherit",cwd:g,windowsHide:!1})}else try{Bun.spawnSync(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g})}catch{await Bun.spawn(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g}).exited}return{success:!0}}catch(g){return{success:!1,error:g instanceof Error?g.message:"\u542F\u52A8\u5931\u8D25"}}}async function Zk(Q,E){if(E?.providerContext)return E.providerContext;let g=await Ag();if(g){let F=await V1(Q.id);if(F.some((J)=>J.id===g.id))return MD(g);if(F.length>0)return MD(F[0])}return null}async function P9(Q,E){try{let g=E?.projectPath||process.cwd();if(E?.projectPath){if(!await WM(E.projectPath))return{success:!1,error:tB("launcher.directoryNotFound",{path:E.projectPath})}}let F=await HY(Q);if(!F.success)return F;let N=await Zk(Q,E);if(!N)return{success:!1,error:tB("launcher.apiKeyNotConfigured")};if(Q.setupConfigFiles)await Q.setupConfigFiles(N,E?.selectedOptionIds);await UY(g,Q.id,E?.selectedOptionIds);let R=(await oQ()).installedClients[Q.id]?.version;return E0("client_launched",{client_id:Q.id,client_version:R,project_hash:IY(g),is_recent_project:!!E?.projectPath}),RQ.info(tB("launcher.starting",{client:Q.name})),await WY(Q,{...E,providerContext:N})}catch(g){return{success:!1,error:g instanceof Error?g.message:"Launch failed"}}}K0();Q2();Q2();async function m9(Q){let E=await V1(Q);if(E.length===0)return null;let g=await IF(Q);if(g)return MD(g);if(E.length===1)return MD(E[0]);let F=await Ag();if(F&&E.some((N)=>N.id===F.id))return MD(F);return MD(E[0])}async function KY(){let Q=await gN();if(await DN(Q)>0){for(let g of Q)E0("provider_added",{provider_type:g.type,method:"auto_detect"});EF(),RD()}}var Vg=SB(pQ(),1);var HE=SB(pQ(),1);Q2();K0();v9();var BI=SB(sI(),1),hk=[["\u2191\u2193","\u9009\u62E9","select"],["Enter","\u786E\u8BA4","confirm"],["Esc","\u53D6\u6D88","cancel"]];function TY({zh:Q}){return BI.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:2,children:hk.flatMap((E,g)=>{return[g>0?BI.jsxDEV(f,{dimColor:!0,children:"\u2502"},`s${g}`,!1,void 0,this):null,BI.jsxDEV(f,{dimColor:!0,bold:!0,children:E[0]},`k${g}`,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:Q?E[1]:E[2]},`l${g}`,!1,void 0,this)]})},void 0,!1,void 0,this)}function PY({provs:Q,provIdx:E,pickerIdx:g,color:F,zh:N}){return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:F,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:F,children:["\u25A3 ",N?"\u9009\u62E9\u670D\u52A1\u5546":"Pick Provider"]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[Q.length===0&&BI.jsxDEV(PA,{paddingLeft:1,children:BI.jsxDEV(f,{dimColor:!0,children:N?"\u6682\u65E0\u517C\u5BB9\u6B64\u5DE5\u5177\u7684\u670D\u52A1\u5546":"No compatible providers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q.map((J,R)=>{let Y=g===R,O=R===E;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:Y?F:void 0,bold:Y,children:Y?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:Y,color:Y?F:void 0,children:[" ",J.name]},void 0,!0,void 0,this),J.email&&BI.jsxDEV(f,{dimColor:!0,children:[" (",J.email,")"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},J.id,!0,void 0,this)}),(()=>{let J=g===Q.length;return BI.jsxDEV(PA,{paddingLeft:1,marginTop:1,children:[BI.jsxDEV(f,{color:J?F:void 0,bold:J,children:J?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:J,color:J?F:void 0,children:[" ","\u2699 ",N?"\u7BA1\u7406\u670D\u52A1\u5546\u2026":"Manage providers\u2026"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),BI.jsxDEV(TY,{zh:N},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function mY({group:Q,options:E,enabled:g,pickerIdx:F,color:N,zh:J}){let R=E.filter((k)=>k.group===Q),Y=Q==="model"?J?"\u9009\u62E9\u6A21\u578B":"Pick Model":Q,O=!R.some((k)=>g.has(k.id));return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:N,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:N,children:["\u25A3 ",Y]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[(()=>{let k=F===0;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:k?N:void 0,bold:k,children:k?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:k,color:k?N:void 0,children:[" ",J?"\u9ED8\u8BA4\uFF08\u4E0D\u6307\u5B9A\uFF09":"Default (none)"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})(),R.map((k,i)=>{let n=F===i+1,z=g.has(k.id);return BI.jsxDEV(PA,{paddingLeft:1,flexDirection:"column",children:[BI.jsxDEV(PA,{children:[BI.jsxDEV(f,{color:n?N:void 0,bold:n,children:n?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:n,color:n?N:void 0,children:[" ",k.label[J?"zh":"en"]||k.label.en]},void 0,!0,void 0,this),z&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:[" ",k.flag]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),n&&BI.jsxDEV(PA,{paddingLeft:3,children:BI.jsxDEV(f,{dimColor:!0,children:k.description[J?"zh":"en"]||k.description.en},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},k.id,!0,void 0,this)})]},void 0,!0,void 0,this),BI.jsxDEV(TY,{zh:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var QB=SB(sI(),1),bk="0.2.59",vY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},_Y={icon:"\u25AA",color:"white"};async function fk(){let Q=J1(),E=await MY(),g=await Ag(),F=V0()==="zh",N=[...Q].sort((Y,O)=>{if(Y.id===E)return-1;if(O.id===E)return 1;return 0}),J=[];for(let Y of N){let O=await JY(Y.id,RM,!0),k=process.cwd(),i=[{label:F?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:KM(k,45),path:k},...O.map((wA)=>({label:KM(wA.path,45),hint:RY(wA.lastLaunchedAt),path:wA.path}))],n=await V1(Y.id),_=await IF(Y.id)||n.find((wA)=>wA.id===g?.id)||n[0],b=_?n.findIndex((wA)=>wA.id===_.id):0,j=ML(Y,_),c=await LY(Y.id),ZA=j.map((wA)=>wA.id),SA=c.filter((wA)=>ZA.includes(wA));J.push({client:Y,projects:i,providers:n,activeProvIdx:Math.max(b,0),launchOptions:j,lastSelectedOptionIds:SA})}let R=J.some((Y)=>Y.providers.length>0);return{clients:J,defaultIdx:0,hasProviders:R}}function jY({color:Q}){let{stdout:E}=AM(),g=Math.max((E.columns||80)-6,20);return QB.jsxDEV(PA,{marginY:0,children:QB.jsxDEV(f,{dimColor:!0,color:Q,children:"\u2500".repeat(g)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function xk(Q){return Q>30?"green":Q>10?"yellow":"red"}function pk({provider:Q,zh:E}){if(!Q)return QB.jsxDEV(f,{color:"yellow",children:["\u26A0 ",E?"\u672A\u7ED1\u5B9A":"no provider"]},void 0,!0,void 0,this);let g={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:"cyan",icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:"yellow",icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:"blue",icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:"yellow",icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:"magenta",icon:"\u25C7"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:"gray",icon:"\u25AA"}},F=g[Q.type]??g.custom,N=E?F.zh:F.en,J=Q.email??"";if(J.length>0){let[R,Y]=J.split("@");if(R&&Y)J=R.length>14?`${R.slice(0,12)}\u2026@${Y}`:J}return QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{color:F.color,children:[F.icon," ",N]},void 0,!0,void 0,this),J&&QB.jsxDEV(f,{dimColor:!0,children:[" \xB7 ",J]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function dk({quota:Q,zh:E}){if(Q.status==="unsupported")return null;if(Q.status==="error")return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",Q.hint||(E?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")]},void 0,!0,void 0,this);if(Q.provider==="tako")if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit));else{let Y=Q.daily??Q.primary??Q.secondary;if(!Y)return null;let O=Y.costUsed??0;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",E?"\u4ECA\u65E5":"Today",": ",QB.jsxDEV(f,{color:"green",children:["$",O.toFixed(2)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}let g=(R,Y,O)=>{if(R&&R>=1440)return`${Math.round(R/1440)}d`;if(R)return`${Math.round(R/60)}h`;return O?`${O}d`:`${Y}h`},F=(R)=>Math.max(0,Math.min(100,100-Math.round(R))),N=[],J=(R,Y,O)=>{if(N.length)N.push(QB.jsxDEV(f,{dimColor:!0,children:" \xB7 "},`sep-${R}`,!1,void 0,this));let k=F(O);N.push(QB.jsxDEV(HE.default.Fragment,{children:[`${Y} \u5269 `,QB.jsxDEV(f,{color:xk(k),children:[k,"%"]},void 0,!0,void 0,this)]},R,!0,void 0,this))};if(Q.primary)J("primary",g(Q.primary.windowMinutes,5),Q.primary.usedPct);if(Q.secondary)J("secondary",g(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct);if(Q.modelLimits?.opus)J("opus","opus",Q.modelLimits.opus.usedPct);if(!N.length)return null;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",N]},void 0,!0,void 0,this)}function ik(Q,E){let g=[],F=new Set;for(let N of Q)if(!N.group)g.push({kind:"flag",opt:N});else if(!F.has(N.group)){F.add(N.group);let J=N.group==="model"?E?"\u6A21\u578B":"Model":N.group;g.push({kind:"group",group:N.group,title:J})}return g.push({kind:"provider",title:E?"\u670D\u52A1\u5546":"Provider"}),g}function XM(Q,E,g){return Q.find((F)=>F.group===g&&E.has(F.id))}function ck({clients:Q,defaultIdx:E,hasProviders:g,onResult:F}){let[N,J]=HE.useState(E),[R,Y]=HE.useState("projects"),[O,k]=HE.useState(0),[i,n]=HE.useState(0),[z,_]=HE.useState(()=>Q[E]?.activeProvIdx||0),[b,j]=HE.useState(()=>new Set(Q[E]?.lastSelectedOptionIds??[])),[c,ZA]=HE.useState(""),[SA,wA]=HE.useState(null),[mA,TA]=HE.useState(!1),[WA,KA]=HE.useState(0),kA=Q[N],$A=kA.projects,GB=kA.providers,nA=vY[kA.client.id]||_Y,CB=V0()==="zh",AB=GB[z],dB=HE.default.useMemo(()=>ML(kA.client,AB),[kA.client.id,AB?.id,AB?.type]),cA=HE.default.useMemo(()=>ik(dB,CB),[dB,CB]),sA=AB?.name||(CB?"\u672A\u914D\u7F6E":"N/A"),[DA,uA]=HE.useState(null);return HE.useEffect(()=>{if(!AB){uA(null);return}let NA=!1;return NN(AB).then((AA)=>{if(!NA)uA(AA)}),()=>{NA=!0}},[AB?.id,AB?.type]),HE.useEffect(()=>{k(0),n(0),Y("projects"),_(Q[N]?.activeProvIdx||0),wA(null),TA(!1),j(new Set(Q[N]?.lastSelectedOptionIds??[]))},[N]),HE.useEffect(()=>{let NA=new Set(dB.map((lA)=>lA.id)),AA=new Set(dB.filter((lA)=>lA.group==="model").map((lA)=>lA.id)),vA=AB?.model?`model-${AB.model}`:void 0;j((lA)=>{let l=new Set,v=!1,x=!1;for(let MA of lA)if(NA.has(MA)){if(l.add(MA),AA.has(MA))x=!0}else v=!0;if(!x&&vA&&AA.has(vA))l.add(vA),v=!0;return v?l:lA})},[dB,AB?.model]),I0(HE.useCallback((NA,AA)=>{if(mA){let lA=GB.length+1;if(AA.escape||NA==="q"){TA(!1);return}if(AA.upArrow){KA((l)=>l>0?l-1:lA-1);return}if(AA.downArrow){KA((l)=>l<lA-1?l+1:0);return}if(AA.return)if(WA<GB.length){let l=GB[WA];_(WA),(async()=>{if(await CN(kA.client.id,l.id),kA.client.setupConfigFiles)try{await kA.client.setupConfigFiles(MD(l))}catch(v){ZA(CB?"\u26A0 \u914D\u7F6E\u540C\u6B65\u5931\u8D25":"\u26A0 Config sync failed"),setTimeout(()=>ZA(""),2500);return}kA.activeProvIdx=WA,ZA(CB?`\u2713 \u5DF2\u7ED1\u5B9A ${l.name}`:`\u2713 Bound ${l.name}`),setTimeout(()=>ZA(""),2000)})(),TA(!1)}else TA(!1),F({type:"providers"});return}if(SA){let lA=dB.filter((v)=>v.group===SA),l=lA.length+1;if(AA.escape||NA==="q"){wA(null);return}if(AA.upArrow){KA((v)=>v>0?v-1:l-1);return}if(AA.downArrow){KA((v)=>v<l-1?v+1:0);return}if(AA.return){if(WA===0)j((v)=>{let x=new Set(v);for(let MA of lA)x.delete(MA.id);return x});else{let v=lA[WA-1];j((x)=>{let MA=new Set(x);for(let bA of lA)MA.delete(bA.id);return MA.add(v.id),MA})}wA(null)}return}if(NA==="q"){F({type:"exit"});return}if(NA==="s"){F({type:"stats"});return}if(NA==="c"){F({type:"config"});return}if(NA==="l"){F({type:"language"});return}if(NA==="p"){F({type:"providers"});return}let vA=parseInt(NA);if(vA>=1&&vA<=Q.length){J(vA-1);return}if(AA.leftArrow){J((lA)=>lA>0?lA-1:Q.length-1);return}if(AA.rightArrow){J((lA)=>lA<Q.length-1?lA+1:0);return}if(R==="projects"){if(AA.downArrow){if(O<$A.length-1)k((lA)=>lA+1);else if(cA.length>0)Y("options"),n(0);return}if(AA.upArrow){if(O>0)k((lA)=>lA-1);return}}if(R==="options"){if(AA.downArrow){if(i<cA.length-1)n((lA)=>lA+1);return}if(AA.upArrow){if(i>0)n((lA)=>lA-1);else Y("projects"),k($A.length-1);return}}if(NA===" "&&R==="options"&&cA.length>0){let lA=cA[i];if(lA.kind==="flag")j((l)=>{let v=new Set(l);if(v.has(lA.opt.id))v.delete(lA.opt.id);else v.add(lA.opt.id);return v});else if(lA.kind==="group"){let l=XM(dB,b,lA.group),v=dB.filter((MA)=>MA.group===lA.group),x=l?v.findIndex((MA)=>MA.id===l.id)+1:0;KA(Math.max(0,x)),wA(lA.group)}else KA(z),TA(!0);return}if(AA.return){if(R==="options"&&cA.length>0){let x=cA[i];if(x.kind==="group"){let MA=XM(dB,b,x.group),bA=dB.filter((LA)=>LA.group===x.group),BB=MA?bA.findIndex((LA)=>LA.id===MA.id)+1:0;KA(Math.max(0,BB)),wA(x.group);return}if(x.kind==="provider"){KA(z),TA(!0);return}}let lA=$A[O],l=[],v=[];for(let x of dB)if(b.has(x.id))l.push(...x.args),v.push(x.id);F({type:"launch",clientId:kA.client.id,projectPath:lA.path,args:l,selectedOptionIds:v})}},[R,N,O,i,z,GB,AB,kA,$A,dB,cA,b,Q,F,CB,SA,mA,WA])),QB.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[QB.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:nA.color,paddingX:2,paddingY:1,children:[QB.jsxDEV(PA,{justifyContent:"space-between",children:[QB.jsxDEV(PA,{gap:1,children:[QB.jsxDEV(f,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:["v",bk]},void 0,!0,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(pk,{provider:AB,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{children:[c&&QB.jsxDEV(f,{color:"green",children:c},void 0,!1,void 0,this),!c&&DA&&QB.jsxDEV(dk,{quota:DA,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!g&&QB.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:1,children:[QB.jsxDEV(f,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u672A\u914D\u7F6E\u670D\u52A1\u5546 \u2014 \u6309 c \u6DFB\u52A0 API Key \u6216 p \u7BA1\u7406\u670D\u52A1\u5546":"No provider configured \u2014 press c for API Key or p to manage"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[QB.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),Q.map((NA,AA)=>{let vA=vY[NA.client.id]||_Y;return AA===N?QB.jsxDEV(PA,{borderStyle:"bold",borderColor:vA.color,paddingX:1,children:QB.jsxDEV(f,{color:vA.color,bold:!0,children:[vA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this):QB.jsxDEV(PA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:QB.jsxDEV(f,{dimColor:!0,children:[vA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this)}),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(jY,{color:nA.color},void 0,!1,void 0,this),mA?QB.jsxDEV(PY,{provs:GB,provIdx:z,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):SA?QB.jsxDEV(mY,{group:SA,options:dB,enabled:b,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):QB.jsxDEV(QB.Fragment,{children:[$A.map((NA,AA)=>{let vA=R==="projects"&&AA===O;return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:NA.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA.hint?QB.jsxDEV(f,{dimColor:!0,children:NA.hint},void 0,!1,void 0,this):null]},AA,!0,void 0,this)}),cA.length>0&&QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(jY,{color:nA.color},void 0,!1,void 0,this),cA.map((NA,AA)=>{let vA=R==="options"&&AA===i;if(NA.kind==="flag"){let lA=NA.opt,l=b.has(lA.id);return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{color:l?nA.color:void 0,bold:l,children:l?"\u25C9":"\u25CB"},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:lA.label[CB?"zh":"en"]||lA.label.en},void 0,!1,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:lA.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:lA.description[CB?"zh":"en"]||lA.description.en},void 0,!1,void 0,this)]},lA.id,!0,void 0,this)}if(NA.kind==="group"){let lA=XM(dB,b,NA.group),l=lA?lA.shortLabel:CB?"\u9ED8\u8BA4":"Default";return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:lA?nA.color:void 0,children:l},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u8FDB\u5165\u9009\u62E9":"Enter to pick"},void 0,!1,void 0,this)]},`group-${NA.group}`,!0,void 0,this)}return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:AB?nA.color:"yellow",children:AB?sA:CB?"\u672A\u914D\u7F6E":"Not set"},void 0,!1,void 0,this),QB.jsxDEV(f,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u5207\u6362\u6216\u7BA1\u7406":"Enter to switch / manage"},void 0,!1,void 0,this)]},"provider-entry",!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:R==="options"?QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function hY({onResult:Q}){let[E,g]=HE.useState(null);if(HE.useEffect(()=>{fk().then(g)},[]),!E)return QB.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return QB.jsxDEV(ck,{clients:E.clients,defaultIdx:E.defaultIdx,hasProviders:E.hasProviders,onResult:Q},void 0,!1,void 0,this)}var fI=SB(pQ(),1);K0();Q2();G8();G8();G8();var UB=SB(sI(),1),I2={"claude-subscription":{icon:"\u2726",color:"yellow"},"codex-subscription":{icon:"\u25C8",color:"blue"},tako:{icon:"\uD83D\uDC19",color:"cyan"},anthropic:{icon:"\u25B3",color:"magenta"},deepseek:{icon:"\uD83D\uDD2E",color:"blue"},xiaomi:{icon:"\uD83D\uDFE0",color:"yellow"},custom:{icon:"\u2699",color:"gray"}},uM={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},HN=["claude-subscription","codex-subscription","tako","anthropic","deepseek","xiaomi","custom"];function bY({provider:Q,focused:E,bound:g,isDefault:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return UB.jsxDEV(PA,{flexDirection:"column",borderStyle:E?"bold":"round",borderColor:E?J.color:g?J.color:"gray",paddingX:2,paddingY:0,children:[UB.jsxDEV(PA,{justifyContent:"space-between",children:[UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:E||g,color:E?J.color:void 0,children:Q.name},void 0,!1,void 0,this),F&&UB.jsxDEV(f,{color:"yellow",children:["\u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),Q.builtin&&UB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{gap:1,children:g?UB.jsxDEV(f,{color:J.color,bold:!0,children:["\u25CF ",N?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):UB.jsxDEV(f,{dimColor:!0,children:["\u25CB ",N?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:R},void 0,!1,void 0,this),Q.model&&UB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.model&&UB.jsxDEV(f,{dimColor:!0,children:Q.model},void 0,!1,void 0,this),Q.email&&UB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.email&&UB.jsxDEV(f,{dimColor:!0,children:Q.email},void 0,!1,void 0,this),Q.apiKey&&UB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.apiKey&&UB.jsxDEV(f,{dimColor:!0,children:["Key: ",Q.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),E&&UB.jsxDEV(PA,{marginTop:0,children:UB.jsxDEV(f,{color:J.color,dimColor:!0,children:["Enter ",N?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",N?"\u8BE6\u60C5/\u64CD\u4F5C":"detail/actions"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function fY({screen:Q,addType:E,addKey:g,addUrl:F,addModel:N,addCtx:J,rowIdx:R,zh:Y}){let O=I2[E]||I2.custom,k=Y?qg[E]?.zh:qg[E]?.en,i=Q==="add-model"?O6(E):void 0;if(i)return UB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[UB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,marginBottom:1,children:[UB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",Y?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),i.map((j,c)=>{let ZA=R===c;return UB.jsxDEV(PA,{paddingLeft:1,gap:1,children:[UB.jsxDEV(f,{color:ZA?O.color:void 0,bold:ZA,children:ZA?"\u25B8":" "},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:ZA,color:ZA?O.color:void 0,children:j},void 0,!1,void 0,this)]},j,!0,void 0,this)})]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u9009\u62E9":"select"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let n=Q==="add-key"?Y?"\u8F93\u5165 API Key":"Enter API Key":Q==="add-url"?"Base URL":Q==="add-ctx"?Y?"\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08tokens\uFF0C\u53EF\u7559\u7A7A\uFF09":"Context Window (tokens, optional)":Y?"\u6A21\u578B":"Model",z=Q==="add-key"?g:Q==="add-url"?F:Q==="add-ctx"?J??"":N,_=Q==="add-url"?"https://your-proxy.com":Q==="add-ctx"?Y?"\u5982 200000\uFF1Bcatalog \u6CA1\u6709\u8BE5\u6A21\u578B\u65F6\u5EFA\u8BAE\u586B\u5199":"e.g. 200000; recommended if model is unknown to catalog":Q==="add-model"?vw(E)||(Y?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,b=Q==="add-url"?Y?"\u4E0B\u4E00\u6B65":"next":Q==="add-ctx"?Y?"\u4FDD\u5B58":"save":Q==="add-model"?Y?"\u4FDD\u5B58":"save":Y?"\u786E\u8BA4":"confirm";return UB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[UB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,marginBottom:1,children:[UB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",n]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q==="add-key"&&E==="xiaomi"&&UB.jsxDEV(f,{dimColor:!0,children:[" ",Y?"sk- \u5F00\u5934\u8D70\u6309\u91CF\u4ED8\u8D39\uFF0Ctp- \u5F00\u5934\u8D70 Token Plan \u8BA2\u9605\uFF08\u81EA\u52A8\u8BC6\u522B\uFF09":"sk- = pay-as-you-go, tp- = Token Plan subscription (auto-detected)"]},void 0,!0,void 0,this),_&&UB.jsxDEV(f,{dimColor:!0,children:[" ",Y?"\u9ED8\u8BA4":"Default",": ",_]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:_?1:0,children:[UB.jsxDEV(f,{color:O.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),UB.jsxDEV(f,{children:z||_||""},void 0,!1,void 0,this),UB.jsxDEV(f,{color:O.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:b},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function xY({provider:Q,defaultId:E,detailActions:g,detailIdx:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return UB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[UB.jsxDEV(PA,{borderStyle:"bold",borderColor:J.color,paddingX:3,paddingY:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:!0,color:J.color,children:Q.name},void 0,!1,void 0,this),Q.id===E&&UB.jsxDEV(f,{color:"yellow",children:[" \u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:[N?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),UB.jsxDEV(f,{children:R},void 0,!1,void 0,this),Q.builtin&&UB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.model&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:[N?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),UB.jsxDEV(f,{children:Q.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.email&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),UB.jsxDEV(f,{children:Q.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.apiKey&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),UB.jsxDEV(f,{children:[Q.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q.baseUrl&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),UB.jsxDEV(f,{children:Q.baseUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{gap:1,marginTop:1,children:g.map((Y,O)=>{let k=Y==="default"?`\u2B50 ${N?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:Y==="rekey"?`\uD83D\uDD11 ${N?"\u4FEE\u6539 Key":"Change Key"}`:Y==="relogin"?`\uD83D\uDD04 ${N?"\u91CD\u65B0\u767B\u5F55":"Re-login"}`:Y==="delete"?`\uD83D\uDDD1\uFE0F ${N?"\u5220\u9664":"Delete"}`:`\u2190 ${N?"\u8FD4\u56DE":"Back"}`,i=O===F;return UB.jsxDEV(PA,{borderStyle:i?"bold":"round",borderColor:i?"cyan":"gray",paddingX:2,children:UB.jsxDEV(f,{bold:i,color:i?"cyan":void 0,dimColor:!i,children:k},void 0,!1,void 0,this)},Y,!1,void 0,this)})},void 0,!1,void 0,this),UB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:N?"\u9009\u62E9":"select"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:N?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:N?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var EQ=SB(sI(),1);function pY({onDone:Q}){let[E,g]=fI.useState("list"),[F,N]=fI.useState([]),[J,R]=fI.useState(),[Y,O]=fI.useState({}),[k,i]=fI.useState(0),[n,z]=fI.useState(0),[_,b]=fI.useState(0),[j,c]=fI.useState(""),[ZA,SA]=fI.useState(""),[wA,mA]=fI.useState("tako"),[TA,WA]=fI.useState(""),[KA,kA]=fI.useState(""),[$A,GB]=fI.useState(""),[nA,CB]=fI.useState(""),AB=V0()==="zh",dB=J1(),cA=dB[k],sA=uM[cA?.id]?.color||"white",DA=cA?F.filter((LA)=>_w(LA,cA.id)):[],uA=Y[cA?.id]||J,NA=DA.length+4,AA=F.find((LA)=>LA.id===j),vA=AA?.type==="claude-subscription"||AA?.type==="codex-subscription",lA=AA?[...AA.id!==J?["default"]:[],...vA?["relogin"]:[],...AA.builtin?["rekey"]:["delete"],"back"]:["back"],l=fI.useCallback(async()=>{let LA=await JD(),dA=await Ag();N(LA),R(dA?.id);let RA={};for(let xA of J1()){let HB=await IF(xA.id);RA[xA.id]=HB?.id}O(RA)},[]);fI.useEffect(()=>{l()},[l]),fI.useEffect(()=>{z(0)},[k]),fI.useEffect(()=>{if(ZA){let LA=setTimeout(()=>SA(""),3000);return()=>clearTimeout(LA)}},[ZA]);let v=fI.useCallback(async()=>{if(j&&F.find((eA)=>eA.id===j)?.builtin){await P1(j,{apiKey:TA}),SA(AB?"Key \u5DF2\u66F4\u65B0":"Key updated"),await l(),g("list"),z(0);return}let LA=qg[wA]?.[AB?"zh":"en"]||wA,dA=KA||PL(wA),RA=$A||vw(wA),xA=nA?parseInt(nA,10):NaN,HB=Number.isFinite(xA)&&xA>0?xA:void 0;await T1({name:LA,type:wA,apiKey:TA,baseUrl:dA,model:RA,modelContextWindow:HB,supportedClients:tC(wA)}),E0("provider_added",{provider_type:wA,method:"manual"}),EF(),RD(),SA(AB?"\u5DF2\u6DFB\u52A0":"Added"),CB(""),await l(),g("list"),z(0)},[wA,TA,KA,$A,nA,AB,l,j,F]),x=fI.useCallback(async()=>{g("scanning");let LA=await gN(),dA=await DN(LA);if(dA>0)EF(),RD();SA(AB?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${dA} \u4E2A`:`Scan done, ${dA} added`),await l(),g("list"),z(0)},[l,AB]),[MA,bA]=fI.useState("claude"),BB=fI.useCallback(async(LA)=>{bA(LA),g("logging-in");let dA=LA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];await Bun.spawn(dA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited;let{invalidateQuotaCache:xA}=await Promise.resolve().then(() => (v9(),VY));if(LA==="claude")try{let HB=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),eA=await new Response(HB.stdout).text();await HB.exited;let _B=JSON.parse(eA.trim());if(_B.loggedIn&&_B.authMethod==="claude.ai"){let a=_B.email||"",qA=_B.subscriptionType||"pro",aA=`Claude ${qA.charAt(0).toUpperCase()+qA.slice(1)}${a?` (${a})`:""}`,{readClaudeAuth:jB}=await Promise.resolve().then(() => (k9(),S9)),AQ=await jB(),CQ=AQ.credentials||AQ.oauthAccount?{credentials:AQ.credentials,oauthAccount:AQ.oauthAccount}:void 0,VQ=F.find((TI)=>TI.type==="claude-subscription"&&TI.email===a);if(!VQ)await T1({name:aA,type:"claude-subscription",email:a,subscriptionType:qA,supportedClients:tC("claude-subscription"),authData:CQ}),SA(AB?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else await P1(VQ.id,{authData:CQ}),xA(VQ.id,"claude-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let HB=await import("fs/promises"),{homedir:eA}=await import("os"),{join:_B}=await import("path"),a=JSON.parse(await HB.readFile(_B(eA(),".codex","auth.json"),"utf-8"));if(a.auth_mode==="chatgpt"&&a.tokens?.access_token){let qA="";try{qA=JSON.parse(atob(a.tokens.id_token.split(".")[1])).email||""}catch{}let aA=F.find((jB)=>jB.type==="codex-subscription"&&jB.email===qA);if(!aA)await T1({name:qA?`Codex Plus (${qA})`:"Codex Subscription",type:"codex-subscription",email:qA||void 0,supportedClients:tC("codex-subscription"),authData:a}),SA(AB?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await P1(aA.id,{authData:a}),xA(aA.id,"codex-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await l(),g("list"),z(0)},[F,AB,l]);if(I0(fI.useCallback((LA,dA)=>{if(E==="list"){if(dA.escape||LA==="q"){Q();return}if(dA.leftArrow){i((xA)=>xA>0?xA-1:dB.length-1);return}if(dA.rightArrow){i((xA)=>xA<dB.length-1?xA+1:0);return}let RA=parseInt(LA);if(RA>=1&&RA<=dB.length){i(RA-1);return}if(dA.upArrow){z((xA)=>xA>0?xA-1:NA-1);return}if(dA.downArrow){z((xA)=>xA<NA-1?xA+1:0);return}if(dA.return){if(n<DA.length){let xA=DA[n];CN(cA.id,xA.id).then(()=>{Q()})}else if(n===DA.length)g("add-type"),z(0);else if(n===DA.length+1)x();else if(n===DA.length+2)Q("client-versions");else Q();return}if((LA==="d"||LA==="e")&&n<DA.length)c(DA[n].id),g("detail"),b(0);return}if(E==="detail"){if(dA.leftArrow){b((RA)=>RA>0?RA-1:lA.length-1);return}if(dA.rightArrow){b((RA)=>RA<lA.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=lA[_];if(RA==="back"){g("list"),z(0);return}if(RA==="default")gM(j).then(()=>{SA(AB?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),l(),g("list"),z(0)});if(RA==="delete")CM(j).then(()=>{SA(AB?"\u5DF2\u5220\u9664":"Deleted"),l(),g("list"),z(0)});if(RA==="rekey")mA(AA?.type||"tako"),WA(""),g("add-key"),z(0);if(RA==="relogin"){let xA=AA?.type==="codex-subscription"?"codex":"claude";g("list"),z(0),BB(xA)}}return}if(E==="add-type"){if(dA.upArrow){z((RA)=>RA>0?RA-1:HN.length-1);return}if(dA.downArrow){z((RA)=>RA<HN.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=HN[n];if(mA(RA),RA==="claude-subscription"){BB("claude");return}if(RA==="codex-subscription"){BB("codex");return}WA(""),kA(""),GB(vw(RA)||""),g("add-key"),z(0)}return}if(E==="add-key"){if(dA.escape){g("list"),z(0);return}if(dA.return&&TA){if(wA==="custom")g("add-url");else if(wA==="deepseek"||wA==="anthropic"||wA==="tako"||wA==="xiaomi")g("add-model"),z(0);else v();return}if(dA.backspace||dA.delete){WA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)WA((RA)=>RA+LA);return}if(E==="add-url"){if(dA.escape){g("list"),z(0);return}if(dA.return){g("add-model"),z(0);return}if(dA.backspace||dA.delete){kA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)kA((RA)=>RA+LA);return}if(E==="add-model"){let RA=O6(wA);if(dA.escape){g("list"),z(0);return}if(RA){if(dA.upArrow){z((xA)=>xA>0?xA-1:RA.length-1);return}if(dA.downArrow){z((xA)=>xA<RA.length-1?xA+1:0);return}if(dA.return){GB(RA[n]),setTimeout(()=>v(),0);return}}else{if(dA.return){let xA=$A.trim();if(xA&&$C.some((HB)=>HB.id===xA))v();else g("add-ctx");return}if(dA.backspace||dA.delete){GB((xA)=>xA.slice(0,-1));return}if(LA&&!dA.ctrl)GB((xA)=>xA+LA)}return}if(E==="add-ctx"){if(dA.escape){g("list"),z(0);return}if(dA.return){v();return}if(dA.backspace||dA.delete){CB((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl&&/^[0-9]$/.test(LA))CB((RA)=>RA+LA);return}},[E,n,_,DA,NA,dB.length,cA,j,AA,lA,wA,TA,KA,$A,nA,Q,x,BB,v,l,AB])),E==="scanning"||E==="logging-in"){let LA=E==="logging-in"?I2[MA==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},dA=E==="scanning"?AB?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":AB?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:EQ.jsxDEV(PA,{borderStyle:"round",borderColor:LA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[EQ.jsxDEV(f,{color:LA.color,bold:!0,children:[LA.icon," ",dA]},void 0,!0,void 0,this),E==="logging-in"&&EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5B8C\u6210\u540E\u5C06\u81EA\u52A8\u8FD4\u56DE":"Will return automatically when done"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}if(E==="add-key"||E==="add-url"||E==="add-model"||E==="add-ctx")return EQ.jsxDEV(fY,{screen:E,addType:wA,addKey:TA,addUrl:KA,addModel:$A,addCtx:nA,rowIdx:n,zh:AB},void 0,!1,void 0,this);if(E==="add-type")return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:EQ.jsxDEV(f,{bold:!0,children:["\u2795 ",AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,gap:0,children:HN.map((LA,dA)=>{let RA=I2[LA]||I2.custom,xA=n===dA,HB=AB?qg[LA]?.zh:qg[LA]?.en,eA=LA==="claude-subscription"||LA==="codex-subscription";return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"round",borderColor:xA?RA.color:"gray",paddingX:2,paddingY:0,children:EQ.jsxDEV(PA,{gap:1,children:[EQ.jsxDEV(f,{color:RA.color,bold:!0,children:RA.icon},void 0,!1,void 0,this),EQ.jsxDEV(f,{bold:xA,color:xA?RA.color:void 0,children:HB},void 0,!1,void 0,this),eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},LA,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(E==="detail"&&AA)return EQ.jsxDEV(xY,{provider:AA,defaultId:J,detailActions:lA,detailIdx:_,zh:AB},void 0,!1,void 0,this);return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[EQ.jsxDEV(f,{bold:!0,children:["\u26A1 ",AB?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),ZA&&EQ.jsxDEV(f,{color:"green",children:[" \u2713 ",ZA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[EQ.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),dB.map((LA,dA)=>{let RA=uM[LA.id]||{icon:"\u25AA",color:"white"},xA=dA===k;return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"single",borderColor:xA?RA.color:"gray",paddingX:2,children:EQ.jsxDEV(f,{color:xA?RA.color:void 0,bold:xA,dimColor:!xA,children:[RA.icon," ",LA.name]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)}),EQ.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:sA,paddingX:1,paddingY:1,children:[DA.length===0&&EQ.jsxDEV(PA,{paddingX:2,paddingY:1,justifyContent:"center",children:EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u6682\u65E0\u517C\u5BB9\u7684\u670D\u52A1\u5546\uFF0C\u8BF7\u6DFB\u52A0":"No compatible providers yet"},void 0,!1,void 0,this)},void 0,!1,void 0,this),DA.map((LA,dA)=>EQ.jsxDEV(bY,{provider:LA,focused:n===dA,bound:LA.id===uA,isDefault:LA.id===J,zh:AB},LA.id,!1,void 0,this))]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:AB?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"versions",offset:2,icon:"\uD83D\uDCE6",label:AB?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"},{id:"back",offset:3,icon:"\u2190",label:AB?"\u8FD4\u56DE":"Back"}].map((LA)=>{let dA=n===DA.length+LA.offset;return EQ.jsxDEV(PA,{borderStyle:dA?"bold":"round",borderColor:dA?"cyan":"gray",paddingX:2,children:EQ.jsxDEV(f,{bold:dA,color:dA?"cyan":void 0,dimColor:!dA,children:[LA.icon," ",LA.label]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var CF=SB(pQ(),1);K0();B0();async function dY(){try{let Q=await Vw();if(!Q)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let g=await(await fetch(`${SC}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q})})).json(),N=await(await fetch(`${SC}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q,period:"daily"})})).json();if(!g.success)return{success:!1,error:g.error||g.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let J=(N.data||[]).map((R)=>({model:R.model,requests:R.requests,cost:R.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:g.data?.usage?.total?.requests||0,totalCost:g.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(g.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:J}}}catch(Q){return{success:!1,error:Q instanceof Error?Q.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function iY(Q){return Q.toLocaleString("en-US")}var yC=SB(sI(),1);function cY({onExit:Q}){let[E,g]=CF.useState(null),[F,N]=CF.useState(!0),[J,R]=CF.useState(10),Y=CF.useCallback(async()=>{N(!0);let k=await dY();if(k.success&&k.data)g(k.data);N(!1)},[]);CF.useEffect(()=>{Y()},[Y]),CF.useEffect(()=>{let k=setInterval(()=>{R((i)=>{if(i<=1)return Y(),10;return i-1})},1000);return()=>clearInterval(k)},[Y]),I0((k,i)=>{if(k==="q"||i.escape)Q()});let O=V0()==="zh";return yC.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[yC.jsxDEV(f,{bold:!0,children:tB("stats.title")},void 0,!1,void 0,this),F&&!E?yC.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):E?yC.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[yC.jsxDEV(f,{children:tB("stats.totalRequests",{count:iY(E.totalRequests)})},void 0,!1,void 0,this),yC.jsxDEV(f,{children:tB("stats.totalCost",{cost:E.totalCost})},void 0,!1,void 0,this),yC.jsxDEV(f,{children:tB("stats.todayCost",{cost:E.todayCost})},void 0,!1,void 0,this),E.modelStats.length>0&&yC.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[yC.jsxDEV(f,{bold:!0,dimColor:!0,children:O?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),E.modelStats.map((k,i)=>yC.jsxDEV(f,{dimColor:!0,children:[i===E.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",k.model.padEnd(25)," ",String(k.requests).padStart(5)," ",k.cost]},k.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):yC.jsxDEV(f,{color:"red",children:O?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),yC.jsxDEV(PA,{marginTop:1,children:yC.jsxDEV(f,{dimColor:!0,children:O?`${J}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${J}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var R8=SB(pQ(),1);K0();B0();K0();Q2();G8();function lk(Q){return Q.startsWith("cr_")&&Q.length>10}async function ak(Q){try{let g=await(await fetch(`${SC}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q})})).json();if(g.success&&g.data?.id)return{valid:!0,apiId:g.data.id};return{valid:!1,error:g.error||tB("auth.validationFailed")}}catch(E){return{valid:!1,error:E instanceof Error?E.message:tB("auth.networkError")}}}async function lY(Q){if(!lk(Q))return E0("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:tB("auth.invalidFormat")};let E=await ak(Q);if(!E.valid)return E0("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:E.error};return await yw({apiKey:Q,apiId:E.apiId}),await ok(Q,E.apiId),E0("api_key_validated",{success:!0}),EF(),RD(),{success:!0}}async function ok(Q,E){let F=(await JD()).find((N)=>N.type==="tako");if(F)await P1(F.id,{apiKey:Q,apiId:E});else await T1({name:"Tako \u5B98\u65B9",type:"tako",apiKey:Q,baseUrl:SC,apiId:E,supportedClients:tC("tako"),builtin:!0})}var $g=SB(sI(),1);function aY({isReconfigure:Q,onDone:E}){let[g,F]=R8.useState(""),[N,J]=R8.useState("idle"),[R,Y]=R8.useState(""),{stdin:O,setRawMode:k}=B4();R8.useEffect(()=>{if(!O)return;k(!0);let _=(b)=>{let j=b.toString();if(j.length>1&&!j.startsWith("\x1B"))F((c)=>c+j.replace(/[\r\n]/g,""))};return O.on("data",_),()=>{O.off("data",_)}},[O,k]);let i=R8.useCallback(async()=>{if(!g||N==="validating")return;J("validating");let _=await lY(g);if(_.success)J("success"),EF(),RD(),setTimeout(()=>E(!0),500);else J("error"),Y(_.error||"Validation failed")},[g,N,E]);I0((_,b)=>{if(b.escape){E(!1);return}if(b.return){i();return}if(b.backspace||b.delete){F((j)=>j.slice(0,-1)),J("idle");return}if(_&&!b.ctrl&&_.length===1)F((j)=>j+_),J("idle")});let n=g.length<=6?g:`${g.slice(0,3)}${"\u2022".repeat(Math.min(g.length-6,20))}${g.slice(-3)}`,z=V0()==="zh";return $g.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[$g.jsxDEV(f,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",Q?tB("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:[$g.jsxDEV(f,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),$g.jsxDEV(f,{children:n},void 0,!1,void 0,this),N==="idle"&&$g.jsxDEV(f,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N==="validating"&&$g.jsxDEV(f,{color:"yellow",children:["\u23F3 ",tB("prompts.validating")]},void 0,!0,void 0,this),N==="success"&&$g.jsxDEV(f,{color:"green",children:["\u2713 ",tB("prompts.keyConfigured")]},void 0,!0,void 0,this),N==="error"&&$g.jsxDEV(f,{color:"red",children:["\u2717 ",R]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:$g.jsxDEV(f,{dimColor:!0,children:["Enter ",z?"\u63D0\u4EA4":"submit"," Esc ",z?"\u53D6\u6D88":"cancel"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var oY=SB(pQ(),1);K0();var gF=SB(sI(),1),UN=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function nY({onDone:Q}){let[E,g]=oY.useState(UN.findIndex((F)=>F.value===V0()));return I0((F,N)=>{if(N.upArrow)g((J)=>J>0?J-1:UN.length-1);if(N.downArrow)g((J)=>J<UN.length-1?J+1:0);if(N.return)QM(UN[E].value),Q();if(N.escape)Q()}),gF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[gF.jsxDEV(f,{bold:!0,children:["\uD83C\uDF10 ",tB("menu.changeLanguage")]},void 0,!0,void 0,this),UN.map((F,N)=>gF.jsxDEV(PA,{gap:1,marginTop:N===0?1:0,children:[gF.jsxDEV(f,{color:"cyan",bold:N===E,children:N===E?"\u25B8":" "},void 0,!1,void 0,this),gF.jsxDEV(f,{bold:N===E,children:F.label},void 0,!1,void 0,this),F.value===V0()&&gF.jsxDEV(f,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},F.value,!0,void 0,this)),gF.jsxDEV(PA,{marginTop:1,children:gF.jsxDEV(f,{dimColor:!0,children:"Enter select Esc back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var j9=SB(pQ(),1);B0();B0();K0();var KE=SB(sI(),1);import{join as nk}from"path";var rY=nk(W0,".key-prompt.json");async function sk(){try{return await Bun.file(rY).json()}catch{return{}}}async function sY(Q){await Bun.write(rY,JSON.stringify(Q))}async function tY(){if(await M7())return!1;let Q=await sk();if(Q.never)return!1;let E=new Date().toISOString().slice(0,10);if(Q.dismissed===E)return!1;return!0}async function eY(Q){if(Q==="never")await sY({never:!0});else{let E=new Date().toISOString().slice(0,10);await sY({dismissed:E})}}var _9=[{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 AZ({onDone:Q}){let[E,g]=j9.useState(0),F=V0()==="zh";return I0(j9.useCallback((N,J)=>{if(J.upArrow){g((R)=>R>0?R-1:_9.length-1);return}if(J.downArrow){g((R)=>R<_9.length-1?R+1:0);return}if(J.escape){Q("skip");return}if(J.return){Q(_9[E].id);return}},[E,Q])),KE.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[KE.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[KE.jsxDEV(PA,{gap:1,children:[KE.jsxDEV(f,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:!0,children:F?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[KE.jsxDEV(f,{dimColor:!0,children:F?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access."},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:_9.map((N,J)=>{let R=J===E;return KE.jsxDEV(PA,{paddingLeft:1,gap:1,children:[KE.jsxDEV(f,{color:R?N.color||"white":void 0,bold:R,children:R?"\u25B8":" "},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:R,color:R?N.color||"white":void 0,children:F?N.label.zh:N.label.en},void 0,!1,void 0,this),R&&KE.jsxDEV(f,{dimColor:!0,children:F?N.hint.zh:N.hint.en},void 0,!1,void 0,this)]},N.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u9009\u62E9":"select"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var VC=SB(pQ(),1);import{join as rk}from"path";B0();async function h9(Q){let g=`${await kg()}/${encodeURIComponent(Q).replace("%40","@")}`,F=await fetch(g,{signal:AbortSignal.timeout(1e4)});if(!F.ok)throw Error(`registry http ${F.status}`);let N=await F.json(),J=Object.keys(N.versions??{});if(!J.length)throw Error("no versions found");let R=N.time??{},Y=J.map((O)=>({version:O,publishedAt:R[O],isCurrent:!1}));return Y.sort((O,k)=>{let i=O.publishedAt?Date.parse(O.publishedAt):0;return(k.publishedAt?Date.parse(k.publishedAt):0)-i}),Y}async function b9(Q,E){let g=await import("fs/promises"),F=F8(Q.id);await g.mkdir(F,{recursive:!0});let N=rk(F,"package.json");if(!await Bun.file(N).exists())await Bun.write(N,JSON.stringify({name:`tako-${Q.id}-host`,version:"0.0.0",private:!0},null,2));let R=await kg(),Y=Bun.spawn([p0,"add",`${Q.package}@${E}`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:R}});if(await Y.exited,Y.exitCode!==0){let k=await new Response(Y.stderr).text();throw Error(`bun add ${Q.package}@${E} failed: ${k.slice(0,500).trim()}`)}let O=await oQ();await yw({installedClients:{...O.installedClients,[Q.id]:{version:E,installedAt:new Date().toISOString()}}})}async function f9(Q){return(await oQ()).installedClients[Q.id]?.version??null}K0();var DI=SB(sI(),1),qM=12,BZ={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}};function QZ({onDone:Q}){let E=J1(),g=V0()==="zh",[F,N]=VC.useState(0),[J,R]=VC.useState(0),[Y,O]=VC.useState(0),[k,i]=VC.useState({}),[n,z]=VC.useState(null),[_,b]=VC.useState(""),j=E[F],c=VC.useCallback(async(WA)=>{i((kA)=>({...kA,[WA]:{loading:!0,versions:[],current:null}}));let KA=E.find((kA)=>kA.id===WA);if(!KA)return;try{let[kA,$A]=await Promise.all([h9(KA.package),f9(KA)]),GB=kA.map((nA)=>({...nA,isCurrent:nA.version===$A}));i((nA)=>({...nA,[WA]:{loading:!1,versions:GB,current:$A}}))}catch(kA){i(($A)=>({...$A,[WA]:{loading:!1,error:kA.message,versions:[],current:null}}))}},[E]);VC.useEffect(()=>{if(!j)return;if(!k[j.id])c(j.id)},[F,j?.id]),VC.useEffect(()=>{R(0),O(0)},[F]),VC.useEffect(()=>{if(!_)return;let WA=setTimeout(()=>b(""),3000);return()=>clearTimeout(WA)},[_]);let ZA=j?k[j.id]:void 0,SA=ZA?.versions??[],wA=VC.useCallback(async(WA)=>{if(!j||n)return;z(WA);try{await b9(j,WA),b(g?`\u2713 \u5DF2\u5207\u6362\u5230 ${WA}`:`\u2713 Switched to ${WA}`),await c(j.id)}catch(KA){b(g?`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${KA.message}`:`\u2717 Install failed: ${KA.message}`)}finally{z(null)}},[j,n,c,g]);I0((WA,KA)=>{if(n)return;if(KA.escape||WA==="q"){Q();return}if(KA.leftArrow){N(($A)=>$A>0?$A-1:E.length-1);return}if(KA.rightArrow){N(($A)=>$A<E.length-1?$A+1:0);return}if(WA==="r"){if(j)c(j.id);return}if(!SA.length)return;let kA=SA.length-1;if(KA.upArrow){R(($A)=>{let GB=Math.max(0,$A-1);if(GB<Y)O(GB);return GB});return}if(KA.downArrow){R(($A)=>{let GB=Math.min(kA,$A+1);if(GB>=Y+qM)O(GB-qM+1);return GB});return}if(KA.return){let $A=SA[J];if($A&&!$A.isCurrent)wA($A.version)}});let mA=BZ[j?.id]?.color||"white",TA=SA.slice(Y,Y+qM);return DI.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[DI.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,children:[DI.jsxDEV(f,{bold:!0,children:["\uD83D\uDCE6 ",g?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"]},void 0,!0,void 0,this),_&&DI.jsxDEV(f,{color:_.startsWith("\u2713")?"green":"red",children:[" ",_]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:E.map((WA,KA)=>{let kA=BZ[WA.id]||{icon:"\u25AA",color:"white"},$A=KA===F;return DI.jsxDEV(PA,{borderStyle:$A?"bold":"single",borderColor:$A?kA.color:"gray",paddingX:2,children:DI.jsxDEV(f,{bold:$A,color:$A?kA.color:void 0,dimColor:!$A,children:[kA.icon," ",WA.name]},void 0,!0,void 0,this)},WA.id,!1,void 0,this)})},void 0,!1,void 0,this),DI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:mA,paddingX:2,paddingY:1,children:!ZA||ZA.loading?DI.jsxDEV(f,{dimColor:!0,children:g?"\u52A0\u8F7D\u4E2D...":"Loading..."},void 0,!1,void 0,this):ZA.error?DI.jsxDEV(f,{color:"red",children:[g?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: ",ZA.error]},void 0,!0,void 0,this):SA.length===0?DI.jsxDEV(f,{dimColor:!0,children:g?"\u6682\u65E0\u7248\u672C":"No versions"},void 0,!1,void 0,this):DI.jsxDEV(PA,{flexDirection:"column",children:[DI.jsxDEV(f,{dimColor:!0,children:[g?`\u5171 ${SA.length} \u4E2A\u7248\u672C\uFF0C\u5F53\u524D\u5B89\u88C5\uFF1A`:`${SA.length} versions, current: `,DI.jsxDEV(f,{color:mA,children:ZA.current??(g?"\u672A\u5B89\u88C5":"not installed")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:TA.map((WA,KA)=>{let $A=Y+KA===J,GB=WA.publishedAt?WA.publishedAt.slice(0,10):"",nA=WA.isCurrent?g?" \u2605 \u5F53\u524D":" \u2605 current":"",CB=n===WA.version,AB=$A?mA:WA.isCurrent?"green":void 0;return DI.jsxDEV(PA,{paddingLeft:1,children:DI.jsxDEV(f,{color:AB,bold:$A,dimColor:!$A&&!WA.isCurrent,children:[$A?"\u25B6 ":" ",WA.version.padEnd(16),GB.padEnd(14),nA,CB?g?" \u23F3 \u5B89\u88C5\u4E2D...":" \u23F3 installing...":""]},void 0,!0,void 0,this)},WA.version,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DI.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u9009\u62E9":"select"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5B89\u88C5":"install"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var yg=SB(sI(),1);function tk({onLaunch:Q,onExit:E,initialView:g="launcher"}){let[F,N]=Vg.useState(g),[J,R]=Vg.useState([]),Y=Vg.useRef(null),O=Vg.useRef(!1);Vg.useEffect(()=>{if(O.current||g!=="launcher")return;O.current=!0,tY().then((b)=>{if(b)N("key-guide")})},[g]);let k=Vg.useCallback((b)=>{if(R((j)=>[...j.slice(-4),b]),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},[]);Vg.useEffect(()=>{let b=0;return h7({info:(j)=>k({text:j,type:"info"}),warn:(j)=>k({text:j,type:"warn"}),error:(j)=>k({text:j,type:"error"}),success:(j)=>k({text:j,type:"success"}),spin:(j)=>{let c=++b;return k({id:c,text:j,type:"spin"}),{stop:(ZA)=>{if(R((SA)=>{let wA=SA.filter((mA)=>mA.id!==c);if(ZA)wA.push({text:ZA,type:"success"});return wA.slice(-5)}),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},update:(ZA)=>{if(R((SA)=>SA.map((wA)=>wA.id===c?{...wA,text:ZA}:wA)),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)}}}}),()=>$5()},[k]);let i=Vg.useCallback(()=>N("launcher"),[]),n={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},z={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},_=(()=>{switch(F){case"launcher":return yg.jsxDEV(hY,{onResult:(b)=>{switch(b.type){case"launch":Q(b);break;case"providers":N("providers");break;case"stats":N("stats");break;case"config":N("config");break;case"language":N("language");break;case"exit":E();break}}},void 0,!1,void 0,this);case"providers":return yg.jsxDEV(pY,{onDone:(b)=>{if(b==="client-versions")N("client-versions");else i()}},void 0,!1,void 0,this);case"client-versions":return yg.jsxDEV(QZ,{onDone:()=>N("providers")},void 0,!1,void 0,this);case"stats":return yg.jsxDEV(cY,{onExit:i},void 0,!1,void 0,this);case"config":return yg.jsxDEV(aY,{isReconfigure:!0,onDone:i},void 0,!1,void 0,this);case"language":return yg.jsxDEV(nY,{onDone:i},void 0,!1,void 0,this);case"key-guide":return yg.jsxDEV(AZ,{onDone:(b)=>{if(b==="configure")N("config");else eY(b).then(()=>N("launcher"))}},void 0,!1,void 0,this)}})();return yg.jsxDEV(PA,{flexDirection:"column",children:[J.length>0&&yg.jsxDEV(PA,{flexDirection:"column",paddingX:2,children:J.map((b,j)=>yg.jsxDEV(f,{color:n[b.type],dimColor:b.type==="info",children:[z[b.type]," ",b.text]},j,!0,void 0,this))},void 0,!1,void 0,this),_]},void 0,!0,void 0,this)}function OM(){return new Promise((Q)=>{let E=null;function g(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause(),process.stdin.unref()}catch{}}function F(J){E?.clear(),E?.unmount(),E=null,g(),$5(),Q(J)}function N(){E?.clear(),E?.unmount(),E=null,g(),$5(),Q(null)}E=k1(yg.jsxDEV(tk,{onLaunch:F,onExit:N},void 0,!1,void 0,this))})}B0();Q2();var DF=SB(sI(),1),ek={info:"cyan",success:"green",warning:"yellow",danger:"red"};function A$(Q){return ek[Q??"info"]??"cyan"}function B$({ann:Q,onClose:E}){I0((N,J)=>{if(J.return||J.escape||N==="q")E()});let g=A$(Q.type),F=Q.content.split(/\r?\n/);return DF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:g,paddingX:2,paddingY:1,children:[DF.jsxDEV(PA,{children:DF.jsxDEV(f,{color:g,bold:!0,children:["\uD83D\uDCE3 ",Q.title]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:F.map((N,J)=>DF.jsxDEV(f,{children:N||" "},J,!1,void 0,this))},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,children:DF.jsxDEV(f,{dimColor:!0,children:Q.popup_once?"\u6309 Enter / Esc / q \u5173\u95ED\uFF0C\u672C\u6761\u53EA\u63D0\u793A\u4E00\u6B21":"\u6309 Enter / Esc / q \u5173\u95ED"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function IZ(Q){return new Promise((E)=>{let g=null;g=k1(DF.jsxDEV(B$,{ann:Q,onClose:()=>{g?.clear(),g?.unmount(),g=null,E()}},void 0,!1,void 0,this))})}var Q$=2000,EZ=100;function E2(Q){if(Z5||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${Q}
|
|
625
|
-
`)}function CZ(Q){if(!Q)return null;if(Q.type!=="tako"&&Q.type!=="custom")return null;if(!Q.baseUrl||!Q.apiKey)return null;return{baseUrl:Q.baseUrl.replace(/\/+$/,""),apiKey:Q.apiKey}}async function I$(Q,E){let g=`${Q}/v1/announcements/popup`;try{let F=await fetch(g,{headers:{Authorization:`Bearer ${E}`},signal:AbortSignal.timeout(Q$)});if(!F.ok)return E2(`HTTP ${F.status} from ${g}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let J=(await F.json())?.announcement;if(!J)return E2("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof J.id!=="string"||typeof J.title!=="string")return E2(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(J)}`),null;return E2(`\u62C9\u5230\u516C\u544A id=${J.id} title=${J.title} popup_once=${!!J.popup_once}`),{id:J.id,title:J.title,content:J.content??"",type:J.type,popup_once:!!J.popup_once}}catch(F){return E2(`fetch \u5931\u8D25\uFF1A${F instanceof Error?F.message:String(F)}`),null}}async function E$(Q){return((await oQ()).seenAnnouncementIds??[]).includes(Q)}async function C$(Q){let E=await oQ(),g=E.seenAnnouncementIds??[];if(g.includes(Q))return;let F=[...g,Q];if(F.length>EZ)F.splice(0,F.length-EZ);E.seenAnnouncementIds=F,await kC(E)}async function g$(){let Q=CZ(await Ag());if(Q)return Q;for(let E of await JD()){let g=CZ(E);if(g)return g}return null}async function gZ(){let Q=await g$();if(!Q){E2("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}E2(`\u67E5\u8BE2\u516C\u544A\uFF1A${Q.baseUrl}/v1/announcements/popup`);let E=await I$(Q.baseUrl,Q.apiKey);if(!E)return;if(E.popup_once&&await E$(E.id)){E2(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${E.id}`);return}if(E2(`\u5F39\u7A97\uFF1A${E.id}`),await IZ(E),E.popup_once)await C$(E.id),E2(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${E.id}`)}async function DZ(){await DM(),await FM(),await KY(),await Promise.race([$L(await JD()),new Promise((Q)=>setTimeout(Q,3000))]),await gZ();while(!0){let Q=await OM();if(!Q)break;let E=Z6(Q.clientId);if(!E)continue;E0("menu_action",{action:"launch",client_id:Q.clientId});let g=await m9(Q.clientId);if(!g){RQ.warn(tB("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let F=await P9(E,{projectPath:Q.projectPath,args:Q.args,selectedOptionIds:Q.selectedOptionIds,providerContext:g});if(!F.success)RQ.error(F.error||tB("cli.launchFailed"))}}B0();K0();import{join as C2}from"path";var zM="tako-cli",LN="0.2.
|
|
624
|
+
`)}var m1=null;function wk(Q){return Q.startsWith(D8)}async function Gk(){try{if(!await Bun.file(p0).exists())return null;let E=Bun.spawn([p0,"--version"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode!==0)return null;return(await new Response(E.stdout).text()).trim()}catch{return null}}async function DY(){return await Gk()!==null}async function Nk(){if(process.platform==="win32")return!0;try{let E=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await E.exited,E.exitCode===0)return!0}catch{}RQ.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let Q=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let E of Q)try{let g=Bun.spawn(["bash","-c",`sudo ${E} 2>/dev/null || ${E}`],{stdout:"pipe",stderr:"pipe"});if(await g.exited,g.exitCode===0)return!0}catch{}return!1}async function Hk(Q){let E=await import("fs/promises"),{join:g}=await import("path"),F=process.platform==="win32",N=F?"bun.exe":"bun",J=await nK();RQ.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${J}`);let R=await fetch(J);if(!R.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${R.status}`);let Y=g(Q,"bun-download.zip");await Bun.write(Y,R);let O=g(Q,"bin");if(await E.mkdir(O,{recursive:!0}),F){let i=`Expand-Archive -Path "${Y}" -DestinationPath "${Q}" -Force`,n=Bun.spawn(["powershell","-Command",i],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let i=Bun.spawn(["unzip","-oq",Y,"-d",Q],{stdout:"pipe",stderr:"pipe"});if(await i.exited,i.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let k=await E.readdir(Q);for(let i of k){let n=g(Q,i);if((await E.stat(n)).isDirectory()&&i.startsWith("bun-")){let _=g(n,N);try{if(await E.access(_),await E.rename(_,g(O,N)),!F)await E.chmod(g(O,N),493);await E.rm(n,{recursive:!0,force:!0});break}catch{}}}return await E.rm(Y,{force:!0}),!0}async function Uk(){let Q=jw();if(!await Nk())return RQ.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await sK(),Q.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(D8,{recursive:!0}),await I4()==="cn")await Hk(D8);else if(process.platform==="win32"){let F=`$env:BUN_INSTALL="${D8}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let F=`BUN_INSTALL="${D8}" ${oK()}`;if(await Bun.spawn(["bash","-c",F],{stdout:"inherit",stderr:"inherit"}).exited!==0)return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return m1=p0,Q.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),RQ.info(`\u5B89\u88C5\u4F4D\u7F6E: ${D8}`),!0}catch(E){return Q.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Lk(){if(await DY())return m1=p0,!0;return RQ.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),RQ.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await Uk()}async function wN(){if(m1){if(!wk(m1))m1=p0;return m1}if(await DY())return m1=p0,p0;return p0}async function MM(Q){try{let E=await kg(),g=await fetch(`${E}/${Q}/latest`);if(!g.ok)return null;return(await g.json()).version}catch{return null}}async function Jk(Q){return(await oQ()).installedClients[Q.id]?.version||null}async function FY(Q){let E=F8(Q.id),g=C0(E,"package.json");try{return await Bun.file(g).exists()}catch{return!1}}async function wY(Q){let E=await Jk(Q);if(!E)return!0;let g=await MM(Q.package);if(!g)return!1;return E!==g}function GY(Q){let{platform:E,arch:g}=process,F=`${E}-${g}`;for(let[N,J]of Object.entries(Q))if(N.endsWith(F))return{pkg:N,version:J};return null}async function NY(Q,E,g,F){let N=C0(E,"node_modules",Q.package,"package.json");try{let J=Bun.file(N);if(!await J.exists())return;let Y=(await J.json()).optionalDependencies;if(!Y||typeof Y!=="object")return;let O=GY(Y);if(!O)return;let i=process.platform==="win32"?`${Q.command}.exe`:Q.command,n=C0(E,"node_modules",O.pkg,i),z=Bun.file(n);if(await z.exists()&&z.size>1024)return;RQ.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${O.pkg}...`);for(let _ of[O.version,"latest"]){let b=Bun.spawn([g,"add",`${O.pkg}@${_}`],{cwd:E,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:F}});if(await b.exited,b.exitCode===0)break;if(_==="latest"){let j=await new Response(b.stderr).text();RQ.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${j.slice(0,200)}`)}}}catch(J){RQ.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${J instanceof Error?J.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function UM(Q,E){let g=await import("fs/promises"),F=C0(E,"node_modules",Q.package,"package.json");try{let N=Bun.file(F);if(!await N.exists())return!1;let J=await N.json(),R=J.optionalDependencies;if(!R)return!0;let Y=GY(R);if(!Y)return RQ.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let O=J.bin,k=typeof O==="string"?O:O?.[Q.command];if(!k)return!1;let i=C0(E,"node_modules",Q.package,k),n=process.platform==="win32",z=n?`${Q.command}.exe`:Q.command,_=C0(E,"node_modules",Y.pkg,z),b=Bun.file(_);if(await b.exists()&&b.size>1024){if(await Bun.write(i,b),!n)await g.chmod(i,493);return!0}let j=C0(E,"node_modules",Q.package,"install.cjs");if(await Bun.file(j).exists()){RQ.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let ZA=await wN(),SA=Bun.spawn([ZA,j],{cwd:C0(E,"node_modules",Q.package),stdout:"pipe",stderr:"pipe"});if(await SA.exited,SA.exitCode!==0){let mA=await new Response(SA.stderr).text();RQ.warn(`postinstall \u5931\u8D25: ${mA.slice(0,200)}`)}let wA=Bun.file(i);if(await wA.exists()&&wA.size>1024){if(!n)await g.chmod(i,493);return!0}}RQ.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await kg();for(let ZA of[Y.version,"latest"])try{let SA=await fetch(`${c}/${Y.pkg}/${ZA}`);if(!SA.ok)continue;let mA=(await SA.json()).dist?.tarball;if(!mA)continue;let TA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(TA,{recursive:!0});let WA=C0(TA,"pkg.tgz"),KA=Bun.spawn(["curl","-fsSL","-o",WA,mA],{stdout:"pipe",stderr:"pipe"});if(await KA.exited,KA.exitCode!==0){let AB=await new Response(KA.stderr).text();RQ.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${AB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let kA=Bun.file(WA).size;if(kA<1024){RQ.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${kA} bytes, url: ${mA.slice(0,100)})`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{});continue}let $A=Bun.spawn(["tar","xzf",WA,"-C",TA,`package/${z}`],{stdout:"pipe",stderr:"pipe"});await $A.exited;let GB=C0(TA,"package",z),nA=Bun.file(GB);if(await nA.exists()&&nA.size>1024){if(await Bun.write(i,nA),!n)await g.chmod(i,493);return await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{}),!0}let CB=await new Response($A.stderr).text();RQ.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${kA} bytes, exit=${$A.exitCode}): ${CB.slice(0,200)}`),await g.rm(TA,{recursive:!0,force:!0}).catch(()=>{})}catch(SA){RQ.warn(`\u4E0B\u8F7D\u5931\u8D25: ${SA instanceof Error?SA.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(c!=="https://registry.npmjs.org")try{let ZA=`https://registry.npmjs.org/${Y.pkg}/-/${Y.pkg.split("/").pop()}-${Y.version}.tgz`;RQ.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let SA=C0(W0,".tmp-extract-"+Date.now());await g.mkdir(SA,{recursive:!0});let wA=C0(SA,"pkg.tgz"),mA=Bun.spawn(["curl","-fsSL","-o",wA,ZA],{stdout:"pipe",stderr:"pipe"});if(await mA.exited,mA.exitCode===0&&Bun.file(wA).size>1024){await Bun.spawn(["tar","xzf",wA,"-C",SA,`package/${z}`],{stdout:"pipe",stderr:"pipe"}).exited;let WA=Bun.file(C0(SA,"package",z));if(await WA.exists()&&WA.size>1024){if(await Bun.write(i,WA),!n)await g.chmod(i,493);return await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{}),!0}}await g.rm(SA,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(N){return RQ.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function LM(Q,E=!1){let g=jw(),F=F8(Q.id);try{if(!await Lk())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let N=await FY(Q),J=E||await wY(Q);if(N&&!J)return{success:!0};let R=N?"\u66F4\u65B0":"\u5B89\u88C5",Y=`\u6B63\u5728${R} ${Q.name}`;g.start(Y);let O=await import("fs/promises");await O.mkdir(F,{recursive:!0});let k=C0(F,"package.json");if(!await Bun.file(k).exists())await Bun.write(k,JSON.stringify({name:`tako-${Q.id}`,private:!0,dependencies:{}},null,2));let n=await wN(),z=await kg();if(N){let SA=C0(F,"bun.lock");try{await O.unlink(SA)}catch{}}let _=Bun.spawn([n,"add",`${Q.package}@latest`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:z}}),b=await T9(_,Y,(SA)=>g.update(SA));if(await _.exited!==0)return g.stop(`${R} ${Q.name} \u5931\u8D25`),{success:!1,error:b||"\u672A\u77E5\u9519\u8BEF"};await NY(Q,F,n,z),await UM(Q,F);let c=await MM(Q.package),ZA=(await oQ()).installedClients[Q.id]?.version;if(c){let SA=await oQ();if(SA.installedClients[Q.id]={version:c,installedAt:new Date().toISOString()},await yw(SA),N&&ZA)E0("client_updated",{client_id:Q.id,from_version:ZA,to_version:c});else E0("client_installed",{client_id:Q.id,client_version:c})}return g.stop(`${Q.name} ${R}\u5B8C\u6210`),{success:!0}}catch(N){return g.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}}}async function NM(Q){try{let E=Bun.file(Q);if(!await E.exists())return!0;if(E.size<100)return!0;let F=new Uint8Array(await E.slice(0,4).arrayBuffer());if(F[0]===127&&F[1]===69&&F[2]===76&&F[3]===70)return!1;if(F[0]===254||F[0]===207||F[0]===206||F[0]===202)return!1;if(F[0]===77&&F[1]===90)return!1;return!0}catch{return!0}}async function HM(Q){if(Q.runtime!=="native")return;let E=F8(Q.id),g=C0(E,"node_modules",Q.package,"package.json");try{let F=Bun.file(g);if(!await F.exists())return;let J=(await F.json()).bin;if(!J)return;let R=typeof J==="string"?J:J[Q.command];if(!R)return;let Y=C0(E,"node_modules",Q.package,R);if(!await NM(Y))return;RQ.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let O=await wN(),k=await kg();if(await NY(Q,E,O,k),!await UM(Q,E)||await NM(Y)){if(RQ.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(E,{recursive:!0,force:!0}),(await LM(Q)).success)if(await UM(Q,E),await NM(Y))RQ.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else RQ.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else RQ.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function HY(Q){if(!await FY(Q)){let F=await LM(Q);if(F.success)await HM(Q);return F}if(await HM(Q),await wY(Q)){let F=await MM(Q.package),N=(await oQ()).installedClients[Q.id]?.version||"\u672A\u77E5",J=F?`${N} \u2192 ${F}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(RQ.info(`${Q.name} \u53D1\u73B0\u66F4\u65B0: ${J}`),await Mk(Q.id))return RQ.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await O9({message:`\u662F\u5426\u66F4\u65B0 ${Q.name}\uFF1F`,defaultValue:!1}))return await Rk(Q.id),RQ.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let Y=await LM(Q,!0);if(Y.success)await HM(Q);return Y}return{success:!0}}var JM=C0(W0,".update-dismissed.json");async function Mk(Q){try{let E=Bun.file(JM);if(!await E.exists())return!1;let F=(await E.json())[Q];if(!F)return!1;let N=new Date().toISOString().slice(0,10);return F===N}catch{return!1}}async function Rk(Q){try{let E={},g=Bun.file(JM);if(await g.exists())try{E=await g.json()}catch{}E[Q]=new Date().toISOString().slice(0,10),await Bun.write(JM,JSON.stringify(E))}catch{}}Q2();B0();B0();import{homedir as Wk}from"os";var Kk=50,RM=3;async function WM(Q){try{return(await(await import("fs/promises")).stat(Q)).isDirectory()}catch{return!1}}async function UY(Q,E,g){let F=await oQ(),N=F.recentProjects||[],J=new Date().toISOString(),R=N.findIndex((O)=>O.path===Q);if(R>=0){let O=N[R],k=O.clientUsage||{},i=k[E]||{count:0,lastAt:J};N[R]={...O,launchCount:O.launchCount+1,lastLaunchedAt:J,lastClientId:E,clientUsage:{...k,[E]:{count:i.count+1,lastAt:J,lastSelectedOptionIds:g??i.lastSelectedOptionIds}}}}else N.push({path:Q,launchCount:1,lastLaunchedAt:J,lastClientId:E,clientUsage:{[E]:{count:1,lastAt:J,lastSelectedOptionIds:g}}});let Y=N.sort((O,k)=>new Date(k.lastLaunchedAt).getTime()-new Date(O.lastLaunchedAt).getTime()).slice(0,Kk);F.recentProjects=Y,await kC(F)}async function LY(Q){let g=(await oQ()).recentProjects||[],F=process.cwd(),J=g.find((Y)=>Y.path===F)?.clientUsage?.[Q]?.lastSelectedOptionIds;if(J)return J;return g.filter((Y)=>Y.path!==F&&Y.clientUsage?.[Q]?.lastSelectedOptionIds).sort((Y,O)=>{let k=new Date(Y.clientUsage[Q].lastAt).getTime();return new Date(O.clientUsage[Q].lastAt).getTime()-k})[0]?.clientUsage?.[Q]?.lastSelectedOptionIds??[]}function Yk(Q,E){let g=Q.clientUsage?.[E];if(g)return new Date(g.lastAt).getTime();if(Q.lastClientId===E)return new Date(Q.lastLaunchedAt).getTime();return 0}async function JY(Q,E=RM,g=!0){let N=(await oQ()).recentProjects||[],J=process.cwd(),Y=N.filter((k)=>{if(g&&k.path===J)return!1;return k.clientUsage?.[Q]||k.lastClientId===Q}).map((k)=>({...k,lastUsedTime:Yk(k,Q)})).sort((k,i)=>i.lastUsedTime-k.lastUsedTime),O=[];for(let{lastUsedTime:k,...i}of Y){if(O.length>=E)break;if(await WM(i.path))O.push(i)}return O}async function MY(){let E=(await oQ()).recentProjects||[],g=process.cwd();return E.find((N)=>N.path===g)?.lastClientId||null}function KM(Q,E=25){let g=Wk(),F=Q.startsWith(g)?"~"+Q.slice(g.length):Q;if(F.length>E){let J=F.split("/").pop()||"";if(J.length>E-4)F="..."+J.slice(-E+3);else F=`.../${J}`}return F}function RY(Q){let{t:E}=(K0(),YZ(VK)),g=Date.now(),F=new Date(Q).getTime(),N=g-F,J=Math.floor(N/60000),R=Math.floor(N/3600000),Y=Math.floor(N/86400000),O=Math.floor(Y/7),k=Math.floor(Y/30);if(J<1)return E("time.justNow");if(J<60)return E("time.minutesAgo",{n:J});if(R<24)return E("time.hoursAgo",{n:R});if(Y===1)return E("time.yesterday");if(Y<7)return E("time.daysAgo",{n:Y});if(Y<30)return E("time.weeksAgo",{n:O});return E("time.monthsAgo",{n:k})}K0();async function WY(Q,E){try{let g=E?.projectPath||process.cwd(),F=E?.providerContext;if(!F)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let N=await R7(Q);if(!N)N=W7(Q);if(!await Bun.file(N).exists())return{success:!1,error:`\u627E\u4E0D\u5230\u53EF\u6267\u884C\u6587\u4EF6: ${N}`};let R=Q.getEnvVars(F),Y={...process.env,...R},O;if(Q.runtime==="native")O=[N];else O=[await wN(),N];if(E?.args&&E.args.length>0)O=[...O,...E.args];let k=process.platform==="win32";if(!k)try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1)}catch{}if(process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}if(k){let{spawnSync:i}=await import("child_process");i(O[0],O.slice(1),{env:Y,stdio:"inherit",cwd:g,windowsHide:!1})}else try{Bun.spawnSync(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g})}catch{await Bun.spawn(O,{env:Y,stdio:["inherit","inherit","inherit"],cwd:g}).exited}return{success:!0}}catch(g){return{success:!1,error:g instanceof Error?g.message:"\u542F\u52A8\u5931\u8D25"}}}async function Zk(Q,E){if(E?.providerContext)return E.providerContext;let g=await Ag();if(g){let F=await V1(Q.id);if(F.some((J)=>J.id===g.id))return MD(g);if(F.length>0)return MD(F[0])}return null}async function P9(Q,E){try{let g=E?.projectPath||process.cwd();if(E?.projectPath){if(!await WM(E.projectPath))return{success:!1,error:tB("launcher.directoryNotFound",{path:E.projectPath})}}let F=await HY(Q);if(!F.success)return F;let N=await Zk(Q,E);if(!N)return{success:!1,error:tB("launcher.apiKeyNotConfigured")};if(Q.setupConfigFiles)await Q.setupConfigFiles(N,E?.selectedOptionIds);await UY(g,Q.id,E?.selectedOptionIds);let R=(await oQ()).installedClients[Q.id]?.version;return E0("client_launched",{client_id:Q.id,client_version:R,project_hash:IY(g),is_recent_project:!!E?.projectPath}),RQ.info(tB("launcher.starting",{client:Q.name})),await WY(Q,{...E,providerContext:N})}catch(g){return{success:!1,error:g instanceof Error?g.message:"Launch failed"}}}K0();Q2();Q2();async function m9(Q){let E=await V1(Q);if(E.length===0)return null;let g=await IF(Q);if(g)return MD(g);if(E.length===1)return MD(E[0]);let F=await Ag();if(F&&E.some((N)=>N.id===F.id))return MD(F);return MD(E[0])}async function KY(){let Q=await gN();if(await DN(Q)>0){for(let g of Q)E0("provider_added",{provider_type:g.type,method:"auto_detect"});EF(),RD()}}var Vg=SB(pQ(),1);var HE=SB(pQ(),1);Q2();K0();v9();var BI=SB(sI(),1),hk=[["\u2191\u2193","\u9009\u62E9","select"],["Enter","\u786E\u8BA4","confirm"],["Esc","\u53D6\u6D88","cancel"]];function TY({zh:Q}){return BI.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:2,children:hk.flatMap((E,g)=>{return[g>0?BI.jsxDEV(f,{dimColor:!0,children:"\u2502"},`s${g}`,!1,void 0,this):null,BI.jsxDEV(f,{dimColor:!0,bold:!0,children:E[0]},`k${g}`,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:Q?E[1]:E[2]},`l${g}`,!1,void 0,this)]})},void 0,!1,void 0,this)}function PY({provs:Q,provIdx:E,pickerIdx:g,color:F,zh:N}){return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:F,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:F,children:["\u25A3 ",N?"\u9009\u62E9\u670D\u52A1\u5546":"Pick Provider"]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[Q.length===0&&BI.jsxDEV(PA,{paddingLeft:1,children:BI.jsxDEV(f,{dimColor:!0,children:N?"\u6682\u65E0\u517C\u5BB9\u6B64\u5DE5\u5177\u7684\u670D\u52A1\u5546":"No compatible providers"},void 0,!1,void 0,this)},void 0,!1,void 0,this),Q.map((J,R)=>{let Y=g===R,O=R===E;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:Y?F:void 0,bold:Y,children:Y?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:Y,color:Y?F:void 0,children:[" ",J.name]},void 0,!0,void 0,this),J.email&&BI.jsxDEV(f,{dimColor:!0,children:[" (",J.email,")"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},J.id,!0,void 0,this)}),(()=>{let J=g===Q.length;return BI.jsxDEV(PA,{paddingLeft:1,marginTop:1,children:[BI.jsxDEV(f,{color:J?F:void 0,bold:J,children:J?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:J,color:J?F:void 0,children:[" ","\u2699 ",N?"\u7BA1\u7406\u670D\u52A1\u5546\u2026":"Manage providers\u2026"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})()]},void 0,!0,void 0,this),BI.jsxDEV(TY,{zh:N},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function mY({group:Q,options:E,enabled:g,pickerIdx:F,color:N,zh:J}){let R=E.filter((k)=>k.group===Q),Y=Q==="model"?J?"\u9009\u62E9\u6A21\u578B":"Pick Model":Q,O=!R.some((k)=>g.has(k.id));return BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:N,paddingX:2,paddingY:1,children:[BI.jsxDEV(f,{bold:!0,color:N,children:["\u25A3 ",Y]},void 0,!0,void 0,this),BI.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[(()=>{let k=F===0;return BI.jsxDEV(PA,{paddingLeft:1,children:[BI.jsxDEV(f,{color:k?N:void 0,bold:k,children:k?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:k,color:k?N:void 0,children:[" ",J?"\u9ED8\u8BA4\uFF08\u4E0D\u6307\u5B9A\uFF09":"Default (none)"]},void 0,!0,void 0,this),O&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})(),R.map((k,i)=>{let n=F===i+1,z=g.has(k.id);return BI.jsxDEV(PA,{paddingLeft:1,flexDirection:"column",children:[BI.jsxDEV(PA,{children:[BI.jsxDEV(f,{color:n?N:void 0,bold:n,children:n?"\u25B8":" "},void 0,!1,void 0,this),BI.jsxDEV(f,{bold:n,color:n?N:void 0,children:[" ",k.label[J?"zh":"en"]||k.label.en]},void 0,!0,void 0,this),z&&BI.jsxDEV(f,{color:"green",children:" \u2605"},void 0,!1,void 0,this),BI.jsxDEV(f,{dimColor:!0,children:[" ",k.flag]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),n&&BI.jsxDEV(PA,{paddingLeft:3,children:BI.jsxDEV(f,{dimColor:!0,children:k.description[J?"zh":"en"]||k.description.en},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},k.id,!0,void 0,this)})]},void 0,!0,void 0,this),BI.jsxDEV(TY,{zh:J},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var QB=SB(sI(),1),bk="0.2.61",vY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},_Y={icon:"\u25AA",color:"white"};async function fk(){let Q=J1(),E=await MY(),g=await Ag(),F=V0()==="zh",N=[...Q].sort((Y,O)=>{if(Y.id===E)return-1;if(O.id===E)return 1;return 0}),J=[];for(let Y of N){let O=await JY(Y.id,RM,!0),k=process.cwd(),i=[{label:F?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:KM(k,45),path:k},...O.map((wA)=>({label:KM(wA.path,45),hint:RY(wA.lastLaunchedAt),path:wA.path}))],n=await V1(Y.id),_=await IF(Y.id)||n.find((wA)=>wA.id===g?.id)||n[0],b=_?n.findIndex((wA)=>wA.id===_.id):0,j=ML(Y,_),c=await LY(Y.id),ZA=j.map((wA)=>wA.id),SA=c.filter((wA)=>ZA.includes(wA));J.push({client:Y,projects:i,providers:n,activeProvIdx:Math.max(b,0),launchOptions:j,lastSelectedOptionIds:SA})}let R=J.some((Y)=>Y.providers.length>0);return{clients:J,defaultIdx:0,hasProviders:R}}function jY({color:Q}){let{stdout:E}=AM(),g=Math.max((E.columns||80)-6,20);return QB.jsxDEV(PA,{marginY:0,children:QB.jsxDEV(f,{dimColor:!0,color:Q,children:"\u2500".repeat(g)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function xk(Q){return Q>30?"green":Q>10?"yellow":"red"}function pk({provider:Q,zh:E}){if(!Q)return QB.jsxDEV(f,{color:"yellow",children:["\u26A0 ",E?"\u672A\u7ED1\u5B9A":"no provider"]},void 0,!0,void 0,this);let g={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:"cyan",icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:"yellow",icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:"blue",icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:"yellow",icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:"magenta",icon:"\u25C7"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:"gray",icon:"\u25AA"}},F=g[Q.type]??g.custom,N=E?F.zh:F.en,J=Q.email??"";if(J.length>0){let[R,Y]=J.split("@");if(R&&Y)J=R.length>14?`${R.slice(0,12)}\u2026@${Y}`:J}return QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{color:F.color,children:[F.icon," ",N]},void 0,!0,void 0,this),J&&QB.jsxDEV(f,{dimColor:!0,children:[" \xB7 ",J]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function dk({quota:Q,zh:E}){if(Q.status==="unsupported")return null;if(Q.status==="error")return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",Q.hint||(E?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")]},void 0,!0,void 0,this);if(Q.provider==="tako")if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit));else{let Y=Q.daily??Q.primary??Q.secondary;if(!Y)return null;let O=Y.costUsed??0;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",E?"\u4ECA\u65E5":"Today",": ",QB.jsxDEV(f,{color:"green",children:["$",O.toFixed(2)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}let g=(R,Y,O)=>{if(R&&R>=1440)return`${Math.round(R/1440)}d`;if(R)return`${Math.round(R/60)}h`;return O?`${O}d`:`${Y}h`},F=(R)=>Math.max(0,Math.min(100,100-Math.round(R))),N=[],J=(R,Y,O)=>{if(N.length)N.push(QB.jsxDEV(f,{dimColor:!0,children:" \xB7 "},`sep-${R}`,!1,void 0,this));let k=F(O);N.push(QB.jsxDEV(HE.default.Fragment,{children:[`${Y} \u5269 `,QB.jsxDEV(f,{color:xk(k),children:[k,"%"]},void 0,!0,void 0,this)]},R,!0,void 0,this))};if(Q.primary)J("primary",g(Q.primary.windowMinutes,5),Q.primary.usedPct);if(Q.secondary)J("secondary",g(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct);if(Q.modelLimits?.opus)J("opus","opus",Q.modelLimits.opus.usedPct);if(!N.length)return null;return QB.jsxDEV(f,{dimColor:!0,children:["\uD83D\uDCB0 ",N]},void 0,!0,void 0,this)}function ik(Q,E){let g=[],F=new Set;for(let N of Q)if(!N.group)g.push({kind:"flag",opt:N});else if(!F.has(N.group)){F.add(N.group);let J=N.group==="model"?E?"\u6A21\u578B":"Model":N.group;g.push({kind:"group",group:N.group,title:J})}return g.push({kind:"provider",title:E?"\u670D\u52A1\u5546":"Provider"}),g}function XM(Q,E,g){return Q.find((F)=>F.group===g&&E.has(F.id))}function ck({clients:Q,defaultIdx:E,hasProviders:g,onResult:F}){let[N,J]=HE.useState(E),[R,Y]=HE.useState("projects"),[O,k]=HE.useState(0),[i,n]=HE.useState(0),[z,_]=HE.useState(()=>Q[E]?.activeProvIdx||0),[b,j]=HE.useState(()=>new Set(Q[E]?.lastSelectedOptionIds??[])),[c,ZA]=HE.useState(""),[SA,wA]=HE.useState(null),[mA,TA]=HE.useState(!1),[WA,KA]=HE.useState(0),kA=Q[N],$A=kA.projects,GB=kA.providers,nA=vY[kA.client.id]||_Y,CB=V0()==="zh",AB=GB[z],dB=HE.default.useMemo(()=>ML(kA.client,AB),[kA.client.id,AB?.id,AB?.type]),cA=HE.default.useMemo(()=>ik(dB,CB),[dB,CB]),sA=AB?.name||(CB?"\u672A\u914D\u7F6E":"N/A"),[DA,uA]=HE.useState(null);return HE.useEffect(()=>{if(!AB){uA(null);return}let NA=!1;return NN(AB).then((AA)=>{if(!NA)uA(AA)}),()=>{NA=!0}},[AB?.id,AB?.type]),HE.useEffect(()=>{k(0),n(0),Y("projects"),_(Q[N]?.activeProvIdx||0),wA(null),TA(!1),j(new Set(Q[N]?.lastSelectedOptionIds??[]))},[N]),HE.useEffect(()=>{let NA=new Set(dB.map((lA)=>lA.id)),AA=new Set(dB.filter((lA)=>lA.group==="model").map((lA)=>lA.id)),vA=AB?.model?`model-${AB.model}`:void 0;j((lA)=>{let l=new Set,v=!1,x=!1;for(let MA of lA)if(NA.has(MA)){if(l.add(MA),AA.has(MA))x=!0}else v=!0;if(!x&&vA&&AA.has(vA))l.add(vA),v=!0;return v?l:lA})},[dB,AB?.model]),I0(HE.useCallback((NA,AA)=>{if(mA){let lA=GB.length+1;if(AA.escape||NA==="q"){TA(!1);return}if(AA.upArrow){KA((l)=>l>0?l-1:lA-1);return}if(AA.downArrow){KA((l)=>l<lA-1?l+1:0);return}if(AA.return)if(WA<GB.length){let l=GB[WA];_(WA),(async()=>{if(await CN(kA.client.id,l.id),kA.client.setupConfigFiles)try{await kA.client.setupConfigFiles(MD(l))}catch(v){ZA(CB?"\u26A0 \u914D\u7F6E\u540C\u6B65\u5931\u8D25":"\u26A0 Config sync failed"),setTimeout(()=>ZA(""),2500);return}kA.activeProvIdx=WA,ZA(CB?`\u2713 \u5DF2\u7ED1\u5B9A ${l.name}`:`\u2713 Bound ${l.name}`),setTimeout(()=>ZA(""),2000)})(),TA(!1)}else TA(!1),F({type:"providers"});return}if(SA){let lA=dB.filter((v)=>v.group===SA),l=lA.length+1;if(AA.escape||NA==="q"){wA(null);return}if(AA.upArrow){KA((v)=>v>0?v-1:l-1);return}if(AA.downArrow){KA((v)=>v<l-1?v+1:0);return}if(AA.return){if(WA===0)j((v)=>{let x=new Set(v);for(let MA of lA)x.delete(MA.id);return x});else{let v=lA[WA-1];j((x)=>{let MA=new Set(x);for(let bA of lA)MA.delete(bA.id);return MA.add(v.id),MA})}wA(null)}return}if(NA==="q"){F({type:"exit"});return}if(NA==="s"){F({type:"stats"});return}if(NA==="c"){F({type:"config"});return}if(NA==="l"){F({type:"language"});return}if(NA==="p"){F({type:"providers"});return}let vA=parseInt(NA);if(vA>=1&&vA<=Q.length){J(vA-1);return}if(AA.leftArrow){J((lA)=>lA>0?lA-1:Q.length-1);return}if(AA.rightArrow){J((lA)=>lA<Q.length-1?lA+1:0);return}if(R==="projects"){if(AA.downArrow){if(O<$A.length-1)k((lA)=>lA+1);else if(cA.length>0)Y("options"),n(0);return}if(AA.upArrow){if(O>0)k((lA)=>lA-1);return}}if(R==="options"){if(AA.downArrow){if(i<cA.length-1)n((lA)=>lA+1);return}if(AA.upArrow){if(i>0)n((lA)=>lA-1);else Y("projects"),k($A.length-1);return}}if(NA===" "&&R==="options"&&cA.length>0){let lA=cA[i];if(lA.kind==="flag")j((l)=>{let v=new Set(l);if(v.has(lA.opt.id))v.delete(lA.opt.id);else v.add(lA.opt.id);return v});else if(lA.kind==="group"){let l=XM(dB,b,lA.group),v=dB.filter((MA)=>MA.group===lA.group),x=l?v.findIndex((MA)=>MA.id===l.id)+1:0;KA(Math.max(0,x)),wA(lA.group)}else KA(z),TA(!0);return}if(AA.return){if(R==="options"&&cA.length>0){let x=cA[i];if(x.kind==="group"){let MA=XM(dB,b,x.group),bA=dB.filter((LA)=>LA.group===x.group),BB=MA?bA.findIndex((LA)=>LA.id===MA.id)+1:0;KA(Math.max(0,BB)),wA(x.group);return}if(x.kind==="provider"){KA(z),TA(!0);return}}let lA=$A[O],l=[],v=[];for(let x of dB)if(b.has(x.id))l.push(...x.args),v.push(x.id);F({type:"launch",clientId:kA.client.id,projectPath:lA.path,args:l,selectedOptionIds:v})}},[R,N,O,i,z,GB,AB,kA,$A,dB,cA,b,Q,F,CB,SA,mA,WA])),QB.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[QB.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:nA.color,paddingX:2,paddingY:1,children:[QB.jsxDEV(PA,{justifyContent:"space-between",children:[QB.jsxDEV(PA,{gap:1,children:[QB.jsxDEV(f,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:["v",bk]},void 0,!0,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(pk,{provider:AB,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{children:[c&&QB.jsxDEV(f,{color:"green",children:c},void 0,!1,void 0,this),!c&&DA&&QB.jsxDEV(dk,{quota:DA,zh:CB},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!g&&QB.jsxDEV(PA,{marginTop:1,justifyContent:"center",gap:1,children:[QB.jsxDEV(f,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u672A\u914D\u7F6E\u670D\u52A1\u5546 \u2014 \u6309 c \u6DFB\u52A0 API Key \u6216 p \u7BA1\u7406\u670D\u52A1\u5546":"No provider configured \u2014 press c for API Key or p to manage"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[QB.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),Q.map((NA,AA)=>{let vA=vY[NA.client.id]||_Y;return AA===N?QB.jsxDEV(PA,{borderStyle:"bold",borderColor:vA.color,paddingX:1,children:QB.jsxDEV(f,{color:vA.color,bold:!0,children:[vA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this):QB.jsxDEV(PA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:QB.jsxDEV(f,{dimColor:!0,children:[vA.icon," ",NA.client.name]},void 0,!0,void 0,this)},NA.client.id,!1,void 0,this)}),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(jY,{color:nA.color},void 0,!1,void 0,this),mA?QB.jsxDEV(PY,{provs:GB,provIdx:z,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):SA?QB.jsxDEV(mY,{group:SA,options:dB,enabled:b,pickerIdx:WA,color:nA.color,zh:CB},void 0,!1,void 0,this):QB.jsxDEV(QB.Fragment,{children:[$A.map((NA,AA)=>{let vA=R==="projects"&&AA===O;return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:NA.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA.hint?QB.jsxDEV(f,{dimColor:!0,children:NA.hint},void 0,!1,void 0,this):null]},AA,!0,void 0,this)}),cA.length>0&&QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(jY,{color:nA.color},void 0,!1,void 0,this),cA.map((NA,AA)=>{let vA=R==="options"&&AA===i;if(NA.kind==="flag"){let lA=NA.opt,l=b.has(lA.id);return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{color:l?nA.color:void 0,bold:l,children:l?"\u25C9":"\u25CB"},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:lA.label[CB?"zh":"en"]||lA.label.en},void 0,!1,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:lA.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:lA.description[CB?"zh":"en"]||lA.description.en},void 0,!1,void 0,this)]},lA.id,!0,void 0,this)}if(NA.kind==="group"){let lA=XM(dB,b,NA.group),l=lA?lA.shortLabel:CB?"\u9ED8\u8BA4":"Default";return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:lA?nA.color:void 0,children:l},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u8FDB\u5165\u9009\u62E9":"Enter to pick"},void 0,!1,void 0,this)]},`group-${NA.group}`,!0,void 0,this)}return QB.jsxDEV(PA,{paddingLeft:1,children:[QB.jsxDEV(PA,{flexGrow:1,gap:1,children:[QB.jsxDEV(f,{color:vA?nA.color:void 0,bold:vA,children:vA?"\u25B8":" "},void 0,!1,void 0,this),QB.jsxDEV(f,{bold:vA,color:vA?nA.color:void 0,children:[NA.title,":"]},void 0,!0,void 0,this),QB.jsxDEV(f,{color:AB?nA.color:"yellow",children:AB?sA:CB?"\u672A\u914D\u7F6E":"Not set"},void 0,!1,void 0,this),QB.jsxDEV(f,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),vA&&QB.jsxDEV(f,{dimColor:!0,children:CB?"Enter \u5207\u6362\u6216\u7BA1\u7406":"Enter to switch / manage"},void 0,!1,void 0,this)]},"provider-entry",!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),QB.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:R==="options"?QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):QB.jsxDEV(QB.Fragment,{children:[QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),QB.jsxDEV(f,{dimColor:!0,children:CB?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function hY({onResult:Q}){let[E,g]=HE.useState(null);if(HE.useEffect(()=>{fk().then(g)},[]),!E)return QB.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return QB.jsxDEV(ck,{clients:E.clients,defaultIdx:E.defaultIdx,hasProviders:E.hasProviders,onResult:Q},void 0,!1,void 0,this)}var fI=SB(pQ(),1);K0();Q2();G8();G8();G8();var UB=SB(sI(),1),I2={"claude-subscription":{icon:"\u2726",color:"yellow"},"codex-subscription":{icon:"\u25C8",color:"blue"},tako:{icon:"\uD83D\uDC19",color:"cyan"},anthropic:{icon:"\u25B3",color:"magenta"},deepseek:{icon:"\uD83D\uDD2E",color:"blue"},xiaomi:{icon:"\uD83D\uDFE0",color:"yellow"},custom:{icon:"\u2699",color:"gray"}},uM={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},HN=["claude-subscription","codex-subscription","tako","anthropic","deepseek","xiaomi","custom"];function bY({provider:Q,focused:E,bound:g,isDefault:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return UB.jsxDEV(PA,{flexDirection:"column",borderStyle:E?"bold":"round",borderColor:E?J.color:g?J.color:"gray",paddingX:2,paddingY:0,children:[UB.jsxDEV(PA,{justifyContent:"space-between",children:[UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:E||g,color:E?J.color:void 0,children:Q.name},void 0,!1,void 0,this),F&&UB.jsxDEV(f,{color:"yellow",children:["\u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),Q.builtin&&UB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{gap:1,children:g?UB.jsxDEV(f,{color:J.color,bold:!0,children:["\u25CF ",N?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):UB.jsxDEV(f,{dimColor:!0,children:["\u25CB ",N?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:R},void 0,!1,void 0,this),Q.model&&UB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.model&&UB.jsxDEV(f,{dimColor:!0,children:Q.model},void 0,!1,void 0,this),Q.email&&UB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.email&&UB.jsxDEV(f,{dimColor:!0,children:Q.email},void 0,!1,void 0,this),Q.apiKey&&UB.jsxDEV(f,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),Q.apiKey&&UB.jsxDEV(f,{dimColor:!0,children:["Key: ",Q.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),E&&UB.jsxDEV(PA,{marginTop:0,children:UB.jsxDEV(f,{color:J.color,dimColor:!0,children:["Enter ",N?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",N?"\u8BE6\u60C5/\u64CD\u4F5C":"detail/actions"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function fY({screen:Q,addType:E,addKey:g,addUrl:F,addModel:N,addCtx:J,rowIdx:R,zh:Y}){let O=I2[E]||I2.custom,k=Y?qg[E]?.zh:qg[E]?.en,i=Q==="add-model"?O6(E):void 0;if(i)return UB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[UB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,marginBottom:1,children:[UB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",Y?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),i.map((j,c)=>{let ZA=R===c;return UB.jsxDEV(PA,{paddingLeft:1,gap:1,children:[UB.jsxDEV(f,{color:ZA?O.color:void 0,bold:ZA,children:ZA?"\u25B8":" "},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:ZA,color:ZA?O.color:void 0,children:j},void 0,!1,void 0,this)]},j,!0,void 0,this)})]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u9009\u62E9":"select"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let n=Q==="add-key"?Y?"\u8F93\u5165 API Key":"Enter API Key":Q==="add-url"?"Base URL":Q==="add-ctx"?Y?"\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08tokens\uFF0C\u53EF\u7559\u7A7A\uFF09":"Context Window (tokens, optional)":Y?"\u6A21\u578B":"Model",z=Q==="add-key"?g:Q==="add-url"?F:Q==="add-ctx"?J??"":N,_=Q==="add-url"?"https://your-proxy.com":Q==="add-ctx"?Y?"\u5982 200000\uFF1Bcatalog \u6CA1\u6709\u8BE5\u6A21\u578B\u65F6\u5EFA\u8BAE\u586B\u5199":"e.g. 200000; recommended if model is unknown to catalog":Q==="add-model"?vw(E)||(Y?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,b=Q==="add-url"?Y?"\u4E0B\u4E00\u6B65":"next":Q==="add-ctx"?Y?"\u4FDD\u5B58":"save":Q==="add-model"?Y?"\u4FDD\u5B58":"save":Y?"\u786E\u8BA4":"confirm";return UB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[UB.jsxDEV(PA,{borderStyle:"bold",borderColor:O.color,paddingX:3,paddingY:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,marginBottom:1,children:[UB.jsxDEV(f,{color:O.color,bold:!0,children:O.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:!0,color:O.color,children:k},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:["\u2014 ",n]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q==="add-key"&&E==="xiaomi"&&UB.jsxDEV(f,{dimColor:!0,children:[" ",Y?"sk- \u5F00\u5934\u8D70\u6309\u91CF\u4ED8\u8D39\uFF0Ctp- \u5F00\u5934\u8D70 Token Plan \u8BA2\u9605\uFF08\u81EA\u52A8\u8BC6\u522B\uFF09":"sk- = pay-as-you-go, tp- = Token Plan subscription (auto-detected)"]},void 0,!0,void 0,this),_&&UB.jsxDEV(f,{dimColor:!0,children:[" ",Y?"\u9ED8\u8BA4":"Default",": ",_]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:_?1:0,children:[UB.jsxDEV(f,{color:O.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),UB.jsxDEV(f,{children:z||_||""},void 0,!1,void 0,this),UB.jsxDEV(f,{color:O.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:b},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:Y?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function xY({provider:Q,defaultId:E,detailActions:g,detailIdx:F,zh:N}){let J=I2[Q.type]||I2.custom,R=N?qg[Q.type]?.zh:qg[Q.type]?.en;return UB.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[UB.jsxDEV(PA,{borderStyle:"bold",borderColor:J.color,paddingX:3,paddingY:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{color:J.color,bold:!0,children:J.icon},void 0,!1,void 0,this),UB.jsxDEV(f,{bold:!0,color:J.color,children:Q.name},void 0,!1,void 0,this),Q.id===E&&UB.jsxDEV(f,{color:"yellow",children:[" \u2605 ",N?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:[N?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),UB.jsxDEV(f,{children:R},void 0,!1,void 0,this),Q.builtin&&UB.jsxDEV(f,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.model&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:[N?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),UB.jsxDEV(f,{children:Q.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.email&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),UB.jsxDEV(f,{children:Q.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q.apiKey&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),UB.jsxDEV(f,{children:[Q.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Q.baseUrl&&UB.jsxDEV(PA,{gap:1,children:[UB.jsxDEV(f,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),UB.jsxDEV(f,{children:Q.baseUrl},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),UB.jsxDEV(PA,{gap:1,marginTop:1,children:g.map((Y,O)=>{let k=Y==="default"?`\u2B50 ${N?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:Y==="rekey"?`\uD83D\uDD11 ${N?"\u4FEE\u6539 Key":"Change Key"}`:Y==="relogin"?`\uD83D\uDD04 ${N?"\u91CD\u65B0\u767B\u5F55":"Re-login"}`:Y==="delete"?`\uD83D\uDDD1\uFE0F ${N?"\u5220\u9664":"Delete"}`:`\u2190 ${N?"\u8FD4\u56DE":"Back"}`,i=O===F;return UB.jsxDEV(PA,{borderStyle:i?"bold":"round",borderColor:i?"cyan":"gray",paddingX:2,children:UB.jsxDEV(f,{bold:i,color:i?"cyan":void 0,dimColor:!i,children:k},void 0,!1,void 0,this)},Y,!1,void 0,this)})},void 0,!1,void 0,this),UB.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:N?"\u9009\u62E9":"select"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:N?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),UB.jsxDEV(f,{dimColor:!0,children:N?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var EQ=SB(sI(),1);function pY({onDone:Q}){let[E,g]=fI.useState("list"),[F,N]=fI.useState([]),[J,R]=fI.useState(),[Y,O]=fI.useState({}),[k,i]=fI.useState(0),[n,z]=fI.useState(0),[_,b]=fI.useState(0),[j,c]=fI.useState(""),[ZA,SA]=fI.useState(""),[wA,mA]=fI.useState("tako"),[TA,WA]=fI.useState(""),[KA,kA]=fI.useState(""),[$A,GB]=fI.useState(""),[nA,CB]=fI.useState(""),AB=V0()==="zh",dB=J1(),cA=dB[k],sA=uM[cA?.id]?.color||"white",DA=cA?F.filter((LA)=>_w(LA,cA.id)):[],uA=Y[cA?.id]||J,NA=DA.length+4,AA=F.find((LA)=>LA.id===j),vA=AA?.type==="claude-subscription"||AA?.type==="codex-subscription",lA=AA?[...AA.id!==J?["default"]:[],...vA?["relogin"]:[],...AA.builtin?["rekey"]:["delete"],"back"]:["back"],l=fI.useCallback(async()=>{let LA=await JD(),dA=await Ag();N(LA),R(dA?.id);let RA={};for(let xA of J1()){let HB=await IF(xA.id);RA[xA.id]=HB?.id}O(RA)},[]);fI.useEffect(()=>{l()},[l]),fI.useEffect(()=>{z(0)},[k]),fI.useEffect(()=>{if(ZA){let LA=setTimeout(()=>SA(""),3000);return()=>clearTimeout(LA)}},[ZA]);let v=fI.useCallback(async()=>{if(j&&F.find((eA)=>eA.id===j)?.builtin){await P1(j,{apiKey:TA}),SA(AB?"Key \u5DF2\u66F4\u65B0":"Key updated"),await l(),g("list"),z(0);return}let LA=qg[wA]?.[AB?"zh":"en"]||wA,dA=KA||PL(wA),RA=$A||vw(wA),xA=nA?parseInt(nA,10):NaN,HB=Number.isFinite(xA)&&xA>0?xA:void 0;await T1({name:LA,type:wA,apiKey:TA,baseUrl:dA,model:RA,modelContextWindow:HB,supportedClients:tC(wA)}),E0("provider_added",{provider_type:wA,method:"manual"}),EF(),RD(),SA(AB?"\u5DF2\u6DFB\u52A0":"Added"),CB(""),await l(),g("list"),z(0)},[wA,TA,KA,$A,nA,AB,l,j,F]),x=fI.useCallback(async()=>{g("scanning");let LA=await gN(),dA=await DN(LA);if(dA>0)EF(),RD();SA(AB?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${dA} \u4E2A`:`Scan done, ${dA} added`),await l(),g("list"),z(0)},[l,AB]),[MA,bA]=fI.useState("claude"),BB=fI.useCallback(async(LA)=>{bA(LA),g("logging-in");let dA=LA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];await Bun.spawn(dA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited;let{invalidateQuotaCache:xA}=await Promise.resolve().then(() => (v9(),VY));if(LA==="claude")try{let HB=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),eA=await new Response(HB.stdout).text();await HB.exited;let _B=JSON.parse(eA.trim());if(_B.loggedIn&&_B.authMethod==="claude.ai"){let a=_B.email||"",qA=_B.subscriptionType||"pro",aA=`Claude ${qA.charAt(0).toUpperCase()+qA.slice(1)}${a?` (${a})`:""}`,{readClaudeAuth:jB}=await Promise.resolve().then(() => (k9(),S9)),AQ=await jB(),CQ=AQ.credentials||AQ.oauthAccount?{credentials:AQ.credentials,oauthAccount:AQ.oauthAccount}:void 0,VQ=F.find((TI)=>TI.type==="claude-subscription"&&TI.email===a);if(!VQ)await T1({name:aA,type:"claude-subscription",email:a,subscriptionType:qA,supportedClients:tC("claude-subscription"),authData:CQ}),SA(AB?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else await P1(VQ.id,{authData:CQ}),xA(VQ.id,"claude-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let HB=await import("fs/promises"),{homedir:eA}=await import("os"),{join:_B}=await import("path"),a=JSON.parse(await HB.readFile(_B(eA(),".codex","auth.json"),"utf-8"));if(a.auth_mode==="chatgpt"&&a.tokens?.access_token){let qA="";try{qA=JSON.parse(atob(a.tokens.id_token.split(".")[1])).email||""}catch{}let aA=F.find((jB)=>jB.type==="codex-subscription"&&jB.email===qA);if(!aA)await T1({name:qA?`Codex Plus (${qA})`:"Codex Subscription",type:"codex-subscription",email:qA||void 0,supportedClients:tC("codex-subscription"),authData:a}),SA(AB?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await P1(aA.id,{authData:a}),xA(aA.id,"codex-subscription"),SA(AB?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else SA(AB?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{SA(AB?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await l(),g("list"),z(0)},[F,AB,l]);if(I0(fI.useCallback((LA,dA)=>{if(E==="list"){if(dA.escape||LA==="q"){Q();return}if(dA.leftArrow){i((xA)=>xA>0?xA-1:dB.length-1);return}if(dA.rightArrow){i((xA)=>xA<dB.length-1?xA+1:0);return}let RA=parseInt(LA);if(RA>=1&&RA<=dB.length){i(RA-1);return}if(dA.upArrow){z((xA)=>xA>0?xA-1:NA-1);return}if(dA.downArrow){z((xA)=>xA<NA-1?xA+1:0);return}if(dA.return){if(n<DA.length){let xA=DA[n];CN(cA.id,xA.id).then(()=>{Q()})}else if(n===DA.length)g("add-type"),z(0);else if(n===DA.length+1)x();else if(n===DA.length+2)Q("client-versions");else Q();return}if((LA==="d"||LA==="e")&&n<DA.length)c(DA[n].id),g("detail"),b(0);return}if(E==="detail"){if(dA.leftArrow){b((RA)=>RA>0?RA-1:lA.length-1);return}if(dA.rightArrow){b((RA)=>RA<lA.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=lA[_];if(RA==="back"){g("list"),z(0);return}if(RA==="default")gM(j).then(()=>{SA(AB?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),l(),g("list"),z(0)});if(RA==="delete")CM(j).then(()=>{SA(AB?"\u5DF2\u5220\u9664":"Deleted"),l(),g("list"),z(0)});if(RA==="rekey")mA(AA?.type||"tako"),WA(""),g("add-key"),z(0);if(RA==="relogin"){let xA=AA?.type==="codex-subscription"?"codex":"claude";g("list"),z(0),BB(xA)}}return}if(E==="add-type"){if(dA.upArrow){z((RA)=>RA>0?RA-1:HN.length-1);return}if(dA.downArrow){z((RA)=>RA<HN.length-1?RA+1:0);return}if(dA.escape){g("list"),z(0);return}if(dA.return){let RA=HN[n];if(mA(RA),RA==="claude-subscription"){BB("claude");return}if(RA==="codex-subscription"){BB("codex");return}WA(""),kA(""),GB(vw(RA)||""),g("add-key"),z(0)}return}if(E==="add-key"){if(dA.escape){g("list"),z(0);return}if(dA.return&&TA){if(wA==="custom")g("add-url");else if(wA==="deepseek"||wA==="anthropic"||wA==="tako"||wA==="xiaomi")g("add-model"),z(0);else v();return}if(dA.backspace||dA.delete){WA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)WA((RA)=>RA+LA);return}if(E==="add-url"){if(dA.escape){g("list"),z(0);return}if(dA.return){g("add-model"),z(0);return}if(dA.backspace||dA.delete){kA((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl)kA((RA)=>RA+LA);return}if(E==="add-model"){let RA=O6(wA);if(dA.escape){g("list"),z(0);return}if(RA){if(dA.upArrow){z((xA)=>xA>0?xA-1:RA.length-1);return}if(dA.downArrow){z((xA)=>xA<RA.length-1?xA+1:0);return}if(dA.return){GB(RA[n]),setTimeout(()=>v(),0);return}}else{if(dA.return){let xA=$A.trim();if(xA&&$C.some((HB)=>HB.id===xA))v();else g("add-ctx");return}if(dA.backspace||dA.delete){GB((xA)=>xA.slice(0,-1));return}if(LA&&!dA.ctrl)GB((xA)=>xA+LA)}return}if(E==="add-ctx"){if(dA.escape){g("list"),z(0);return}if(dA.return){v();return}if(dA.backspace||dA.delete){CB((RA)=>RA.slice(0,-1));return}if(LA&&!dA.ctrl&&/^[0-9]$/.test(LA))CB((RA)=>RA+LA);return}},[E,n,_,DA,NA,dB.length,cA,j,AA,lA,wA,TA,KA,$A,nA,Q,x,BB,v,l,AB])),E==="scanning"||E==="logging-in"){let LA=E==="logging-in"?I2[MA==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},dA=E==="scanning"?AB?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":AB?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:EQ.jsxDEV(PA,{borderStyle:"round",borderColor:LA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[EQ.jsxDEV(f,{color:LA.color,bold:!0,children:[LA.icon," ",dA]},void 0,!0,void 0,this),E==="logging-in"&&EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5B8C\u6210\u540E\u5C06\u81EA\u52A8\u8FD4\u56DE":"Will return automatically when done"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}if(E==="add-key"||E==="add-url"||E==="add-model"||E==="add-ctx")return EQ.jsxDEV(fY,{screen:E,addType:wA,addKey:TA,addUrl:KA,addModel:$A,addCtx:nA,rowIdx:n,zh:AB},void 0,!1,void 0,this);if(E==="add-type")return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:EQ.jsxDEV(f,{bold:!0,children:["\u2795 ",AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,gap:0,children:HN.map((LA,dA)=>{let RA=I2[LA]||I2.custom,xA=n===dA,HB=AB?qg[LA]?.zh:qg[LA]?.en,eA=LA==="claude-subscription"||LA==="codex-subscription";return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"round",borderColor:xA?RA.color:"gray",paddingX:2,paddingY:0,children:EQ.jsxDEV(PA,{gap:1,children:[EQ.jsxDEV(f,{color:RA.color,bold:!0,children:RA.icon},void 0,!1,void 0,this),EQ.jsxDEV(f,{bold:xA,color:xA?RA.color:void 0,children:HB},void 0,!1,void 0,this),eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!eA&&EQ.jsxDEV(f,{dimColor:!0,children:["(",AB?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},LA,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(E==="detail"&&AA)return EQ.jsxDEV(xY,{provider:AA,defaultId:J,detailActions:lA,detailIdx:_,zh:AB},void 0,!1,void 0,this);return EQ.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[EQ.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[EQ.jsxDEV(f,{bold:!0,children:["\u26A1 ",AB?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),ZA&&EQ.jsxDEV(f,{color:"green",children:[" \u2713 ",ZA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:[EQ.jsxDEV(f,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),dB.map((LA,dA)=>{let RA=uM[LA.id]||{icon:"\u25AA",color:"white"},xA=dA===k;return EQ.jsxDEV(PA,{borderStyle:xA?"bold":"single",borderColor:xA?RA.color:"gray",paddingX:2,children:EQ.jsxDEV(f,{color:xA?RA.color:void 0,bold:xA,dimColor:!xA,children:[RA.icon," ",LA.name]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)}),EQ.jsxDEV(f,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:sA,paddingX:1,paddingY:1,children:[DA.length===0&&EQ.jsxDEV(PA,{paddingX:2,paddingY:1,justifyContent:"center",children:EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u6682\u65E0\u517C\u5BB9\u7684\u670D\u52A1\u5546\uFF0C\u8BF7\u6DFB\u52A0":"No compatible providers yet"},void 0,!1,void 0,this)},void 0,!1,void 0,this),DA.map((LA,dA)=>EQ.jsxDEV(bY,{provider:LA,focused:n===dA,bound:LA.id===uA,isDefault:LA.id===J,zh:AB},LA.id,!1,void 0,this))]},void 0,!0,void 0,this),EQ.jsxDEV(PA,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:AB?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:AB?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"versions",offset:2,icon:"\uD83D\uDCE6",label:AB?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"},{id:"back",offset:3,icon:"\u2190",label:AB?"\u8FD4\u56DE":"Back"}].map((LA)=>{let dA=n===DA.length+LA.offset;return EQ.jsxDEV(PA,{borderStyle:dA?"bold":"round",borderColor:dA?"cyan":"gray",paddingX:2,children:EQ.jsxDEV(f,{bold:dA,color:dA?"cyan":void 0,dimColor:!dA,children:[LA.icon," ",LA.label]},void 0,!0,void 0,this)},LA.id,!1,void 0,this)})},void 0,!1,void 0,this),EQ.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u9009\u62E9":"select"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),EQ.jsxDEV(f,{dimColor:!0,children:AB?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var CF=SB(pQ(),1);K0();B0();async function dY(){try{let Q=await Vw();if(!Q)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let g=await(await fetch(`${SC}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q})})).json(),N=await(await fetch(`${SC}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:Q,period:"daily"})})).json();if(!g.success)return{success:!1,error:g.error||g.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let J=(N.data||[]).map((R)=>({model:R.model,requests:R.requests,cost:R.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:g.data?.usage?.total?.requests||0,totalCost:g.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(g.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:J}}}catch(Q){return{success:!1,error:Q instanceof Error?Q.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function iY(Q){return Q.toLocaleString("en-US")}var yC=SB(sI(),1);function cY({onExit:Q}){let[E,g]=CF.useState(null),[F,N]=CF.useState(!0),[J,R]=CF.useState(10),Y=CF.useCallback(async()=>{N(!0);let k=await dY();if(k.success&&k.data)g(k.data);N(!1)},[]);CF.useEffect(()=>{Y()},[Y]),CF.useEffect(()=>{let k=setInterval(()=>{R((i)=>{if(i<=1)return Y(),10;return i-1})},1000);return()=>clearInterval(k)},[Y]),I0((k,i)=>{if(k==="q"||i.escape)Q()});let O=V0()==="zh";return yC.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[yC.jsxDEV(f,{bold:!0,children:tB("stats.title")},void 0,!1,void 0,this),F&&!E?yC.jsxDEV(f,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):E?yC.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[yC.jsxDEV(f,{children:tB("stats.totalRequests",{count:iY(E.totalRequests)})},void 0,!1,void 0,this),yC.jsxDEV(f,{children:tB("stats.totalCost",{cost:E.totalCost})},void 0,!1,void 0,this),yC.jsxDEV(f,{children:tB("stats.todayCost",{cost:E.todayCost})},void 0,!1,void 0,this),E.modelStats.length>0&&yC.jsxDEV(PA,{flexDirection:"column",marginTop:1,children:[yC.jsxDEV(f,{bold:!0,dimColor:!0,children:O?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),E.modelStats.map((k,i)=>yC.jsxDEV(f,{dimColor:!0,children:[i===E.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",k.model.padEnd(25)," ",String(k.requests).padStart(5)," ",k.cost]},k.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):yC.jsxDEV(f,{color:"red",children:O?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),yC.jsxDEV(PA,{marginTop:1,children:yC.jsxDEV(f,{dimColor:!0,children:O?`${J}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${J}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var R8=SB(pQ(),1);K0();B0();K0();Q2();G8();function lk(Q){return Q.startsWith("cr_")&&Q.length>10}async function ak(Q){try{let g=await(await fetch(`${SC}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:Q})})).json();if(g.success&&g.data?.id)return{valid:!0,apiId:g.data.id};return{valid:!1,error:g.error||tB("auth.validationFailed")}}catch(E){return{valid:!1,error:E instanceof Error?E.message:tB("auth.networkError")}}}async function lY(Q){if(!lk(Q))return E0("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:tB("auth.invalidFormat")};let E=await ak(Q);if(!E.valid)return E0("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:E.error};return await yw({apiKey:Q,apiId:E.apiId}),await ok(Q,E.apiId),E0("api_key_validated",{success:!0}),EF(),RD(),{success:!0}}async function ok(Q,E){let F=(await JD()).find((N)=>N.type==="tako");if(F)await P1(F.id,{apiKey:Q,apiId:E});else await T1({name:"Tako \u5B98\u65B9",type:"tako",apiKey:Q,baseUrl:SC,apiId:E,supportedClients:tC("tako"),builtin:!0})}var $g=SB(sI(),1);function aY({isReconfigure:Q,onDone:E}){let[g,F]=R8.useState(""),[N,J]=R8.useState("idle"),[R,Y]=R8.useState(""),{stdin:O,setRawMode:k}=B4();R8.useEffect(()=>{if(!O)return;k(!0);let _=(b)=>{let j=b.toString();if(j.length>1&&!j.startsWith("\x1B"))F((c)=>c+j.replace(/[\r\n]/g,""))};return O.on("data",_),()=>{O.off("data",_)}},[O,k]);let i=R8.useCallback(async()=>{if(!g||N==="validating")return;J("validating");let _=await lY(g);if(_.success)J("success"),EF(),RD(),setTimeout(()=>E(!0),500);else J("error"),Y(_.error||"Validation failed")},[g,N,E]);I0((_,b)=>{if(b.escape){E(!1);return}if(b.return){i();return}if(b.backspace||b.delete){F((j)=>j.slice(0,-1)),J("idle");return}if(_&&!b.ctrl&&_.length===1)F((j)=>j+_),J("idle")});let n=g.length<=6?g:`${g.slice(0,3)}${"\u2022".repeat(Math.min(g.length-6,20))}${g.slice(-3)}`,z=V0()==="zh";return $g.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[$g.jsxDEV(f,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",Q?tB("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:[$g.jsxDEV(f,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),$g.jsxDEV(f,{children:n},void 0,!1,void 0,this),N==="idle"&&$g.jsxDEV(f,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N==="validating"&&$g.jsxDEV(f,{color:"yellow",children:["\u23F3 ",tB("prompts.validating")]},void 0,!0,void 0,this),N==="success"&&$g.jsxDEV(f,{color:"green",children:["\u2713 ",tB("prompts.keyConfigured")]},void 0,!0,void 0,this),N==="error"&&$g.jsxDEV(f,{color:"red",children:["\u2717 ",R]},void 0,!0,void 0,this),$g.jsxDEV(PA,{marginTop:1,children:$g.jsxDEV(f,{dimColor:!0,children:["Enter ",z?"\u63D0\u4EA4":"submit"," Esc ",z?"\u53D6\u6D88":"cancel"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var oY=SB(pQ(),1);K0();var gF=SB(sI(),1),UN=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function nY({onDone:Q}){let[E,g]=oY.useState(UN.findIndex((F)=>F.value===V0()));return I0((F,N)=>{if(N.upArrow)g((J)=>J>0?J-1:UN.length-1);if(N.downArrow)g((J)=>J<UN.length-1?J+1:0);if(N.return)QM(UN[E].value),Q();if(N.escape)Q()}),gF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[gF.jsxDEV(f,{bold:!0,children:["\uD83C\uDF10 ",tB("menu.changeLanguage")]},void 0,!0,void 0,this),UN.map((F,N)=>gF.jsxDEV(PA,{gap:1,marginTop:N===0?1:0,children:[gF.jsxDEV(f,{color:"cyan",bold:N===E,children:N===E?"\u25B8":" "},void 0,!1,void 0,this),gF.jsxDEV(f,{bold:N===E,children:F.label},void 0,!1,void 0,this),F.value===V0()&&gF.jsxDEV(f,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},F.value,!0,void 0,this)),gF.jsxDEV(PA,{marginTop:1,children:gF.jsxDEV(f,{dimColor:!0,children:"Enter select Esc back"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var j9=SB(pQ(),1);B0();B0();K0();var KE=SB(sI(),1);import{join as nk}from"path";var rY=nk(W0,".key-prompt.json");async function sk(){try{return await Bun.file(rY).json()}catch{return{}}}async function sY(Q){await Bun.write(rY,JSON.stringify(Q))}async function tY(){if(await M7())return!1;let Q=await sk();if(Q.never)return!1;let E=new Date().toISOString().slice(0,10);if(Q.dismissed===E)return!1;return!0}async function eY(Q){if(Q==="never")await sY({never:!0});else{let E=new Date().toISOString().slice(0,10);await sY({dismissed:E})}}var _9=[{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 AZ({onDone:Q}){let[E,g]=j9.useState(0),F=V0()==="zh";return I0(j9.useCallback((N,J)=>{if(J.upArrow){g((R)=>R>0?R-1:_9.length-1);return}if(J.downArrow){g((R)=>R<_9.length-1?R+1:0);return}if(J.escape){Q("skip");return}if(J.return){Q(_9[E].id);return}},[E,Q])),KE.jsxDEV(PA,{flexDirection:"column",paddingX:0,paddingY:1,children:[KE.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[KE.jsxDEV(PA,{gap:1,children:[KE.jsxDEV(f,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:!0,children:F?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:[KE.jsxDEV(f,{dimColor:!0,children:F?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access."},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:_9.map((N,J)=>{let R=J===E;return KE.jsxDEV(PA,{paddingLeft:1,gap:1,children:[KE.jsxDEV(f,{color:R?N.color||"white":void 0,bold:R,children:R?"\u25B8":" "},void 0,!1,void 0,this),KE.jsxDEV(f,{bold:R,color:R?N.color||"white":void 0,children:F?N.label.zh:N.label.en},void 0,!1,void 0,this),R&&KE.jsxDEV(f,{dimColor:!0,children:F?N.hint.zh:N.hint.en},void 0,!1,void 0,this)]},N.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KE.jsxDEV(PA,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u9009\u62E9":"select"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),KE.jsxDEV(f,{dimColor:!0,children:F?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var VC=SB(pQ(),1);import{join as rk}from"path";B0();async function h9(Q){let g=`${await kg()}/${encodeURIComponent(Q).replace("%40","@")}`,F=await fetch(g,{signal:AbortSignal.timeout(1e4)});if(!F.ok)throw Error(`registry http ${F.status}`);let N=await F.json(),J=Object.keys(N.versions??{});if(!J.length)throw Error("no versions found");let R=N.time??{},Y=J.map((O)=>({version:O,publishedAt:R[O],isCurrent:!1}));return Y.sort((O,k)=>{let i=O.publishedAt?Date.parse(O.publishedAt):0;return(k.publishedAt?Date.parse(k.publishedAt):0)-i}),Y}async function b9(Q,E){let g=await import("fs/promises"),F=F8(Q.id);await g.mkdir(F,{recursive:!0});let N=rk(F,"package.json");if(!await Bun.file(N).exists())await Bun.write(N,JSON.stringify({name:`tako-${Q.id}-host`,version:"0.0.0",private:!0},null,2));let R=await kg(),Y=Bun.spawn([p0,"add",`${Q.package}@${E}`],{cwd:F,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:R}});if(await Y.exited,Y.exitCode!==0){let k=await new Response(Y.stderr).text();throw Error(`bun add ${Q.package}@${E} failed: ${k.slice(0,500).trim()}`)}let O=await oQ();await yw({installedClients:{...O.installedClients,[Q.id]:{version:E,installedAt:new Date().toISOString()}}})}async function f9(Q){return(await oQ()).installedClients[Q.id]?.version??null}K0();var DI=SB(sI(),1),qM=12,BZ={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}};function QZ({onDone:Q}){let E=J1(),g=V0()==="zh",[F,N]=VC.useState(0),[J,R]=VC.useState(0),[Y,O]=VC.useState(0),[k,i]=VC.useState({}),[n,z]=VC.useState(null),[_,b]=VC.useState(""),j=E[F],c=VC.useCallback(async(WA)=>{i((kA)=>({...kA,[WA]:{loading:!0,versions:[],current:null}}));let KA=E.find((kA)=>kA.id===WA);if(!KA)return;try{let[kA,$A]=await Promise.all([h9(KA.package),f9(KA)]),GB=kA.map((nA)=>({...nA,isCurrent:nA.version===$A}));i((nA)=>({...nA,[WA]:{loading:!1,versions:GB,current:$A}}))}catch(kA){i(($A)=>({...$A,[WA]:{loading:!1,error:kA.message,versions:[],current:null}}))}},[E]);VC.useEffect(()=>{if(!j)return;if(!k[j.id])c(j.id)},[F,j?.id]),VC.useEffect(()=>{R(0),O(0)},[F]),VC.useEffect(()=>{if(!_)return;let WA=setTimeout(()=>b(""),3000);return()=>clearTimeout(WA)},[_]);let ZA=j?k[j.id]:void 0,SA=ZA?.versions??[],wA=VC.useCallback(async(WA)=>{if(!j||n)return;z(WA);try{await b9(j,WA),b(g?`\u2713 \u5DF2\u5207\u6362\u5230 ${WA}`:`\u2713 Switched to ${WA}`),await c(j.id)}catch(KA){b(g?`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${KA.message}`:`\u2717 Install failed: ${KA.message}`)}finally{z(null)}},[j,n,c,g]);I0((WA,KA)=>{if(n)return;if(KA.escape||WA==="q"){Q();return}if(KA.leftArrow){N(($A)=>$A>0?$A-1:E.length-1);return}if(KA.rightArrow){N(($A)=>$A<E.length-1?$A+1:0);return}if(WA==="r"){if(j)c(j.id);return}if(!SA.length)return;let kA=SA.length-1;if(KA.upArrow){R(($A)=>{let GB=Math.max(0,$A-1);if(GB<Y)O(GB);return GB});return}if(KA.downArrow){R(($A)=>{let GB=Math.min(kA,$A+1);if(GB>=Y+qM)O(GB-qM+1);return GB});return}if(KA.return){let $A=SA[J];if($A&&!$A.isCurrent)wA($A.version)}});let mA=BZ[j?.id]?.color||"white",TA=SA.slice(Y,Y+qM);return DI.jsxDEV(PA,{flexDirection:"column",paddingX:2,paddingY:1,children:[DI.jsxDEV(PA,{borderStyle:"round",borderColor:"gray",paddingX:3,children:[DI.jsxDEV(f,{bold:!0,children:["\uD83D\uDCE6 ",g?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"]},void 0,!0,void 0,this),_&&DI.jsxDEV(f,{color:_.startsWith("\u2713")?"green":"red",children:[" ",_]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,gap:1,justifyContent:"center",children:E.map((WA,KA)=>{let kA=BZ[WA.id]||{icon:"\u25AA",color:"white"},$A=KA===F;return DI.jsxDEV(PA,{borderStyle:$A?"bold":"single",borderColor:$A?kA.color:"gray",paddingX:2,children:DI.jsxDEV(f,{bold:$A,color:$A?kA.color:void 0,dimColor:!$A,children:[kA.icon," ",WA.name]},void 0,!0,void 0,this)},WA.id,!1,void 0,this)})},void 0,!1,void 0,this),DI.jsxDEV(PA,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:mA,paddingX:2,paddingY:1,children:!ZA||ZA.loading?DI.jsxDEV(f,{dimColor:!0,children:g?"\u52A0\u8F7D\u4E2D...":"Loading..."},void 0,!1,void 0,this):ZA.error?DI.jsxDEV(f,{color:"red",children:[g?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: ",ZA.error]},void 0,!0,void 0,this):SA.length===0?DI.jsxDEV(f,{dimColor:!0,children:g?"\u6682\u65E0\u7248\u672C":"No versions"},void 0,!1,void 0,this):DI.jsxDEV(PA,{flexDirection:"column",children:[DI.jsxDEV(f,{dimColor:!0,children:[g?`\u5171 ${SA.length} \u4E2A\u7248\u672C\uFF0C\u5F53\u524D\u5B89\u88C5\uFF1A`:`${SA.length} versions, current: `,DI.jsxDEV(f,{color:mA,children:ZA.current??(g?"\u672A\u5B89\u88C5":"not installed")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DI.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:TA.map((WA,KA)=>{let $A=Y+KA===J,GB=WA.publishedAt?WA.publishedAt.slice(0,10):"",nA=WA.isCurrent?g?" \u2605 \u5F53\u524D":" \u2605 current":"",CB=n===WA.version,AB=$A?mA:WA.isCurrent?"green":void 0;return DI.jsxDEV(PA,{paddingLeft:1,children:DI.jsxDEV(f,{color:AB,bold:$A,dimColor:!$A&&!WA.isCurrent,children:[$A?"\u25B6 ":" ",WA.version.padEnd(16),GB.padEnd(14),nA,CB?g?" \u23F3 \u5B89\u88C5\u4E2D...":" \u23F3 installing...":""]},void 0,!0,void 0,this)},WA.version,!1,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DI.jsxDEV(PA,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u9009\u62E9":"select"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5B89\u88C5":"install"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),DI.jsxDEV(f,{dimColor:!0,children:g?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var yg=SB(sI(),1);function tk({onLaunch:Q,onExit:E,initialView:g="launcher"}){let[F,N]=Vg.useState(g),[J,R]=Vg.useState([]),Y=Vg.useRef(null),O=Vg.useRef(!1);Vg.useEffect(()=>{if(O.current||g!=="launcher")return;O.current=!0,tY().then((b)=>{if(b)N("key-guide")})},[g]);let k=Vg.useCallback((b)=>{if(R((j)=>[...j.slice(-4),b]),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},[]);Vg.useEffect(()=>{let b=0;return h7({info:(j)=>k({text:j,type:"info"}),warn:(j)=>k({text:j,type:"warn"}),error:(j)=>k({text:j,type:"error"}),success:(j)=>k({text:j,type:"success"}),spin:(j)=>{let c=++b;return k({id:c,text:j,type:"spin"}),{stop:(ZA)=>{if(R((SA)=>{let wA=SA.filter((mA)=>mA.id!==c);if(ZA)wA.push({text:ZA,type:"success"});return wA.slice(-5)}),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)},update:(ZA)=>{if(R((SA)=>SA.map((wA)=>wA.id===c?{...wA,text:ZA}:wA)),Y.current)clearTimeout(Y.current);Y.current=setTimeout(()=>R([]),5000)}}}}),()=>$5()},[k]);let i=Vg.useCallback(()=>N("launcher"),[]),n={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},z={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},_=(()=>{switch(F){case"launcher":return yg.jsxDEV(hY,{onResult:(b)=>{switch(b.type){case"launch":Q(b);break;case"providers":N("providers");break;case"stats":N("stats");break;case"config":N("config");break;case"language":N("language");break;case"exit":E();break}}},void 0,!1,void 0,this);case"providers":return yg.jsxDEV(pY,{onDone:(b)=>{if(b==="client-versions")N("client-versions");else i()}},void 0,!1,void 0,this);case"client-versions":return yg.jsxDEV(QZ,{onDone:()=>N("providers")},void 0,!1,void 0,this);case"stats":return yg.jsxDEV(cY,{onExit:i},void 0,!1,void 0,this);case"config":return yg.jsxDEV(aY,{isReconfigure:!0,onDone:i},void 0,!1,void 0,this);case"language":return yg.jsxDEV(nY,{onDone:i},void 0,!1,void 0,this);case"key-guide":return yg.jsxDEV(AZ,{onDone:(b)=>{if(b==="configure")N("config");else eY(b).then(()=>N("launcher"))}},void 0,!1,void 0,this)}})();return yg.jsxDEV(PA,{flexDirection:"column",children:[J.length>0&&yg.jsxDEV(PA,{flexDirection:"column",paddingX:2,children:J.map((b,j)=>yg.jsxDEV(f,{color:n[b.type],dimColor:b.type==="info",children:[z[b.type]," ",b.text]},j,!0,void 0,this))},void 0,!1,void 0,this),_]},void 0,!0,void 0,this)}function OM(){return new Promise((Q)=>{let E=null;function g(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause(),process.stdin.unref()}catch{}}function F(J){E?.clear(),E?.unmount(),E=null,g(),$5(),Q(J)}function N(){E?.clear(),E?.unmount(),E=null,g(),$5(),Q(null)}E=k1(yg.jsxDEV(tk,{onLaunch:F,onExit:N},void 0,!1,void 0,this))})}B0();Q2();var DF=SB(sI(),1),ek={info:"cyan",success:"green",warning:"yellow",danger:"red"};function A$(Q){return ek[Q??"info"]??"cyan"}function B$({ann:Q,onClose:E}){I0((N,J)=>{if(J.return||J.escape||N==="q")E()});let g=A$(Q.type),F=Q.content.split(/\r?\n/);return DF.jsxDEV(PA,{flexDirection:"column",borderStyle:"round",borderColor:g,paddingX:2,paddingY:1,children:[DF.jsxDEV(PA,{children:DF.jsxDEV(f,{color:g,bold:!0,children:["\uD83D\uDCE3 ",Q.title]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,flexDirection:"column",children:F.map((N,J)=>DF.jsxDEV(f,{children:N||" "},J,!1,void 0,this))},void 0,!1,void 0,this),DF.jsxDEV(PA,{marginTop:1,children:DF.jsxDEV(f,{dimColor:!0,children:Q.popup_once?"\u6309 Enter / Esc / q \u5173\u95ED\uFF0C\u672C\u6761\u53EA\u63D0\u793A\u4E00\u6B21":"\u6309 Enter / Esc / q \u5173\u95ED"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function IZ(Q){return new Promise((E)=>{let g=null;g=k1(DF.jsxDEV(B$,{ann:Q,onClose:()=>{g?.clear(),g?.unmount(),g=null,E()}},void 0,!1,void 0,this))})}var Q$=2000,EZ=100;function E2(Q){if(Z5||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${Q}
|
|
625
|
+
`)}function CZ(Q){if(!Q)return null;if(Q.type!=="tako"&&Q.type!=="custom")return null;if(!Q.baseUrl||!Q.apiKey)return null;return{baseUrl:Q.baseUrl.replace(/\/+$/,""),apiKey:Q.apiKey}}async function I$(Q,E){let g=`${Q}/v1/announcements/popup`;try{let F=await fetch(g,{headers:{Authorization:`Bearer ${E}`},signal:AbortSignal.timeout(Q$)});if(!F.ok)return E2(`HTTP ${F.status} from ${g}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let J=(await F.json())?.announcement;if(!J)return E2("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof J.id!=="string"||typeof J.title!=="string")return E2(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(J)}`),null;return E2(`\u62C9\u5230\u516C\u544A id=${J.id} title=${J.title} popup_once=${!!J.popup_once}`),{id:J.id,title:J.title,content:J.content??"",type:J.type,popup_once:!!J.popup_once}}catch(F){return E2(`fetch \u5931\u8D25\uFF1A${F instanceof Error?F.message:String(F)}`),null}}async function E$(Q){return((await oQ()).seenAnnouncementIds??[]).includes(Q)}async function C$(Q){let E=await oQ(),g=E.seenAnnouncementIds??[];if(g.includes(Q))return;let F=[...g,Q];if(F.length>EZ)F.splice(0,F.length-EZ);E.seenAnnouncementIds=F,await kC(E)}async function g$(){let Q=CZ(await Ag());if(Q)return Q;for(let E of await JD()){let g=CZ(E);if(g)return g}return null}async function gZ(){let Q=await g$();if(!Q){E2("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}E2(`\u67E5\u8BE2\u516C\u544A\uFF1A${Q.baseUrl}/v1/announcements/popup`);let E=await I$(Q.baseUrl,Q.apiKey);if(!E)return;if(E.popup_once&&await E$(E.id)){E2(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${E.id}`);return}if(E2(`\u5F39\u7A97\uFF1A${E.id}`),await IZ(E),E.popup_once)await C$(E.id),E2(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${E.id}`)}async function DZ(){await DM(),await FM(),await KY(),await Promise.race([$L(await JD()),new Promise((Q)=>setTimeout(Q,3000))]),await gZ();while(!0){let Q=await OM();if(!Q)break;let E=Z6(Q.clientId);if(!E)continue;E0("menu_action",{action:"launch",client_id:Q.clientId});let g=await m9(Q.clientId);if(!g){RQ.warn(tB("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let F=await P9(E,{projectPath:Q.projectPath,args:Q.args,selectedOptionIds:Q.selectedOptionIds,providerContext:g});if(!F.success)RQ.error(F.error||tB("cli.launchFailed"))}}B0();K0();import{join as C2}from"path";var zM="tako-cli",LN="0.2.61";function D$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number);for(let N=0;N<3;N++){let J=g[N]||0,R=F[N]||0;if(J>R)return 1;if(J<R)return-1}return 0}async function F$(){try{let Q=await kg(),E=await fetch(`${Q}/${zM}/latest`,{signal:AbortSignal.timeout(5000)});if(!E.ok)return null;return(await E.json()).version||null}catch{return null}}async function w$(){let Q=await F$();if(!Q)return{hasUpdate:!1,currentVersion:LN};return{hasUpdate:D$(Q,LN)>0,latestVersion:Q,currentVersion:LN}}async function FZ(){let Q=await import("fs/promises"),E=C2(W0,"bin"),g=C2(E,"tako"),F=C2(rD,"node_modules/tako-cli/dist/index.js");if(await Q.mkdir(E,{recursive:!0}),process.platform==="win32"){let J=`@echo off\r
|
|
626
626
|
"${p0}" "${F}" %*\r
|
|
627
627
|
`;await Q.writeFile(C2(E,"tako.cmd"),J)}else{let J=`#!/bin/bash
|
|
628
628
|
exec "${p0}" "${F}" "$@"
|
|
629
629
|
`;await Q.writeFile(g,J,{mode:493})}}async function G$(Q){let E=jw(),g=`\u6B63\u5728\u66F4\u65B0\u5230 v${Q}`;E.start(g);try{let F=await kg(),N=await import("fs/promises");await N.mkdir(rD,{recursive:!0});let J=C2(rD,"package.json");try{await N.access(J)}catch{await N.writeFile(J,JSON.stringify({name:"tako-local",private:!0},null,2))}let R=Bun.spawn([p0,"update",zM,"--latest"],{cwd:rD,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:F}}),Y=await T9(R,g,(O)=>E.update(O));if(await R.exited,R.exitCode===0)return await FZ(),E0("cli_updated",{from_version:LN,to_version:Q}),E.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${Q}`),!0;else return E.stop(`\u66F4\u65B0\u5931\u8D25: ${Y||"\u672A\u77E5\u9519\u8BEF"}`),!1}catch(F){return E.stop(`\u66F4\u65B0\u5931\u8D25: ${F instanceof Error?F.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function N$(){let Q=await import("fs/promises"),E=C2(rD,"bun.lock");try{await Q.unlink(E)}catch{}}async function H$(){let Q=await import("fs/promises");try{let E=await kg();await Q.mkdir(rD,{recursive:!0});let g=C2(rD,"package.json");try{await Q.access(g)}catch{await Q.writeFile(g,JSON.stringify({name:"tako-local",private:!0},null,2))}await N$();let F=Bun.spawn([p0,"add",`${zM}@latest`],{cwd:rD,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:E}});return await F.exited,F.exitCode===0}catch{return!1}}async function U$(){let Q=await import("fs/promises"),E=C2(W0,"bin"),g=C2(E,"tako"),F=C2(rD,"node_modules/tako-cli/dist/index.js");try{let N=await Q.readFile(g,"utf-8");if(N.includes("bun run tako-cli")||N.includes("run tako-cli")){RQ.info(tB("updater.migrating"));let J=!1;try{await Q.access(F),J=!0}catch{J=!1}if(!J){let R=jw();if(R.start(tB("updater.installingLocally")),!await H$())return R.stop(tB("updater.migrationFailed")),!1;R.stop(tB("updater.installComplete"))}return await FZ(),!0}}catch{}return!1}async function JN(){try{if(await U$())RQ.info(tB("updater.migrationComplete")),process.exit(0);let E=await w$();if(E.hasUpdate&&E.latestVersion){if(RQ.warn(tB("updater.newVersionAvailable",{version:E.latestVersion,current:LN})),await G$(E.latestVersion))RQ.info(tB("updater.pleaseRestart")),process.exit(0)}}catch{}}K0();import{homedir as J$}from"os";var FI={black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"};var rI={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var $E={directory:{icon:FI.brightYellow,text:FI.brightGreen},git:{icon:FI.brightBlue,text:FI.brightBlue,clean:FI.brightGreen,dirty:FI.brightYellow,conflict:FI.brightRed},model:{icon:FI.brightCyan,text:FI.brightCyan},version:{icon:FI.brightWhite,text:FI.brightBlack},outputStyle:{icon:FI.brightMagenta,text:FI.brightMagenta},context:{icon:FI.brightMagenta,low:FI.brightGreen,medium:FI.brightYellow,high:FI.brightRed},todayUsage:{icon:FI.brightGreen,text:FI.brightGreen},separator:FI.brightBlack},FF={directory:{nerd:"\uF07B",plain:"\uD83D\uDCC1"},git:{nerd:"\uE725",plain:"\uD83C\uDF3F"},model:{nerd:"\uF11B",plain:"\uD83E\uDD16"},version:{nerd:"\uF412",plain:"\uD83D\uDCBE"},outputStyle:{nerd:"\uF12F5",plain:"\uD83C\uDFAF"},context:{nerd:"\uF0E7",plain:"\u26A1"},todayUsage:{nerd:"\uF155",plain:"\uD83D\uDCB0"},gitClean:"\u2713",gitDirty:"\u25CF",gitConflict:"\u26A0",gitAhead:"\u2191",gitBehind:"\u2193"};function L$(){return!1}function g2(Q){let E=FF[Q];if(typeof E==="string")return E;return L$()?E.nerd:E.plain}class x9{id="directory";render(Q){let E=this.formatPath(Q.workspace.current_dir),g=g2("directory");return`${$E.directory.icon}${g}${rI.reset} ${$E.directory.text}${E}${rI.reset}`}formatPath(Q){let E=J$();if(Q===E)return"~";if(Q.startsWith(E+"/"))return"~"+Q.slice(E.length);return Q}}class p9{id="git";async render(Q){let E=Q.workspace.current_dir;if(!await this.isGitRepository(E))return null;let F=await this.getBranch(E);if(!F)return null;let{status:N,statusColor:J}=await this.getStatus(E),{ahead:R,behind:Y}=await this.getAheadBehind(E),O=g2("git"),k=`${$E.git.icon}${O}${rI.reset} ${$E.git.text}${F}${rI.reset}`;if(k+=` ${J}${N}${rI.reset}`,R>0)k+=` ${$E.git.clean}${FF.gitAhead}${R}${rI.reset}`;if(Y>0)k+=` ${$E.git.dirty}${FF.gitBehind}${Y}${rI.reset}`;return k}async isGitRepository(Q){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:Q,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(Q){try{let E=Bun.spawn(["git","branch","--show-current"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited===0&&g.trim())return g.trim();let N=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),J=await new Response(N.stdout).text();if(await N.exited===0&&J.trim())return`detached:${J.trim()}`;return null}catch{return null}}async getStatus(Q){try{let E=Bun.spawn(["git","status","--porcelain"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text();if(await E.exited!==0)return{status:FF.gitClean,statusColor:$E.git.clean};let N=g.trim();if(!N)return{status:FF.gitClean,statusColor:$E.git.clean};if(N.includes("UU")||N.includes("AA")||N.includes("DD"))return{status:FF.gitConflict,statusColor:$E.git.conflict};return{status:FF.gitDirty,statusColor:$E.git.dirty}}catch{return{status:FF.gitClean,statusColor:$E.git.clean}}}async getAheadBehind(Q){try{let E=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),g=await new Response(E.stdout).text(),N=await E.exited===0?parseInt(g.trim(),10)||0:0,J=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:Q,stdout:"pipe",stderr:"pipe"}),R=await new Response(J.stdout).text(),O=await J.exited===0?parseInt(R.trim(),10)||0:0;return{ahead:N,behind:O}}catch{return{ahead:0,behind:0}}}}var M$={"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 d9{id="model";render(Q){let E=Q.model.id,g=M$[E]||this.simplifyModelName(Q.model.display_name),F=g2("model");return`${$E.model.icon}${F}${rI.reset} ${$E.model.text}${g}${rI.reset}`}simplifyModelName(Q){let E=Q.replace(/^Claude\s+/i,"");return E=E.replace(/-\d{8}$/,""),E}}var R$=200000;class D2{id="context";static cache=null;static CACHE_TTL=5000;async render(Q){let E=await this.getTokensWithCache(Q.transcript_path),F=OL(Q.model.id)?.contextWindow??R$,N=Math.round((E??0)/F*100),J=Math.max(0,100-N),R=g2("context"),Y=J<=20?FI.brightRed:J<=50?FI.brightYellow:FI.brightGreen;return`${$E.context.icon}${R}${rI.reset} ${Y}${J}%${rI.reset}`}async getTokensWithCache(Q){let E=Date.now();if(D2.cache&&D2.cache.path===Q&&E-D2.cache.timestamp<D2.CACHE_TTL)return D2.cache.tokens;let g=await this.parseTranscriptTokens(Q);return D2.cache={path:Q,tokens:g,timestamp:E},g}async parseTranscriptTokens(Q){try{let E=Bun.file(Q);if(!await E.exists())return null;let g=await E.text();if(!g.trim())return null;let F=g.split(`
|
|
630
|
-
`).filter((N)=>N.trim());for(let N=F.length-1;N>=0;N--)try{let J=JSON.parse(F[N]);if(J.type==="assistant"&&J.message?.usage){let R=J.message.usage;return(R.input_tokens||0)+(R.output_tokens||0)+(R.cache_creation_input_tokens||0)+(R.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}v9();B0();Q2();class i9{id="quota";async render(Q){let E=await this.tryRenderOfficial();if(E)return E;return this.renderSessionCost(Q)}async tryRenderOfficial(){try{let Q=await IF("claude-code")??await Ag();if(!Q){let g=await Vw().catch(()=>"");if(!g)return null;let F=await GN(g);return this.renderTako(F)}let E=await NN(Q);if(E.status!=="ok")return null;switch(E.provider){case"tako":return this.renderTako(E);case"claude-subscription":return this.renderClaudeSub(E);case"codex-subscription":return this.renderCodexSub(E);default:return null}}catch{return null}}renderTako(Q){if(Q.status!=="ok")return null;if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit))return this.renderSub(Q);let g=Q.daily??Q.primary??Q.secondary;if(!g)return null;let F=g.costUsed??0;return`${this.icon()} ${FI.brightGreen}Day:${this.fmtCost(F)}${rI.reset}`}renderSub(Q){let E=(F,N,J)=>{if(F&&F>=1440)return`${Math.round(F/1440)}d`;if(F)return`${Math.round(F/60)}h`;return J?`${J}d`:`${N}h`},g=[];if(Q.primary)g.push(this.remainChunk(E(Q.primary.windowMinutes,5),Q.primary.usedPct));if(Q.secondary)g.push(this.remainChunk(E(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct));if(Q.modelLimits?.opus)g.push(this.remainChunk("opus",Q.modelLimits.opus.usedPct));if(!g.length)return null;return`${this.icon()} ${g.join(`${rI.dim} \xB7 ${rI.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(Q,E){let g=E>=90?FI.brightRed:E>=70?FI.brightYellow:FI.brightGreen;return`${Q}:${g}${E}%${rI.reset}`}remainChunk(Q,E){let g=Math.max(0,Math.min(100,100-Math.round(E))),F=g<=10?FI.brightRed:g<=30?FI.brightYellow:FI.brightGreen;return`${Q} \u5269 ${F}${g}%${rI.reset}`}renderSessionCost(Q){let E=Q.cost?.total_cost_usd;if(E==null||E<=0)return null;return`${this.icon()} ${FI.brightGreen}Session:${this.fmtCost(E)}${rI.reset}`}icon(){return`${$E.todayUsage.icon}${g2("todayUsage")}${rI.reset}`}fmtCost(Q){if(Q>=100)return`$${Math.round(Q)}`;if(Q>=10)return`$${Q.toFixed(1)}`;return`$${Q.toFixed(2)}`}}class SM{separator=`${$E.separator} \u2502 ${rI.reset}`;render(Q){let E=["directory","git","model","context","quota"],g=[];for(let F of E){let N=Q.get(F);if(N)g.push(N)}return g.join(this.separator)}}import{join as v1,dirname as W$}from"path";import{homedir as kM}from"os";import{mkdir as K$}from"fs/promises";var wZ=v1(kM(),".tako"),Y$=v1(wZ,"cli"),Z$=v1(wZ,"bin",process.platform==="win32"?"tako.cmd":"tako");function X$(){if(process.platform==="win32")return v1(process.env.APPDATA||v1(kM(),"AppData","Roaming"),"claude","settings.json");return v1(kM(),".claude","settings.json")}var u$=process.platform==="win32",q$="0.1.48";function O$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number),N=Math.max(g.length,F.length);for(let J=0;J<N;J++){let R=g[J]||0,Y=F[J]||0;if(R!==Y)return R-Y}return 0}async function z$(){let Q=v1(Y$,"node_modules","tako-cli","package.json");try{let E=Bun.file(Q);if(!await E.exists())return null;return(await E.json()).version||null}catch{return null}}async function S$(){let Q=await z$();if(!Q)return!1;return O$(Q,q$)>=0}function k$(){return Z$}function $$(){return`"${y$(k$())}" statusline`}function y$(Q){if(u$)return Q.replace(/\\/g,"/");return Q}async function $M(){if(!await S$())return;let E=X$(),g={};try{let J=Bun.file(E);if(await J.exists())g=await J.json()}catch{}let F={type:"command",command:$$(),padding:0},N=typeof g.statusLine==="object"&&g.statusLine!==null?g.statusLine.command:null;if(typeof N==="string"&&N.includes("tako statusline"))return;g.statusLine=F,await K$(W$(E),{recursive:!0}),await Bun.write(E,JSON.stringify(g,null,2))}var V$=[new x9,new p9,new d9,new D2,new i9];async function T$(Q){let E=await Promise.all(V$.map(async(N)=>{try{let J=await N.render(Q);return{id:N.id,content:J}}catch{return{id:N.id,content:null}}})),g=new Map;for(let{id:N,content:J}of E)g.set(N,J);return new SM().render(g)}async function GZ(){try{let Q=await Bun.stdin.json(),E=await T$(Q);console.log(E)}catch{process.exit(0)}}B0();var VM="0.2.
|
|
630
|
+
`).filter((N)=>N.trim());for(let N=F.length-1;N>=0;N--)try{let J=JSON.parse(F[N]);if(J.type==="assistant"&&J.message?.usage){let R=J.message.usage;return(R.input_tokens||0)+(R.output_tokens||0)+(R.cache_creation_input_tokens||0)+(R.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}v9();B0();Q2();class i9{id="quota";async render(Q){let E=await this.tryRenderOfficial();if(E)return E;return this.renderSessionCost(Q)}async tryRenderOfficial(){try{let Q=await IF("claude-code")??await Ag();if(!Q){let g=await Vw().catch(()=>"");if(!g)return null;let F=await GN(g);return this.renderTako(F)}let E=await NN(Q);if(E.status!=="ok")return null;switch(E.provider){case"tako":return this.renderTako(E);case"claude-subscription":return this.renderClaudeSub(E);case"codex-subscription":return this.renderCodexSub(E);default:return null}}catch{return null}}renderTako(Q){if(Q.status!=="ok")return null;if(!!(Q.primary?.costLimit||Q.secondary?.costLimit||Q.daily?.costLimit))return this.renderSub(Q);let g=Q.daily??Q.primary??Q.secondary;if(!g)return null;let F=g.costUsed??0;return`${this.icon()} ${FI.brightGreen}Day:${this.fmtCost(F)}${rI.reset}`}renderSub(Q){let E=(F,N,J)=>{if(F&&F>=1440)return`${Math.round(F/1440)}d`;if(F)return`${Math.round(F/60)}h`;return J?`${J}d`:`${N}h`},g=[];if(Q.primary)g.push(this.remainChunk(E(Q.primary.windowMinutes,5),Q.primary.usedPct));if(Q.secondary)g.push(this.remainChunk(E(Q.secondary.windowMinutes,24,7),Q.secondary.usedPct));if(Q.modelLimits?.opus)g.push(this.remainChunk("opus",Q.modelLimits.opus.usedPct));if(!g.length)return null;return`${this.icon()} ${g.join(`${rI.dim} \xB7 ${rI.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(Q,E){let g=E>=90?FI.brightRed:E>=70?FI.brightYellow:FI.brightGreen;return`${Q}:${g}${E}%${rI.reset}`}remainChunk(Q,E){let g=Math.max(0,Math.min(100,100-Math.round(E))),F=g<=10?FI.brightRed:g<=30?FI.brightYellow:FI.brightGreen;return`${Q} \u5269 ${F}${g}%${rI.reset}`}renderSessionCost(Q){let E=Q.cost?.total_cost_usd;if(E==null||E<=0)return null;return`${this.icon()} ${FI.brightGreen}Session:${this.fmtCost(E)}${rI.reset}`}icon(){return`${$E.todayUsage.icon}${g2("todayUsage")}${rI.reset}`}fmtCost(Q){if(Q>=100)return`$${Math.round(Q)}`;if(Q>=10)return`$${Q.toFixed(1)}`;return`$${Q.toFixed(2)}`}}class SM{separator=`${$E.separator} \u2502 ${rI.reset}`;render(Q){let E=["directory","git","model","context","quota"],g=[];for(let F of E){let N=Q.get(F);if(N)g.push(N)}return g.join(this.separator)}}import{join as v1,dirname as W$}from"path";import{homedir as kM}from"os";import{mkdir as K$}from"fs/promises";var wZ=v1(kM(),".tako"),Y$=v1(wZ,"cli"),Z$=v1(wZ,"bin",process.platform==="win32"?"tako.cmd":"tako");function X$(){if(process.platform==="win32")return v1(process.env.APPDATA||v1(kM(),"AppData","Roaming"),"claude","settings.json");return v1(kM(),".claude","settings.json")}var u$=process.platform==="win32",q$="0.1.48";function O$(Q,E){let g=Q.split(".").map(Number),F=E.split(".").map(Number),N=Math.max(g.length,F.length);for(let J=0;J<N;J++){let R=g[J]||0,Y=F[J]||0;if(R!==Y)return R-Y}return 0}async function z$(){let Q=v1(Y$,"node_modules","tako-cli","package.json");try{let E=Bun.file(Q);if(!await E.exists())return null;return(await E.json()).version||null}catch{return null}}async function S$(){let Q=await z$();if(!Q)return!1;return O$(Q,q$)>=0}function k$(){return Z$}function $$(){return`"${y$(k$())}" statusline`}function y$(Q){if(u$)return Q.replace(/\\/g,"/");return Q}async function $M(){if(!await S$())return;let E=X$(),g={};try{let J=Bun.file(E);if(await J.exists())g=await J.json()}catch{}let F={type:"command",command:$$(),padding:0},N=typeof g.statusLine==="object"&&g.statusLine!==null?g.statusLine.command:null;if(typeof N==="string"&&N.includes("tako statusline"))return;g.statusLine=F,await K$(W$(E),{recursive:!0}),await Bun.write(E,JSON.stringify(g,null,2))}var V$=[new x9,new p9,new d9,new D2,new i9];async function T$(Q){let E=await Promise.all(V$.map(async(N)=>{try{let J=await N.render(Q);return{id:N.id,content:J}}catch{return{id:N.id,content:null}}})),g=new Map;for(let{id:N,content:J}of E)g.set(N,J);return new SM().render(g)}async function GZ(){try{let Q=await Bun.stdin.json(),E=await T$(Q);console.log(E)}catch{process.exit(0)}}B0();var VM="0.2.61";function P$(){console.log(`
|
|
631
631
|
${tB("cli.version",{version:VM})}
|
|
632
632
|
|
|
633
633
|
${tB("cli.usage")}
|