tako-cli 0.3.3 → 0.3.4
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
|
@@ -276,7 +276,7 @@ React keys must be passed directly to JSX without using spread:
|
|
|
276
276
|
{fields}`,zh:`\u68C0\u6D4B\u5230 Claude Code settings \u4E2D\u5B58\u5728\u4E0E Tako \u51B2\u7A81\u7684\u914D\u7F6E\uFF1A
|
|
277
277
|
{fields}`},confirmClean:{en:"Clean these settings? Tako will manage them automatically at launch",zh:"\u662F\u5426\u6E05\u7406\u8FD9\u4E9B\u914D\u7F6E\uFF1FTako \u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u6CE8\u5165\u6B63\u786E\u7684\u503C"},settingsCleaned:{en:"Settings cleaned, Tako will manage these configs automatically",zh:"\u5DF2\u6E05\u7406\u5B8C\u6210\uFF0CTako \u4F1A\u81EA\u52A8\u7BA1\u7406\u8FD9\u4E9B\u914D\u7F6E"},cleanSkipped:{en:"Skipped. Note: hardcoded settings may cause issues with Tako",zh:"\u5DF2\u8DF3\u8FC7\u3002\u6CE8\u610F\uFF1A\u5199\u6B7B\u7684\u914D\u7F6E\u53EF\u80FD\u5BFC\u81F4 Tako \u542F\u52A8\u5F02\u5E38"},subscriptionMissingAuth:{en:"Selected Claude account has no captured credentials. Run `claude /login` for that account, then re-detect in Tako.",zh:"\u76EE\u6807 Claude \u8D26\u53F7\u7F3A\u5C11\u51ED\u636E\u3002\u8BF7\u7528 `claude /login` \u767B\u5F55\u8BE5\u8D26\u53F7\u540E\uFF0C\u8BA9 Tako \u91CD\u65B0\u68C0\u6D4B\u4E00\u6B21\u3002"},subscriptionSwitched:{en:"Switched Claude Code login to {email}",zh:"\u5DF2\u5207\u6362 Claude Code \u767B\u5F55\u8D26\u53F7\u4E3A {email}"},unknownCurrentAccount:{en:"Current Claude login ({email}) is not tracked by Tako; its tokens will be overwritten.",zh:"\u5F53\u524D Claude \u767B\u5F55\u8D26\u53F7 ({email}) \u672A\u88AB Tako \u8BB0\u5F55\uFF0C\u5207\u6362\u540E\u8BE5\u8D26\u53F7 token \u5C06\u88AB\u8986\u76D6\u3002"}},recentProjects:{title:{en:"Recent Projects",zh:"\u6700\u8FD1\u9879\u76EE"},launchInCurrent:{en:"Launch in current directory",zh:"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8"}},providers:{management:{en:"Manage Providers",zh:"\u7BA1\u7406\u670D\u52A1\u5546"},selectProvider:{en:"Select provider:",zh:"\u9009\u62E9\u670D\u52A1\u5546\uFF1A"},selectType:{en:"Provider type:",zh:"\u670D\u52A1\u5546\u7C7B\u578B\uFF1A"},enterName:{en:"Provider name:",zh:"\u670D\u52A1\u5546\u540D\u79F0\uFF1A"},enterApiKey:{en:"API Key:",zh:"API Key\uFF1A"},enterBaseUrl:{en:"Base URL:",zh:"\u57FA\u7840 URL\uFF1A"},add:{en:"Add Provider",zh:"\u6DFB\u52A0\u670D\u52A1\u5546"},edit:{en:"Edit Provider",zh:"\u7F16\u8F91\u670D\u52A1\u5546"},delete:{en:"Delete Provider",zh:"\u5220\u9664\u670D\u52A1\u5546"},setDefault:{en:"Set as Default",zh:"\u8BBE\u4E3A\u9ED8\u8BA4"},rescan:{en:"Re-scan Subscriptions",zh:"\u91CD\u65B0\u626B\u63CF\u8BA2\u9605"},back:{en:"Back",zh:"\u8FD4\u56DE"},added:{en:"Provider added",zh:"\u670D\u52A1\u5546\u5DF2\u6DFB\u52A0"},deleted:{en:"Provider deleted",zh:"\u670D\u52A1\u5546\u5DF2\u5220\u9664"},updated:{en:"Provider updated",zh:"\u670D\u52A1\u5546\u5DF2\u66F4\u65B0"},defaultSet:{en:"Default provider set",zh:"\u9ED8\u8BA4\u670D\u52A1\u5546\u5DF2\u8BBE\u7F6E"},noProviders:{en:"No providers configured",zh:"\u672A\u914D\u7F6E\u670D\u52A1\u5546"},noCompatible:{en:"No provider supports {client}",zh:"\u6CA1\u6709\u652F\u6301 {client} \u7684\u670D\u52A1\u5546"},defaultLabel:{en:"(default)",zh:"\uFF08\u9ED8\u8BA4\uFF09"},detected:{en:"Detected: {name}",zh:"\u68C0\u6D4B\u5230\uFF1A{name}"},confirmDelete:{en:"Delete {name}?",zh:"\u786E\u8BA4\u5220\u9664 {name}\uFF1F"},scanComplete:{en:"Scan complete, found {count} new provider(s)",zh:"\u626B\u63CF\u5B8C\u6210\uFF0C\u53D1\u73B0 {count} \u4E2A\u65B0\u670D\u52A1\u5546"}}}});var j3={};w0(j3,{writeClaudeAuth:()=>XT,readClaudeAuth:()=>ZT});import{homedir as YW,platform as LT,userInfo as MT}from"os";import{join as H5}from"path";function XW(){return[process.env.USER||(()=>{try{return MT().username}catch{return""}})(),"root"].filter(Boolean)}async function RT(B){let I=Bun.spawn(["security","find-generic-password","-s",ZW,"-a",B,"-w"],{stdout:"pipe",stderr:"pipe"}),C=await new Response(I.stdout).text();if(await I.exited!==0)return null;try{return JSON.parse(C.trim())}catch{return null}}async function uT(){for(let B of XW()){let I=await RT(B);if(I)return I}return null}async function KT(B){let I=JSON.stringify(B),C=XW()[0],g=Bun.spawn(["security","add-generic-password","-U","-s",ZW,"-a",C,"-w",I],{stdout:"pipe",stderr:"pipe"}),F=await g.exited;if(F!==0){let N=await new Response(g.stderr).text();throw Error(`security add-generic-password failed (${F}): ${N.trim()}`)}}async function WT(){try{let B=await import("fs/promises");return JSON.parse(await B.readFile(OW,"utf-8"))}catch{return null}}async function YT(B){let I=await import("fs/promises");await I.mkdir(qW,{recursive:!0}),await I.writeFile(OW,JSON.stringify(B,null,2)+`
|
|
278
278
|
`,{mode:384})}async function ZT(){let B=SW?await uT():await WT(),I;try{let C=await import("fs/promises"),g=JSON.parse(await C.readFile(N5,"utf-8"));if(g.oauthAccount&&typeof g.oauthAccount==="object")I=g.oauthAccount}catch{}return{credentials:B??void 0,oauthAccount:I}}async function XT(B){if(B.credentials)if(SW)await KT(B.credentials);else await YT(B.credentials);if(B.oauthAccount){let I=await import("fs/promises"),C={};try{C=JSON.parse(await I.readFile(N5,"utf-8"))}catch{}C.oauthAccount=B.oauthAccount,await I.writeFile(N5,JSON.stringify(C,null,2)+`
|
|
279
|
-
`)}}var ZW="Claude Code-credentials",qW,OW,N5,SW;var x3=a(()=>{qW=H5(YW(),".claude"),OW=H5(qW,".credentials.json"),N5=H5(YW(),".claude.json"),SW=LT()==="darwin"});var kW={};w0(kW,{updateProvider:()=>ED,setDefaultProvider:()=>J5,setClientProvider:()=>Z1,resolveXiaomiBaseUrl:()=>Z6,resolveProviderContext:()=>zI,migrateIfNeeded:()=>L5,mergeDetectedProviders:()=>q1,isProviderCompatible:()=>g2,getProvidersForClient:()=>BC,getProviders:()=>kI,getProvider:()=>qT,getModelChoices:()=>pF,getDefaultSupportedClients:()=>cI,getDefaultProvider:()=>aI,getDefaultModel:()=>C2,getDefaultBaseUrl:()=>K6,getClientProvider:()=>QC,fixupProviders:()=>M5,detectProviders:()=>X1,deleteProvider:()=>U5,addProvider:()=>ID,XIAOMI_TOKEN_PLAN_URL:()=>L7,XIAOMI_ANTHROPIC_URL:()=>Y6,PROVIDER_TYPE_NAMES:()=>wE,DEEPSEEK_ANTHROPIC_URL:()=>W6});async function kI(){return(await EB()).providers??[]}async function qT(B){return(await kI()).find((C)=>C.id===B)}async function aI(){let B=await EB(),I=B.providers??[];if(I.length===0)return;if(B.defaultProviderId){let C=I.find((g)=>g.id===B.defaultProviderId);if(C)return C}return I[0]}async function BC(B){return(await kI()).filter((g)=>g2(g,B)).sort((g,F)=>{let N=g.lastUsedAt?new Date(g.lastUsedAt).getTime():0,H=F.lastUsedAt?new Date(F.lastUsedAt).getTime():0;if(N!==H)return H-N;return new Date(F.createdAt).getTime()-new Date(g.createdAt).getTime()})}async function ID(B){let I=await EB(),C={...B,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(I.providers=[...I.providers??[],C],!I.defaultProviderId)I.defaultProviderId=C.id;return await uI(I),C}async function ED(B,I){let C=await EB(),g=C.providers??[],F=g.findIndex((N)=>N.id===B);if(F===-1)return;g[F]={...g[F],...I},C.providers=g,await uI(C)}async function U5(B){let I=await EB();if((I.providers??[]).find((g)=>g.id===B)?.builtin)return;if(I.providers=(I.providers??[]).filter((g)=>g.id!==B),I.defaultProviderId===B)I.defaultProviderId=I.providers[0]?.id;if(I.clientProviderMap){for(let[g,F]of Object.entries(I.clientProviderMap))if(F===B)delete I.clientProviderMap[g]}await uI(I)}async function J5(B){let I=await EB();if(!(I.providers??[]).some((g)=>g.id===B))return;I.defaultProviderId=B,await uI(I)}async function QC(B){let I=await EB(),C=I.clientProviderMap?.[B];if(C){let g=(I.providers??[]).find((F)=>F.id===C);if(g&&g2(g,B))return g}return}async function Z1(B,I){let C=await EB();C.clientProviderMap={...C.clientProviderMap,[B]:I};let g=C.providers??[],F=g.findIndex((N)=>N.id===I);if(F!==-1)g[F]={...g[F],lastUsedAt:new Date().toISOString()},C.providers=g;await uI(C)}function zI(B){return{type:B.type,apiKey:B.apiKey,baseUrl:B.baseUrl,authData:B.authData,model:B.model,modelContextWindow:B.modelContextWindow}}async function OT(){try{let B=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),I=await new Response(B.stdout).text();if(await B.exited!==0)return null;let g=JSON.parse(I.trim());if(!g.loggedIn||g.authMethod!=="claude.ai")return null;let F=g.subscriptionType||"pro",N=g.email||"",H=`Claude ${F.charAt(0).toUpperCase()+F.slice(1)}${N?` (${N})`:""}`,{readClaudeAuth:J}=await Promise.resolve().then(() => (x3(),j3)),M=await J(),R=M.credentials||M.oauthAccount?{credentials:M.credentials,oauthAccount:M.oauthAccount}:void 0;return{id:crypto.randomUUID(),name:H,type:"claude-subscription",supportedClients:cI("claude-subscription"),createdAt:new Date().toISOString(),email:N,subscriptionType:F,authData:R}}catch{return null}}async function ST(){try{let{homedir:B}=await import("os"),{join:I}=await import("path"),C=await import("fs/promises"),g=I(B(),".codex","auth.json"),F=JSON.parse(await C.readFile(g,"utf-8"));if(F.auth_mode!=="chatgpt"||!F.tokens?.access_token)return null;let N="";try{N=JSON.parse(atob(F.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:F,email:N}}catch{return null}}async function kT(){let B=await ST();if(B){let{auth:I,email:C}=B;return{id:crypto.randomUUID(),name:C?`Codex Plus (${C})`:"Codex Subscription",type:"codex-subscription",email:C||void 0,supportedClients:cI("codex-subscription"),authData:I,createdAt:new Date().toISOString()}}try{let I=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),C=await new Response(I.stdout).text();if(await I.exited!==0||!C.includes("Logged in")||C.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:cI("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function X1(){let B=[],[I,C]=await Promise.all([OT(),kT()]);if(I)B.push(I);if(C)B.push(C);return B}async function q1(B){let I=await EB(),C=I.providers??[],g=new Set(C.map((N)=>`${N.type}:${N.email||""}`)),F=0;for(let N of B){let H=`${N.type}:${N.email||""}`;if(!g.has(H))C.push(N),g.add(H),F++;else if(N.authData){let J=C.find((M)=>M.type===N.type&&M.email===N.email);if(J)J.authData=N.authData}}if(F>0){if(I.providers=C,!I.defaultProviderId&&C.length>0)I.defaultProviderId=C[0].id;await uI(I)}return F}async function L5(){let B=await EB();if(!B.apiKey||B.providers&&B.providers.length>0)return!1;let I={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:B.apiKey,baseUrl:RI,apiId:B.apiId,supportedClients:cI("tako"),createdAt:new Date().toISOString(),builtin:!0};return B.providers=[I],B.defaultProviderId=I.id,await uI(B),!0}async function M5(){let B=await EB(),I=B.providers??[],C=!1;for(let g of I)if(g.type==="tako"&&!g.builtin)g.builtin=!0,C=!0;if(B.apiKey&&!I.some((g)=>g.type==="tako")){if(I.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:B.apiKey,baseUrl:RI,apiId:B.apiId,supportedClients:cI("tako"),createdAt:new Date().toISOString(),builtin:!0}),!B.defaultProviderId)B.defaultProviderId=I[I.length-1].id;C=!0}if(C)B.providers=I,await uI(B)}var mE=a(()=>{MQ();dC();dC()});var fW={};w0(fW,{showRegionInfo:()=>W5,getNpmRegistry:()=>oI,getMirrors:()=>hW,getLatestBunVersion:()=>bW,getBunMirrorDownloadUrl:()=>K5,getBunInstallCommand:()=>u5,detectRegion:()=>sC,MIRRORS:()=>O1});import{readFileSync as aT,writeFileSync as oT,mkdirSync as nT}from"fs";import{join as PW}from"path";import{homedir as _W}from"os";function sT(){let B=process.env.TAKO_REGION?.trim().toLowerCase();if(B==="cn"||B==="china")return"cn";if(B==="global"||B==="intl"||B==="international")return"global";return null}function tT(){try{let B=aT(mW,"utf-8"),I=JSON.parse(B);if(I.region!=="cn"&&I.region!=="global")return null;if(typeof I.detectedAt!=="number")return null;if(Date.now()-I.detectedAt>rT)return null;return I.region}catch{return null}}function VW(B){try{nT(PW(_W(),".tako"),{recursive:!0}),oT(mW,JSON.stringify({region:B,detectedAt:Date.now()}),"utf-8")}catch{}}function eT(){try{let I=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(I)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(I))return"cn"}}catch{}let B=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(B.startsWith("zh_cn")||B.startsWith("zh-cn"))return"cn";return null}async function Av(){if(p3)return p3;return p3=(async()=>{let I=[Bv,Qv,Iv,Ev].map((C)=>C().then((g)=>g?g:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(I),new Promise((g,F)=>setTimeout(()=>F(Error("net-timeout")),1200))])}catch{return"cn"}})(),p3}async function sC(){if(k2)return k2;let B=sT();if(B)return k2=B,B;let I=tT();if(I)return k2=I,I;let C=eT();if(C)return k2=C,VW(C),C;let g=await Av();return k2=g,VW(g),g}async function Bv(){try{let B=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!B.ok)return null;return(await B.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function Qv(){try{let B=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!B.ok)return null;return(await B.json()).country==="CN"?"cn":"global"}catch{return null}}async function Iv(){try{let B=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!B.ok)return null;return(await B.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function Ev(){let B=[async()=>{let I=await fetch("https://myip.ipip.net/json",{signal:AbortSignal.timeout(800)});if(!I.ok)return null;let C=await I.json(),g=C?.data?.location;if(Array.isArray(g)&&g[0]==="\u4E2D\u56FD")return"cn";let F=C?.data?.country_code;return F==="CN"?"cn":F?"global":null},async()=>{let I=await fetch("https://whois.pconline.com.cn/ipJson.jsp?json=true",{signal:AbortSignal.timeout(800)});if(!I.ok)return null;let C=await I.text();try{let g=JSON.parse(C.trim());if(g.proCode&&/^\d{6}$/.test(g.proCode))return"cn"}catch{}return null},async()=>{let I=await fetch("http://ip.3322.net/api/",{signal:AbortSignal.timeout(600)});if(!I.ok)return null;let C=(await I.text()).trim();if(/^\d+\.\d+\.\d+\.\d+$/.test(C))return"cn";return null}];try{return await Promise.any(B.map((I)=>I().then((C)=>C??Promise.reject())))}catch{return null}}async function hW(){let B=await sC();return O1[B]}async function oI(){return(await hW()).npm}function u5(){return"curl -fsSL https://bun.sh/install | bash"}async function bW(){let B=O1.cn.bunBinary,I=await fetch(`${B}/`,{signal:AbortSignal.timeout(1e4)});if(!I.ok)throw Error(`Failed to fetch bun versions: ${I.status}`);let g=(await I.json()).map((F)=>F.name.replace(/\/$/,"")).filter((F)=>/^bun-v\d+\.\d+\.\d+$/.test(F)).sort((F,N)=>{let H=F.replace("bun-v","").split(".").map(Number),J=N.replace("bun-v","").split(".").map(Number);for(let M=0;M<3;M++)if(H[M]!==J[M])return J[M]-H[M];return 0});if(g.length===0)throw Error("No bun versions found on mirror");return g[0]}async function K5(){let B=O1.cn.bunBinary,I=await bW(),g={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",F=process.arch==="arm64"?"aarch64":"x64",N=`bun-${g}-${F}`;return`${B}/${I}/${N}.zip`}async function W5(){let B=await sC(),I=O1[B];if(B==="cn")aA.info(`${hA("region.usingChinaMirror")} npm: ${I.npm}`);else aA.info(hA("region.usingGlobalMirror"))}var k2=null,p3=null,mW,rT=2592000000,O1;var z2=a(()=>{OQ();t0();mW=PW(_W(),".tako","region.json"),O1={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}}});var Cv=class{constructor(B){this.baseUrl=B.baseUrl,this.headers={"Content-Type":"application/json",...B.defaultHeaders},this.maxRetries=B.maxRetries??3,this.initialRetryDelay=B.initialRetryDelay??500}async resolveHeaders(){let B={};for(let[I,C]of Object.entries(this.headers)){let g=await C;g!==null&&(B[I]=g)}return B}addHeader(B,I){this.headers[B]=I}async post(B,I,C,g){try{let F=await fetch(B,{method:"POST",headers:await this.resolveHeaders(),body:I?JSON.stringify(I??{}):void 0,keepalive:!0,...C});if(F.status===401)return null;if(F.status!==200&&F.status!==202)throw Error(`HTTP error! status: ${F.status}`);let N=await F.text();return N?JSON.parse(N):null}catch(F){if(g<this.maxRetries){let N=this.initialRetryDelay*2**g;return await new Promise((H)=>setTimeout(H,N)),this.post(B,I,C,g+1)}return console.error("Max retries reached:",F),null}}async fetch(B,I,C={}){let g=`${this.baseUrl}${B}`;return this.post(g,I,C,0)}},jW=class{constructor(B){this.groups=[],this.queue=[],this.options=B;let I={"openpanel-client-id":B.clientId};B.clientSecret&&(I["openpanel-client-secret"]=B.clientSecret),I["openpanel-sdk-name"]=B.sdk||"node",I["openpanel-sdk-version"]=B.sdkVersion||"1.3.1",this.api=new Cv({baseUrl:B.apiUrl||"https://api.openpanel.dev",defaultHeaders:I})}init(){}ready(){this.options.disabled=!1,this.options.waitForProfile=!1,this.flush()}shouldQueue(B){return!!(this.options.disabled||this.options.waitForProfile&&!this.profileId||B.type==="replay"&&!this.sessionId)}addQueue(B){B.type==="track"&&(B.payload.properties={...B.payload.properties??{},__timestamp:new Date().toISOString()}),this.queue.push(B)}async send(B){if(this.options.filter&&!this.options.filter(B))return Promise.resolve();if(this.shouldQueue(B))return this.addQueue(B),Promise.resolve();let I=await this.api.fetch("/track",B,{keepalive:B.type!=="replay"});this.deviceId=I?.deviceId;let C=!!this.sessionId;return this.sessionId=I?.sessionId,!C&&this.sessionId&&this.flush(),I}setGlobalProperties(B){this.global={...this.global,...B}}track(B,I){this.log("track event",B,I);let{groups:C,profileId:g,...F}=I??{},N=[...new Set([...this.groups,...C??[]])];return this.send({type:"track",payload:{name:B,profileId:g??this.profileId,groups:N.length>0?N:void 0,properties:{...this.global??{},...F}}})}identify(B){if(this.log("identify user",B),B.profileId&&(this.profileId=B.profileId,this.flush()),B.profileId&&Object.keys(B).length>1)return this.send({type:"identify",payload:{...B,properties:{...this.global,...B.properties}}})}upsertGroup(B){return this.log("upsert group",B),this.send({type:"group",payload:B})}setGroup(B){return this.log("set group",B),this.groups.includes(B)||(this.groups=[...this.groups,B]),this.send({type:"assign_group",payload:{groupIds:[B],profileId:this.profileId}})}setGroups(B){return this.log("set groups",B),this.groups=[...new Set([...this.groups,...B])],this.send({type:"assign_group",payload:{groupIds:B,profileId:this.profileId}})}alias(B){}increment(B){return this.send({type:"increment",payload:B})}decrement(B){return this.send({type:"decrement",payload:B})}revenue(B,I){let C=I?.deviceId;return delete I?.deviceId,this.track("revenue",{...I??{},...C?{__deviceId:C}:{},__revenue:B})}getDeviceId(){return this.deviceId??""}getSessionId(){return this.sessionId??""}fetchDeviceId(){return Promise.resolve(this.deviceId??"")}clear(){this.profileId=void 0,this.groups=[],this.deviceId=void 0,this.sessionId=void 0}buildFlushPayload(B){if(B.type==="replay")return B.payload;if(B.type==="track"){let I="groups"in B.payload?B.payload.groups??[]:[],C=[...new Set([...this.groups,...I])];return{...B.payload,profileId:B.payload.profileId??this.profileId,groups:C.length>0?C:void 0}}return B.type==="identify"||B.type==="increment"||B.type==="decrement"?{...B.payload,profileId:B.payload.profileId??this.profileId}:B.type==="assign_group"?{...B.payload,profileId:B.payload.profileId??this.profileId}:B.payload}flush(){let B=[];for(let I of this.queue){if(this.shouldQueue(I)){B.push(I);continue}let C=this.buildFlushPayload(I);this.send({...I,payload:C})}this.queue=B}log(...B){this.options.debug&&console.log("[OpenPanel.dev]",...B)}};var xW=()=>{};function pW(){if(!$2)$2=new jW({clientId:gv,clientSecret:Dv,apiUrl:Fv});return $2}function iW(B,I,C){let g=pW().track(B,{profileId:I,...C}).catch(()=>{});i3.push(g)}function dW(B,I){let{email:C,...g}=I,F=pW().identify({profileId:B,...typeof C==="string"?{email:C}:{},firstName:String(g.platform||""),properties:g}).catch(()=>{});i3.push(F)}async function cW(){if(await Promise.allSettled(i3),i3.length=0,$2){try{$2.flush()}catch{}$2=null}}var gv="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",Dv="sec_1e0ea34016bc3a5f8ef5",Fv="https://op.shiroha.tech/api",$2=null,i3;var lW=a(()=>{xW();i3=[]});function aW(){return{cli_version:wv,platform:process.platform,arch:process.arch,locale:UE(),node_version:process.version}}function oW(B){return Bun.hash(B).toString(16).slice(0,8)}var wv="0.3.3";var Y5=a(()=>{OQ()});async function nW(){if(y2!==null)return y2;try{return y2=(await EB()).telemetryEnabled!==!1,y2}catch{return y2=!1,!1}}async function rW(){try{let B=await EB();if(B.apiId)return B.apiId;let I=B.providers??[],C=B.defaultProviderId,g=C?I.find((F)=>F.id===C):I[0];if(g){if(g.apiId)return g.apiId;if(g.email)return g.email;return g.id}return"anonymous"}catch{return"anonymous"}}async function hE(){if(Z5)return;try{if(!await nW())return;let B=await EB(),I=await rW();if(I==="anonymous")return;let g=(B.providers??[]).find((N)=>N.email)?.email,F=await sC();dW(I,{...g?{email:g}:{},region:F,locale:UE(),first_seen_version:Gv,platform:process.platform,arch:process.arch}),Z5=!0}catch{}}function _Q(B,I){Nv(B,I).catch(()=>{})}async function Nv(B,I){try{if(!await nW())return;let C=await rW();iW(B,C,{...aW(),...I})}catch{}}async function S1(){await cW()}function IC(){y2=null,Z5=!1}var Gv="0.3.3",Z5=!1,y2=null;var M0=a(()=>{lW();MQ();z2();OQ();Y5();Y5()});function Lv(B,I){let C=[];if(I.phase)C.push(I.phase);if(I.pkgCount>0)C.push(`\u5DF2\u5904\u7406 ${I.pkgCount} \u4E2A\u5305`);return C.push(`${I.elapsedSec}s`),`${B} \xB7 ${C.join(" \xB7 ")}`}async function d3(B,I,C){let g=Date.now(),F={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},N=[],H=()=>{F.elapsedSec=Math.floor((Date.now()-g)/1000),C(Lv(I,F))};H();let J=setInterval(H,1000),M=(X)=>{if(!X)return;if(N.push(X),Hv.test(X))F.phase="\u89E3\u6790\u4F9D\u8D56";else if(sW.test(X)){F.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let O=X.match(sW);if(O)F.pkgCount=parseInt(O[1],10)}else if(Uv.test(X))F.phase="\u5199\u5165 lockfile";else if(Jv.test(X))F.phase="\u5B8C\u6210";H()},R=async(X)=>{if(!X)return;let O=X.getReader(),Z=new TextDecoder,k="";try{while(!0){let{done:v,value:S}=await O.read();if(v)break;k+=Z.decode(S,{stream:!0}).replace(/\r/g,"");let V=k.split(`
|
|
279
|
+
`)}}var ZW="Claude Code-credentials",qW,OW,N5,SW;var x3=a(()=>{qW=H5(YW(),".claude"),OW=H5(qW,".credentials.json"),N5=H5(YW(),".claude.json"),SW=LT()==="darwin"});var kW={};w0(kW,{updateProvider:()=>ED,setDefaultProvider:()=>J5,setClientProvider:()=>Z1,resolveXiaomiBaseUrl:()=>Z6,resolveProviderContext:()=>zI,migrateIfNeeded:()=>L5,mergeDetectedProviders:()=>q1,isProviderCompatible:()=>g2,getProvidersForClient:()=>BC,getProviders:()=>kI,getProvider:()=>qT,getModelChoices:()=>pF,getDefaultSupportedClients:()=>cI,getDefaultProvider:()=>aI,getDefaultModel:()=>C2,getDefaultBaseUrl:()=>K6,getClientProvider:()=>QC,fixupProviders:()=>M5,detectProviders:()=>X1,deleteProvider:()=>U5,addProvider:()=>ID,XIAOMI_TOKEN_PLAN_URL:()=>L7,XIAOMI_ANTHROPIC_URL:()=>Y6,PROVIDER_TYPE_NAMES:()=>wE,DEEPSEEK_ANTHROPIC_URL:()=>W6});async function kI(){return(await EB()).providers??[]}async function qT(B){return(await kI()).find((C)=>C.id===B)}async function aI(){let B=await EB(),I=B.providers??[];if(I.length===0)return;if(B.defaultProviderId){let C=I.find((g)=>g.id===B.defaultProviderId);if(C)return C}return I[0]}async function BC(B){return(await kI()).filter((g)=>g2(g,B)).sort((g,F)=>{let N=g.lastUsedAt?new Date(g.lastUsedAt).getTime():0,H=F.lastUsedAt?new Date(F.lastUsedAt).getTime():0;if(N!==H)return H-N;return new Date(F.createdAt).getTime()-new Date(g.createdAt).getTime()})}async function ID(B){let I=await EB(),C={...B,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(I.providers=[...I.providers??[],C],!I.defaultProviderId)I.defaultProviderId=C.id;return await uI(I),C}async function ED(B,I){let C=await EB(),g=C.providers??[],F=g.findIndex((N)=>N.id===B);if(F===-1)return;g[F]={...g[F],...I},C.providers=g,await uI(C)}async function U5(B){let I=await EB();if((I.providers??[]).find((g)=>g.id===B)?.builtin)return;if(I.providers=(I.providers??[]).filter((g)=>g.id!==B),I.defaultProviderId===B)I.defaultProviderId=I.providers[0]?.id;if(I.clientProviderMap){for(let[g,F]of Object.entries(I.clientProviderMap))if(F===B)delete I.clientProviderMap[g]}await uI(I)}async function J5(B){let I=await EB();if(!(I.providers??[]).some((g)=>g.id===B))return;I.defaultProviderId=B,await uI(I)}async function QC(B){let I=await EB(),C=I.clientProviderMap?.[B];if(C){let g=(I.providers??[]).find((F)=>F.id===C);if(g&&g2(g,B))return g}return}async function Z1(B,I){let C=await EB();C.clientProviderMap={...C.clientProviderMap,[B]:I};let g=C.providers??[],F=g.findIndex((N)=>N.id===I);if(F!==-1)g[F]={...g[F],lastUsedAt:new Date().toISOString()},C.providers=g;await uI(C)}function zI(B){return{type:B.type,apiKey:B.apiKey,baseUrl:B.baseUrl,authData:B.authData,model:B.model,modelContextWindow:B.modelContextWindow}}async function OT(){try{let B=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),I=await new Response(B.stdout).text();if(await B.exited!==0)return null;let g=JSON.parse(I.trim());if(!g.loggedIn||g.authMethod!=="claude.ai")return null;let F=g.subscriptionType||"pro",N=g.email||"",H=`Claude ${F.charAt(0).toUpperCase()+F.slice(1)}${N?` (${N})`:""}`,{readClaudeAuth:J}=await Promise.resolve().then(() => (x3(),j3)),M=await J(),R=M.credentials||M.oauthAccount?{credentials:M.credentials,oauthAccount:M.oauthAccount}:void 0;return{id:crypto.randomUUID(),name:H,type:"claude-subscription",supportedClients:cI("claude-subscription"),createdAt:new Date().toISOString(),email:N,subscriptionType:F,authData:R}}catch{return null}}async function ST(){try{let{homedir:B}=await import("os"),{join:I}=await import("path"),C=await import("fs/promises"),g=I(B(),".codex","auth.json"),F=JSON.parse(await C.readFile(g,"utf-8"));if(F.auth_mode!=="chatgpt"||!F.tokens?.access_token)return null;let N="";try{N=JSON.parse(atob(F.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:F,email:N}}catch{return null}}async function kT(){let B=await ST();if(B){let{auth:I,email:C}=B;return{id:crypto.randomUUID(),name:C?`Codex Plus (${C})`:"Codex Subscription",type:"codex-subscription",email:C||void 0,supportedClients:cI("codex-subscription"),authData:I,createdAt:new Date().toISOString()}}try{let I=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),C=await new Response(I.stdout).text();if(await I.exited!==0||!C.includes("Logged in")||C.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:cI("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function X1(){let B=[],[I,C]=await Promise.all([OT(),kT()]);if(I)B.push(I);if(C)B.push(C);return B}async function q1(B){let I=await EB(),C=I.providers??[],g=new Set(C.map((N)=>`${N.type}:${N.email||""}`)),F=0;for(let N of B){let H=`${N.type}:${N.email||""}`;if(!g.has(H))C.push(N),g.add(H),F++;else if(N.authData){let J=C.find((M)=>M.type===N.type&&M.email===N.email);if(J)J.authData=N.authData}}if(F>0){if(I.providers=C,!I.defaultProviderId&&C.length>0)I.defaultProviderId=C[0].id;await uI(I)}return F}async function L5(){let B=await EB();if(!B.apiKey||B.providers&&B.providers.length>0)return!1;let I={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:B.apiKey,baseUrl:RI,apiId:B.apiId,supportedClients:cI("tako"),createdAt:new Date().toISOString(),builtin:!0};return B.providers=[I],B.defaultProviderId=I.id,await uI(B),!0}async function M5(){let B=await EB(),I=B.providers??[],C=!1;for(let g of I)if(g.type==="tako"&&!g.builtin)g.builtin=!0,C=!0;if(B.apiKey&&!I.some((g)=>g.type==="tako")){if(I.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:B.apiKey,baseUrl:RI,apiId:B.apiId,supportedClients:cI("tako"),createdAt:new Date().toISOString(),builtin:!0}),!B.defaultProviderId)B.defaultProviderId=I[I.length-1].id;C=!0}if(C)B.providers=I,await uI(B)}var mE=a(()=>{MQ();dC();dC()});var fW={};w0(fW,{showRegionInfo:()=>W5,getNpmRegistry:()=>oI,getMirrors:()=>hW,getLatestBunVersion:()=>bW,getBunMirrorDownloadUrl:()=>K5,getBunInstallCommand:()=>u5,detectRegion:()=>sC,MIRRORS:()=>O1});import{readFileSync as aT,writeFileSync as oT,mkdirSync as nT}from"fs";import{join as PW}from"path";import{homedir as _W}from"os";function sT(){let B=process.env.TAKO_REGION?.trim().toLowerCase();if(B==="cn"||B==="china")return"cn";if(B==="global"||B==="intl"||B==="international")return"global";return null}function tT(){try{let B=aT(mW,"utf-8"),I=JSON.parse(B);if(I.region!=="cn"&&I.region!=="global")return null;if(typeof I.detectedAt!=="number")return null;if(Date.now()-I.detectedAt>rT)return null;return I.region}catch{return null}}function VW(B){try{nT(PW(_W(),".tako"),{recursive:!0}),oT(mW,JSON.stringify({region:B,detectedAt:Date.now()}),"utf-8")}catch{}}function eT(){try{let I=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(I)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(I))return"cn"}}catch{}let B=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(B.startsWith("zh_cn")||B.startsWith("zh-cn"))return"cn";return null}async function Av(){if(p3)return p3;return p3=(async()=>{let I=[Bv,Qv,Iv,Ev].map((C)=>C().then((g)=>g?g:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(I),new Promise((g,F)=>setTimeout(()=>F(Error("net-timeout")),1200))])}catch{return"cn"}})(),p3}async function sC(){if(k2)return k2;let B=sT();if(B)return k2=B,B;let I=tT();if(I)return k2=I,I;let C=eT();if(C)return k2=C,VW(C),C;let g=await Av();return k2=g,VW(g),g}async function Bv(){try{let B=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!B.ok)return null;return(await B.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function Qv(){try{let B=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!B.ok)return null;return(await B.json()).country==="CN"?"cn":"global"}catch{return null}}async function Iv(){try{let B=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!B.ok)return null;return(await B.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function Ev(){let B=[async()=>{let I=await fetch("https://myip.ipip.net/json",{signal:AbortSignal.timeout(800)});if(!I.ok)return null;let C=await I.json(),g=C?.data?.location;if(Array.isArray(g)&&g[0]==="\u4E2D\u56FD")return"cn";let F=C?.data?.country_code;return F==="CN"?"cn":F?"global":null},async()=>{let I=await fetch("https://whois.pconline.com.cn/ipJson.jsp?json=true",{signal:AbortSignal.timeout(800)});if(!I.ok)return null;let C=await I.text();try{let g=JSON.parse(C.trim());if(g.proCode&&/^\d{6}$/.test(g.proCode))return"cn"}catch{}return null},async()=>{let I=await fetch("http://ip.3322.net/api/",{signal:AbortSignal.timeout(600)});if(!I.ok)return null;let C=(await I.text()).trim();if(/^\d+\.\d+\.\d+\.\d+$/.test(C))return"cn";return null}];try{return await Promise.any(B.map((I)=>I().then((C)=>C??Promise.reject())))}catch{return null}}async function hW(){let B=await sC();return O1[B]}async function oI(){return(await hW()).npm}function u5(){return"curl -fsSL https://bun.sh/install | bash"}async function bW(){let B=O1.cn.bunBinary,I=await fetch(`${B}/`,{signal:AbortSignal.timeout(1e4)});if(!I.ok)throw Error(`Failed to fetch bun versions: ${I.status}`);let g=(await I.json()).map((F)=>F.name.replace(/\/$/,"")).filter((F)=>/^bun-v\d+\.\d+\.\d+$/.test(F)).sort((F,N)=>{let H=F.replace("bun-v","").split(".").map(Number),J=N.replace("bun-v","").split(".").map(Number);for(let M=0;M<3;M++)if(H[M]!==J[M])return J[M]-H[M];return 0});if(g.length===0)throw Error("No bun versions found on mirror");return g[0]}async function K5(){let B=O1.cn.bunBinary,I=await bW(),g={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",F=process.arch==="arm64"?"aarch64":"x64",N=`bun-${g}-${F}`;return`${B}/${I}/${N}.zip`}async function W5(){let B=await sC(),I=O1[B];if(B==="cn")aA.info(`${hA("region.usingChinaMirror")} npm: ${I.npm}`);else aA.info(hA("region.usingGlobalMirror"))}var k2=null,p3=null,mW,rT=2592000000,O1;var z2=a(()=>{OQ();t0();mW=PW(_W(),".tako","region.json"),O1={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}}});var Cv=class{constructor(B){this.baseUrl=B.baseUrl,this.headers={"Content-Type":"application/json",...B.defaultHeaders},this.maxRetries=B.maxRetries??3,this.initialRetryDelay=B.initialRetryDelay??500}async resolveHeaders(){let B={};for(let[I,C]of Object.entries(this.headers)){let g=await C;g!==null&&(B[I]=g)}return B}addHeader(B,I){this.headers[B]=I}async post(B,I,C,g){try{let F=await fetch(B,{method:"POST",headers:await this.resolveHeaders(),body:I?JSON.stringify(I??{}):void 0,keepalive:!0,...C});if(F.status===401)return null;if(F.status!==200&&F.status!==202)throw Error(`HTTP error! status: ${F.status}`);let N=await F.text();return N?JSON.parse(N):null}catch(F){if(g<this.maxRetries){let N=this.initialRetryDelay*2**g;return await new Promise((H)=>setTimeout(H,N)),this.post(B,I,C,g+1)}return console.error("Max retries reached:",F),null}}async fetch(B,I,C={}){let g=`${this.baseUrl}${B}`;return this.post(g,I,C,0)}},jW=class{constructor(B){this.groups=[],this.queue=[],this.options=B;let I={"openpanel-client-id":B.clientId};B.clientSecret&&(I["openpanel-client-secret"]=B.clientSecret),I["openpanel-sdk-name"]=B.sdk||"node",I["openpanel-sdk-version"]=B.sdkVersion||"1.3.1",this.api=new Cv({baseUrl:B.apiUrl||"https://api.openpanel.dev",defaultHeaders:I})}init(){}ready(){this.options.disabled=!1,this.options.waitForProfile=!1,this.flush()}shouldQueue(B){return!!(this.options.disabled||this.options.waitForProfile&&!this.profileId||B.type==="replay"&&!this.sessionId)}addQueue(B){B.type==="track"&&(B.payload.properties={...B.payload.properties??{},__timestamp:new Date().toISOString()}),this.queue.push(B)}async send(B){if(this.options.filter&&!this.options.filter(B))return Promise.resolve();if(this.shouldQueue(B))return this.addQueue(B),Promise.resolve();let I=await this.api.fetch("/track",B,{keepalive:B.type!=="replay"});this.deviceId=I?.deviceId;let C=!!this.sessionId;return this.sessionId=I?.sessionId,!C&&this.sessionId&&this.flush(),I}setGlobalProperties(B){this.global={...this.global,...B}}track(B,I){this.log("track event",B,I);let{groups:C,profileId:g,...F}=I??{},N=[...new Set([...this.groups,...C??[]])];return this.send({type:"track",payload:{name:B,profileId:g??this.profileId,groups:N.length>0?N:void 0,properties:{...this.global??{},...F}}})}identify(B){if(this.log("identify user",B),B.profileId&&(this.profileId=B.profileId,this.flush()),B.profileId&&Object.keys(B).length>1)return this.send({type:"identify",payload:{...B,properties:{...this.global,...B.properties}}})}upsertGroup(B){return this.log("upsert group",B),this.send({type:"group",payload:B})}setGroup(B){return this.log("set group",B),this.groups.includes(B)||(this.groups=[...this.groups,B]),this.send({type:"assign_group",payload:{groupIds:[B],profileId:this.profileId}})}setGroups(B){return this.log("set groups",B),this.groups=[...new Set([...this.groups,...B])],this.send({type:"assign_group",payload:{groupIds:B,profileId:this.profileId}})}alias(B){}increment(B){return this.send({type:"increment",payload:B})}decrement(B){return this.send({type:"decrement",payload:B})}revenue(B,I){let C=I?.deviceId;return delete I?.deviceId,this.track("revenue",{...I??{},...C?{__deviceId:C}:{},__revenue:B})}getDeviceId(){return this.deviceId??""}getSessionId(){return this.sessionId??""}fetchDeviceId(){return Promise.resolve(this.deviceId??"")}clear(){this.profileId=void 0,this.groups=[],this.deviceId=void 0,this.sessionId=void 0}buildFlushPayload(B){if(B.type==="replay")return B.payload;if(B.type==="track"){let I="groups"in B.payload?B.payload.groups??[]:[],C=[...new Set([...this.groups,...I])];return{...B.payload,profileId:B.payload.profileId??this.profileId,groups:C.length>0?C:void 0}}return B.type==="identify"||B.type==="increment"||B.type==="decrement"?{...B.payload,profileId:B.payload.profileId??this.profileId}:B.type==="assign_group"?{...B.payload,profileId:B.payload.profileId??this.profileId}:B.payload}flush(){let B=[];for(let I of this.queue){if(this.shouldQueue(I)){B.push(I);continue}let C=this.buildFlushPayload(I);this.send({...I,payload:C})}this.queue=B}log(...B){this.options.debug&&console.log("[OpenPanel.dev]",...B)}};var xW=()=>{};function pW(){if(!$2)$2=new jW({clientId:gv,clientSecret:Dv,apiUrl:Fv});return $2}function iW(B,I,C){let g=pW().track(B,{profileId:I,...C}).catch(()=>{});i3.push(g)}function dW(B,I){let{email:C,...g}=I,F=pW().identify({profileId:B,...typeof C==="string"?{email:C}:{},firstName:String(g.platform||""),properties:g}).catch(()=>{});i3.push(F)}async function cW(){if(await Promise.allSettled(i3),i3.length=0,$2){try{$2.flush()}catch{}$2=null}}var gv="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",Dv="sec_1e0ea34016bc3a5f8ef5",Fv="https://op.shiroha.tech/api",$2=null,i3;var lW=a(()=>{xW();i3=[]});function aW(){return{cli_version:wv,platform:process.platform,arch:process.arch,locale:UE(),node_version:process.version}}function oW(B){return Bun.hash(B).toString(16).slice(0,8)}var wv="0.3.4";var Y5=a(()=>{OQ()});async function nW(){if(y2!==null)return y2;try{return y2=(await EB()).telemetryEnabled!==!1,y2}catch{return y2=!1,!1}}async function rW(){try{let B=await EB();if(B.apiId)return B.apiId;let I=B.providers??[],C=B.defaultProviderId,g=C?I.find((F)=>F.id===C):I[0];if(g){if(g.apiId)return g.apiId;if(g.email)return g.email;return g.id}return"anonymous"}catch{return"anonymous"}}async function hE(){if(Z5)return;try{if(!await nW())return;let B=await EB(),I=await rW();if(I==="anonymous")return;let g=(B.providers??[]).find((N)=>N.email)?.email,F=await sC();dW(I,{...g?{email:g}:{},region:F,locale:UE(),first_seen_version:Gv,platform:process.platform,arch:process.arch}),Z5=!0}catch{}}function _Q(B,I){Nv(B,I).catch(()=>{})}async function Nv(B,I){try{if(!await nW())return;let C=await rW();iW(B,C,{...aW(),...I})}catch{}}async function S1(){await cW()}function IC(){y2=null,Z5=!1}var Gv="0.3.4",Z5=!1,y2=null;var M0=a(()=>{lW();MQ();z2();OQ();Y5();Y5()});function Lv(B,I){let C=[];if(I.phase)C.push(I.phase);if(I.pkgCount>0)C.push(`\u5DF2\u5904\u7406 ${I.pkgCount} \u4E2A\u5305`);return C.push(`${I.elapsedSec}s`),`${B} \xB7 ${C.join(" \xB7 ")}`}async function d3(B,I,C){let g=Date.now(),F={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},N=[],H=()=>{F.elapsedSec=Math.floor((Date.now()-g)/1000),C(Lv(I,F))};H();let J=setInterval(H,1000),M=(X)=>{if(!X)return;if(N.push(X),Hv.test(X))F.phase="\u89E3\u6790\u4F9D\u8D56";else if(sW.test(X)){F.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let O=X.match(sW);if(O)F.pkgCount=parseInt(O[1],10)}else if(Uv.test(X))F.phase="\u5199\u5165 lockfile";else if(Jv.test(X))F.phase="\u5B8C\u6210";H()},R=async(X)=>{if(!X)return;let O=X.getReader(),Z=new TextDecoder,k="";try{while(!0){let{done:v,value:S}=await O.read();if(v)break;k+=Z.decode(S,{stream:!0}).replace(/\r/g,"");let V=k.split(`
|
|
280
280
|
`);k=V.pop()??"";for(let d of V)M(d)}if(k)M(k)}finally{O.releaseLock()}};try{await Promise.all([R(B.stderr),R(B.stdout)])}finally{clearInterval(J)}return N.join(`
|
|
281
281
|
`)}var Hv,sW,Uv,Jv;var X5=a(()=>{Hv=/^Resolving dependencies/,sW=/^Resolved, downloaded and extracted \[(\d+)\]/,Uv=/^Saved lockfile/,Jv=/^(\d+) packages? installed/});import{join as mQ}from"path";function Mv(B){return B.startsWith(G0)}function tW(B){return{...process.env,BUN_CONFIG_REGISTRY:B,BUN_INSTALL_CACHE_DIR:eN}}async function Rv(){try{if(!await Bun.file(nQ).exists())return null;let I=Bun.spawn([nQ,"--version"],{stdout:"pipe",stderr:"pipe"});if(await I.exited,I.exitCode!==0)return null;return(await new Response(I.stdout).text()).trim()}catch{return null}}async function eW(){return await Rv()!==null}async function uv(){if(process.platform==="win32")return!0;try{let I=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await I.exited,I.exitCode===0)return!0}catch{}aA.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let B=["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 I of B)try{let C=Bun.spawn(["bash","-c",`sudo ${I} 2>/dev/null || ${I}`],{stdout:"pipe",stderr:"pipe"});if(await C.exited,C.exitCode===0)return!0}catch{}return!1}async function Kv(B){let I=await import("fs/promises"),{join:C}=await import("path"),g=process.platform==="win32",F=g?"bun.exe":"bun",N=await K5();aA.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${N}`);let H=await fetch(N);if(!H.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${H.status}`);let J=C(B,"bun-download.zip");await Bun.write(J,H);let M=C(B,"bin");if(await I.mkdir(M,{recursive:!0}),g){let X=`Expand-Archive -Path "${J}" -DestinationPath "${B}" -Force`,O=Bun.spawn(["powershell","-Command",X],{stdout:"pipe",stderr:"pipe"});if(await O.exited,O.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let X=Bun.spawn(["unzip","-oq",J,"-d",B],{stdout:"pipe",stderr:"pipe"});if(await X.exited,X.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let R=await I.readdir(B);for(let X of R){let O=C(B,X);if((await I.stat(O)).isDirectory()&&X.startsWith("bun-")){let k=C(O,F);try{if(await I.access(k),await I.rename(k,C(M,F)),!g)await I.chmod(C(M,F),493);await I.rm(O,{recursive:!0,force:!0});break}catch{}}}return await I.rm(J,{force:!0}),!0}async function Wv(){let B=xg();if(!await uv())return aA.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await W5(),B.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(G0,{recursive:!0}),await sC()==="cn")await Kv(G0);else if(process.platform==="win32"){let g=`$env:BUN_INSTALL="${G0}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",g],{stdout:"inherit",stderr:"inherit"}).exited!==0)return B.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let g=`BUN_INSTALL="${G0}" ${u5()}`;if(await Bun.spawn(["bash","-c",g],{stdout:"inherit",stderr:"inherit"}).exited!==0)return B.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return CD=nQ,B.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),aA.info(`\u5B89\u88C5\u4F4D\u7F6E: ${G0}`),!0}catch(I){return B.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Yv(){if(await eW())return CD=nQ,!0;return aA.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),aA.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await Wv()}async function EC(){if(CD){if(!Mv(CD))CD=nQ;return CD}if(await eW())return CD=nQ,nQ;return nQ}async function $5(B){try{let I=await oI(),C=await fetch(`${I}/${B}/latest`);if(!C.ok)return null;return(await C.json()).version}catch{return null}}async function Zv(B){return(await EB()).installedClients[B.id]?.version||null}async function Xv(B,I){let C=mQ(B,"node_modules",I,"package.json");try{return await Bun.file(C).exists()}catch{return!1}}async function AY(B){let I=r0(B.id);return Xv(I,B.package)}async function BY(B){let I=await Zv(B);if(!I)return!0;let C=await $5(B.package);if(!C)return!1;return I!==C}function QY(B){let{platform:I,arch:C}=process,g=`${I}-${C}`;for(let[F,N]of Object.entries(B))if(F.endsWith(g))return{pkg:F,version:N};return null}async function IY(B,I,C,g){let F=mQ(I,"node_modules",B.package,"package.json");try{let N=Bun.file(F);if(!await N.exists())return;let J=(await N.json()).optionalDependencies;if(!J||typeof J!=="object")return;let M=QY(J);if(!M)return;let X=process.platform==="win32"?`${B.command}.exe`:B.command,O=mQ(I,"node_modules",M.pkg,X),Z=Bun.file(O);if(await Z.exists()&&Z.size>1024)return;aA.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${M.pkg}...`);for(let k of[M.version,"latest"]){let v=Bun.spawn([C,"add",`${M.pkg}@${k}`],{cwd:I,stdout:"pipe",stderr:"pipe",env:tW(g)});if(await v.exited,v.exitCode===0)break;if(k==="latest"){let S=await new Response(v.stderr).text();aA.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${S.slice(0,200)}`)}}}catch(N){aA.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${N instanceof Error?N.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function S5(B,I){let C=await import("fs/promises"),g=mQ(I,"node_modules",B.package,"package.json");try{let F=Bun.file(g);if(!await F.exists())return!1;let N=await F.json(),H=N.optionalDependencies;if(!H)return!0;let J=QY(H);if(!J)return aA.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let M=N.bin,R=typeof M==="string"?M:M?.[B.command];if(!R)return!1;let X=mQ(I,"node_modules",B.package,R),O=process.platform==="win32",Z=O?`${B.command}.exe`:B.command,k=mQ(I,"node_modules",J.pkg,Z),v=Bun.file(k);if(await v.exists()&&v.size>1024){if(await Bun.write(X,v),!O)await C.chmod(X,493);return!0}let S=mQ(I,"node_modules",B.package,"install.cjs");if(await Bun.file(S).exists()){aA.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let d=await EC(),c=Bun.spawn([d,S],{cwd:mQ(I,"node_modules",B.package),stdout:"pipe",stderr:"pipe"});if(await c.exited,c.exitCode!==0){let FA=await new Response(c.stderr).text();aA.warn(`postinstall \u5931\u8D25: ${FA.slice(0,200)}`)}let r=Bun.file(X);if(await r.exists()&&r.size>1024){if(!O)await C.chmod(X,493);return!0}}aA.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let V=await oI();for(let d of[J.version,"latest"])try{let c=await fetch(`${V}/${J.pkg}/${d}`);if(!c.ok)continue;let FA=(await c.json()).dist?.tarball;if(!FA)continue;let JA=mQ(VQ,".tmp-extract-"+Date.now());await C.mkdir(JA,{recursive:!0});let wA=mQ(JA,"pkg.tgz"),ZA=Bun.spawn(["curl","-fsSL","-o",wA,FA],{stdout:"pipe",stderr:"pipe"});if(await ZA.exited,ZA.exitCode!==0){let uA=await new Response(ZA.stderr).text();aA.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${uA.slice(0,200)}`),await C.rm(JA,{recursive:!0,force:!0}).catch(()=>{});continue}let GA=Bun.file(wA).size;if(GA<1024){aA.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${GA} bytes, url: ${FA.slice(0,100)})`),await C.rm(JA,{recursive:!0,force:!0}).catch(()=>{});continue}let s=Bun.spawn(["tar","xzf",wA,"-C",JA,`package/${Z}`],{stdout:"pipe",stderr:"pipe"});await s.exited;let XA=mQ(JA,"package",Z),qA=Bun.file(XA);if(await qA.exists()&&qA.size>1024){if(await Bun.write(X,qA),!O)await C.chmod(X,493);return await C.rm(JA,{recursive:!0,force:!0}).catch(()=>{}),!0}let UA=await new Response(s.stderr).text();aA.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${GA} bytes, exit=${s.exitCode}): ${UA.slice(0,200)}`),await C.rm(JA,{recursive:!0,force:!0}).catch(()=>{})}catch(c){aA.warn(`\u4E0B\u8F7D\u5931\u8D25: ${c instanceof Error?c.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(V!=="https://registry.npmjs.org")try{let d=`https://registry.npmjs.org/${J.pkg}/-/${J.pkg.split("/").pop()}-${J.version}.tgz`;aA.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let c=mQ(VQ,".tmp-extract-"+Date.now());await C.mkdir(c,{recursive:!0});let r=mQ(c,"pkg.tgz"),FA=Bun.spawn(["curl","-fsSL","-o",r,d],{stdout:"pipe",stderr:"pipe"});if(await FA.exited,FA.exitCode===0&&Bun.file(r).size>1024){await Bun.spawn(["tar","xzf",r,"-C",c,`package/${Z}`],{stdout:"pipe",stderr:"pipe"}).exited;let wA=Bun.file(mQ(c,"package",Z));if(await wA.exists()&&wA.size>1024){if(await Bun.write(X,wA),!O)await C.chmod(X,493);return await C.rm(c,{recursive:!0,force:!0}).catch(()=>{}),!0}}await C.rm(c,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(F){return aA.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${F instanceof Error?F.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function k5(B,I=!1){let C=xg(),g=r0(B.id);try{if(!await Yv())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 F=await AY(B),N=I||await BY(B);if(F&&!N)return{success:!0};let H=F?"\u66F4\u65B0":"\u5B89\u88C5",J=`\u6B63\u5728${H} ${B.name}`;C.start(J);let M=await import("fs/promises");await M.mkdir(g,{recursive:!0});let R=mQ(g,"package.json");if(!await Bun.file(R).exists())await Bun.write(R,JSON.stringify({name:`tako-${B.id}`,private:!0,dependencies:{}},null,2));let O=await EC(),Z=await oI(),k=await sC();if(aA.info(`\u7F51\u7EDC\u73AF\u5883: ${k==="cn"?"\u56FD\u5185\uFF08npmmirror\uFF09":"\u6D77\u5916"} | registry: ${Z}`),F){let r=mQ(g,"bun.lock");await M.rm(r,{force:!0}).catch(()=>{})}let v=Bun.spawn([O,"add",`${B.package}@latest`],{cwd:g,stdout:"pipe",stderr:"pipe",env:tW(Z)}),S=await d3(v,J,(r)=>C.update(r));if(await v.exited!==0){if(C.stop(`${H} ${B.name} \u5931\u8D25`),!F)await M.rm(R,{force:!0}).catch(()=>{});return{success:!1,error:S||"\u672A\u77E5\u9519\u8BEF"}}await IY(B,g,O,Z),await S5(B,g);let d=await $5(B.package),c=(await EB()).installedClients[B.id]?.version;if(d){let r=await EB();if(r.installedClients[B.id]={version:d,installedAt:new Date().toISOString()},await bg(r),F&&c)_Q("client_updated",{client_id:B.id,from_version:c,to_version:d});else _Q("client_installed",{client_id:B.id,client_version:d})}return C.stop(`${B.name} ${H}\u5B8C\u6210`),{success:!0}}catch(F){return C.stop("\u64CD\u4F5C\u5931\u8D25"),{success:!1,error:F instanceof Error?F.message:"\u672A\u77E5\u9519\u8BEF"}}}async function q5(B){try{let I=Bun.file(B);if(!await I.exists())return!0;if(I.size<100)return!0;let g=new Uint8Array(await I.slice(0,4).arrayBuffer());if(g[0]===127&&g[1]===69&&g[2]===76&&g[3]===70)return!1;if(g[0]===254||g[0]===207||g[0]===206||g[0]===202)return!1;if(g[0]===77&&g[1]===90)return!1;return!0}catch{return!0}}async function O5(B){if(B.runtime!=="native")return;let I=r0(B.id),C=mQ(I,"node_modules",B.package,"package.json");try{let g=Bun.file(C);if(!await g.exists())return;let N=(await g.json()).bin;if(!N)return;let H=typeof N==="string"?N:N[B.command];if(!H)return;let J=mQ(I,"node_modules",B.package,H);if(!await q5(J))return;aA.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let M=await EC(),R=await oI();if(await IY(B,I,M,R),!await S5(B,I)||await q5(J)){if(aA.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(I,{recursive:!0,force:!0}),(await k5(B)).success)if(await S5(B,I),await q5(J))aA.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else aA.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else aA.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function EY(B){if(!await AY(B)){let g=await k5(B);if(g.success)await O5(B);return g}if(await O5(B),await BY(B)){let g=await $5(B.package),F=(await EB()).installedClients[B.id]?.version||"\u672A\u77E5",N=g?`${F} \u2192 ${g}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(aA.info(`${B.name} \u53D1\u73B0\u66F4\u65B0: ${N}`),await qv(B.id))return aA.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await b3({message:`\u662F\u5426\u66F4\u65B0 ${B.name}\uFF1F`,defaultValue:!1}))return await Ov(B.id),aA.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let J=await k5(B,!0);if(J.success)await O5(B);return J}return{success:!0}}async function qv(B){try{let I=Bun.file(z5);if(!await I.exists())return!1;let g=(await I.json())[B];if(!g)return!1;let F=new Date().toISOString().slice(0,10);return g===F}catch{return!1}}async function Ov(B){try{let I={},C=Bun.file(z5);if(await C.exists())try{I=await C.json()}catch{}I[B]=new Date().toISOString().slice(0,10),await Bun.write(z5,JSON.stringify(I))}catch{}}var CD=null,z5;var k1=a(async()=>{t0();OI();MQ();z2();M0();X5();await w5();z5=mQ(VQ,".update-dismissed.json")});function V5(B,I,C){if(I<=0)return;return{usedPct:Math.min(100,Math.max(0,Math.round(B/I*100))),costUsed:B,costLimit:I,...C?{windowMinutes:C}:{}}}function yv(B,I){if(!Number.isFinite(B)||B<0)return;return{usedPct:0,costUsed:B,...I?{windowMinutes:I}:{}}}async function Tv(B){try{let I=await fetch(`${RI}/apiStats/api/user-quota`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:B}),signal:AbortSignal.timeout(5000)});if(!I.ok)return null;let C=await I.json();if(!C.plan||!C.usage)return null;return{provider:"tako",status:"ok",primary:V5(C.usage.windowCost??0,C.plan.window_cost_limit??0,C.plan.window_minutes),daily:V5(C.usage.dailyCost??0,C.plan.daily_cost_limit??0),secondary:V5(C.usage.weeklyCost??0,C.plan.weekly_cost_limit??0),fetchedAt:Date.now()}}catch{return null}}async function z1(B){let I=Date.now(),C={provider:"tako",status:"error",fetchedAt:I};if(!B)return{...C,hint:"\u7F3A\u5C11 apiId\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Tako Key",error:"missing_api_id"};let g=await Tv(B);if(g)return g;try{let F=await fetch(`${RI}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:B}),signal:AbortSignal.timeout(5000)});if(!F.ok)return{...C,hint:"Tako \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${F.status}`};let N=await F.json(),H=N?.data;if(!N?.success||!H)return{...C,hint:"Tako \u7528\u91CF\u6570\u636E\u683C\u5F0F\u5F02\u5E38",error:"bad_payload"};let J=H.limits?.currentDailyCost??H.usage?.total?.cost??0;return{provider:"tako",status:"ok",daily:yv(J),fetchedAt:I}}catch(F){return{...C,hint:"Tako \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(F.message??F)}}}async function HY(B){let I=await fg();return z1(I)}var UY=a(()=>{MQ()});function P5(B){if(!B||typeof B.utilization!=="number")return;return{usedPct:Math.min(100,Math.max(0,Math.round(B.utilization))),resetsAt:B.resets_at??void 0}}function vv(B){return B.authData?.credentials?.claudeAiOauth?.accessToken}async function JY(B){let I=Date.now(),C={provider:"claude-subscription",status:"error",fetchedAt:I},g=vv(B);if(!g)return{...C,hint:"Claude OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let F=await fetch("https://api.anthropic.com/api/oauth/usage",{method:"GET",headers:{Authorization:`Bearer ${g}`,"anthropic-beta":"oauth-2025-04-20"},signal:AbortSignal.timeout(5000)});if(F.status===401)return{...C,hint:"Claude OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(!F.ok)return{...C,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${F.status}`};let N=await F.json(),H=P5(N.seven_day_opus),J=P5(N.five_hour);if(J)J.windowMinutes=300;let M=P5(N.seven_day);if(M)M.windowMinutes=10080;return{provider:"claude-subscription",status:"ok",primary:J,secondary:M,...H?{modelLimits:{opus:H}}:{},fetchedAt:I}}catch(F){return{...C,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(F.message??F)}}}function LY(B){if(!B||typeof B.used_percent!=="number")return;let I={usedPct:Math.min(100,Math.max(0,Math.round(B.used_percent)))};if(typeof B.reset_at==="number")I.resetsAt=new Date(B.reset_at*1000).toISOString();if(typeof B.limit_window_seconds==="number")I.windowMinutes=Math.round(B.limit_window_seconds/60);return I}function Vv(B){let I=B.authData?.tokens;return{accessToken:I?.access_token,accountId:I?.account_id}}async function Pv(B,I){if(await Bun.spawn(["which","codex"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return null;let g=await import("fs/promises"),{mkdtemp:F}=g,{tmpdir:N}=await import("os"),{join:H}=await import("path"),J=await F(H(N(),"tako-codex-"));try{let M={auth_mode:"chatgpt",tokens:{access_token:B,...I?{account_id:I}:{}}};await g.writeFile(H(J,"auth.json"),JSON.stringify(M));let R=[JSON.stringify({jsonrpc:"2.0",method:"initialize",id:0,params:{clientInfo:{name:"tako",version:"1.0"}}}),JSON.stringify({jsonrpc:"2.0",method:"account/rateLimits/read",id:1,params:{}})].join(`
|
|
282
282
|
`)+`
|
|
@@ -768,14 +768,14 @@ ${H}`:N||H}function F6(B,{maxDepth:I=1000,numbersAsFloat:C=!1}={}){if(jF(B)!=="o
|
|
|
768
768
|
`);else{let F;if(B.type==="tako")F=`${RI}/v1`;else if(B.type==="deepseek")F="https://api.deepseek.com/v1";else F=`${B.baseUrl}/v1`;let H=I?.find((O)=>O.startsWith("model-"))?.slice(6)||B.model||"gpt-5.5",J=/^gpt[-.]/i.test(H),M;if(!J){if(M=SI.find((Z)=>Z.id===H)?.contextWindow,!M&&(B.type==="tako"||B.type==="custom")&&B.baseUrl){let Z=E2(B.baseUrl,"openai")?.find((k)=>k.id===H);if(Z&&Z.contextWindow>0)M=Z.contextWindow}if(!M)M=B.modelContextWindow}else delete g.model_context_window;let R={name:"tako",base_url:F,requires_openai_auth:!0};if(B.apiKey)R.experimental_bearer_token=B.apiKey;if(B.type==="tako")R.supports_websockets=!0;else U7(g);let X={model_provider:"tako",model:H,check_for_update_on_startup:!1,remote_compaction_v2:!1,model_providers:{tako:R}};if(M)X.model_context_window=M;if(B.type==="tako")X.features={multi_agent:!0,responses_websockets_v2:!0};g=J7(g,X)}await Bun.write(N7,F6(g))}var JS={id:"codex",name:"Codex",package:"@openai/codex",command:"codex",runtime:"bun",continueArg:"--continue",brandColor:"blue",getEnvVars(B){return{}},setupConfigFiles:US,launchOptions:(B)=>YS(B)},LS=[{id:"search",label:{en:"Web Search",zh:"\u7F51\u7EDC\u641C\u7D22"},shortLabel:"Search",description:{en:"Enable real-time web search",zh:"\u542F\u7528\u5B9E\u65F6\u7F51\u9875\u641C\u7D22"},flag:"--search",args:["--search"]},{id:"bypass-sandbox",label:{en:"Bypass Sandbox",zh:"\u7ED5\u8FC7\u5BA1\u6279\u4E0E\u6C99\u7BB1"},shortLabel:"Bypass",description:{en:"DANGEROUS: skip all approvals & sandbox (use only in disposable envs)",zh:"\u5371\u9669\uFF1A\u8DF3\u8FC7\u6240\u6709\u5BA1\u6279\u4E0E\u6C99\u7BB1\u9650\u5236\uFF08\u4EC5\u9650\u9694\u79BB/\u4E34\u65F6\u73AF\u5883\u4F7F\u7528\uFF09"},flag:"--dangerously-bypass-approvals-and-sandbox",args:["--dangerously-bypass-approvals-and-sandbox"]}],MS=["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.3"],RS=["deepseek-v4-flash","deepseek-v4-pro"];function M6(B){if(B>=1e6)return"1M";if(B>0)return`${Math.round(B/1000)}k`;return"?"}function uS(B){return/^claude[-_]/i.test(B)||/^anthropic[-_/]/i.test(B)}function KS(B){if(!B.baseUrl)return null;let I=E2(B.baseUrl,"openai");if(!I||I.length===0)return null;let C=I.filter((g)=>!uS(g.id));if(C.length===0)return null;return C.map((g)=>({id:`model-${g.id}`,label:{en:g.displayName,zh:g.displayName},shortLabel:g.displayName,description:{en:`Use ${g.displayName} (${M6(g.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${g.displayName}\uFF08\u4E0A\u4E0B\u6587 ${M6(g.contextWindow)}\uFF09`},flag:`--model ${g.id}`,args:["--model",g.id],group:"model"}))}function WS(B){if(N0(),B&&(B.type==="tako"||B.type==="custom")){let g=KS(B);if(g)return g}let I=B?.type==="deepseek"?RS:MS,C=[];for(let g of I){let F=SI.find((J)=>J.id===g),N=M6(F?.contextWindow??0),H=F?.displayName??g;C.push({id:`model-${g}`,label:{en:H,zh:H},shortLabel:H,description:{en:`Use ${H} (${N} ctx)`,zh:`\u4F7F\u7528 ${H}\uFF08\u4E0A\u4E0B\u6587 ${N}\uFF09`},flag:`--model ${g}`,args:["--model",g],group:"model"})}return C}function YS(B){return[...LS,...WS(B)]}Q2(JS);OI();dC();t0();OQ();await w5();import{homedir as zT}from"os";import{join as $T}from"path";var zW=$T(zT(),".claude","settings.json"),yT=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];function TT(B){if(B.startsWith("ANTHROPIC_"))return!0;return yT.includes(B)}async function vT(){let B=await import("fs/promises"),I;try{I=await B.readFile(zW,"utf-8")}catch{return}let C;try{C=JSON.parse(I)}catch{return}let g=[];if(C.env&&typeof C.env==="object"){for(let N of Object.keys(C.env))if(TT(N))g.push(N),delete C.env[N];if(Object.keys(C.env).length===0)delete C.env}if(g.length===0)return;if(aA.warn(hA("claudeCode.settingsDetected",{fields:g.join(", ")})),!await b3({message:hA("claudeCode.confirmClean"),defaultValue:!0})){aA.info(hA("claudeCode.cleanSkipped"));return}await B.writeFile(zW,JSON.stringify(C,null,2)+`
|
|
769
769
|
`),aA.success(hA("claudeCode.settingsCleaned"))}async function VT(B){let{readClaudeAuth:I,writeClaudeAuth:C}=await Promise.resolve().then(() => (x3(),j3)),{getProviders:g,updateProvider:F}=await Promise.resolve().then(() => (mE(),kW)),N=B.authData?.credentials,H=B.authData?.oauthAccount;if(!N){aA.warn(hA("claudeCode.subscriptionMissingAuth"));return}let J=await I(),M=J.oauthAccount?.emailAddress;if(M&&J.credentials){let O=(await g()).find((Z)=>Z.type==="claude-subscription"&&Z.email===M);if(O){let Z={credentials:J.credentials,oauthAccount:J.oauthAccount};if(JSON.stringify(O.authData)!==JSON.stringify(Z))await F(O.id,{authData:Z})}else if(M!==H?.emailAddress)aA.warn(hA("claudeCode.unknownCurrentAccount",{email:M}))}await C({credentials:N,oauthAccount:H});let R=H?.emailAddress||"?";aA.info(hA("claudeCode.subscriptionSwitched",{email:R}))}var PT={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(B){let I={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"},C=B.model?R5(B.model):void 0;switch(B.type){case"claude-subscription":return I;case"tako":return{...I,ANTHROPIC_BASE_URL:`${B.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:B.apiKey,...C?{ANTHROPIC_MODEL:C}:{}};case"anthropic":return{...I,ANTHROPIC_API_KEY:B.apiKey,...C?{ANTHROPIC_MODEL:C}:{}};case"deepseek":return{...I,ANTHROPIC_BASE_URL:W6,ANTHROPIC_AUTH_TOKEN:B.apiKey,...C?{ANTHROPIC_MODEL:C}:{}};case"xiaomi":return{...I,ANTHROPIC_BASE_URL:Z6(B.apiKey),ANTHROPIC_AUTH_TOKEN:B.apiKey,...C?{ANTHROPIC_MODEL:C}:{}};case"custom":return{...I,ANTHROPIC_BASE_URL:B.baseUrl,ANTHROPIC_AUTH_TOKEN:B.apiKey,...C?{ANTHROPIC_MODEL:C}:{}};default:return I}},async setupConfigFiles(B){if(B.type==="tako"||B.type==="custom")await vT();if(B.type==="claude-subscription")await VT(B)},launchOptions:(B)=>iT(B)},_T=[{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"]}],mT=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],hT=["deepseek-v4-flash","deepseek-v4-pro"],bT=["mimo-v2.5-pro"];function fT(B){let I=B.match(/^claude-(haiku|sonnet|opus)-(\d{1,2})-(\d{1,2})$/);if(I)return`${I[1].charAt(0).toUpperCase()+I[1].slice(1)} ${I[2]}.${I[3]}`;return SI.find((g)=>g.id===B)?.displayName??B}function R5(B){if(!B)return B;if(B.endsWith("[1m]")||/:1m$/i.test(B))return B;if(!/^(claude|deepseek|kimi|mimo)[-_]/i.test(B))return B;let I=SI.find((C)=>C.id===B);if(!I||I.contextWindow<1e6)return B;return`${B}[1m]`}function $W(B){if(B>=1e6)return"1M";if(B>0)return`${Math.round(B/1000)}k`;return"?"}function jT(B){return/^(gpt[-_]|chatgpt[-_]|o\d+([-_]|$)|davinci[-_]|text-davinci[-_]|openai[-_/])/i.test(B)}function xT(B){if(!B.baseUrl)return null;let I=E2(B.baseUrl,"claude");if(!I||I.length===0)return null;let C=I.filter((g)=>!jT(g.id));if(C.length===0)return null;return C.map((g)=>{let F=R5(g.id);return{id:`model-${g.id}`,label:{en:g.displayName,zh:g.displayName},shortLabel:g.displayName,description:{en:`Use ${g.displayName} (${$W(g.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${g.displayName}\uFF08\u4E0A\u4E0B\u6587 ${$W(g.contextWindow)}\uFF09`},flag:`--model ${F}`,args:[],envVars:{ANTHROPIC_MODEL:F},group:"model"}})}function pT(B){if(N0(),B&&(B.type==="tako"||B.type==="custom")){let g=xT(B);if(g)return g}let I=B?.type==="deepseek"?hT:B?.type==="xiaomi"?bT:mT,C=[];for(let g of I){let N=SI.find((R)=>R.id===g)?.contextWindow??0,H=N>=1e6?"1M":N>0?`${Math.round(N/1000)}k`:"?",J=fT(g),M=R5(g);C.push({id:`model-${g}`,label:{en:J,zh:J},shortLabel:J,description:{en:`Use ${J} (${H} ctx)`,zh:`\u4F7F\u7528 ${J}\uFF08\u4E0A\u4E0B\u6587 ${H}\uFF09`},flag:`--model ${M}`,args:[],envVars:{ANTHROPIC_MODEL:M},group:"model"})}return C}function iT(B){return[..._T,...pT(B)]}Q2(PT);OI();import{homedir as dT}from"os";import{join as TW}from"path";var vW=TW(dT(),".gemini"),yW=TW(vW,"settings.json");async function cT(){let B=await import("fs/promises");try{await B.mkdir(vW,{recursive:!0})}catch{}let I={};try{I=JSON.parse(await B.readFile(yW,"utf-8"))}catch{}let C=I.security?.auth||{};if(C.selectedType==="gemini-api-key")return;I.selectedAuthType="gemini-api-key",I.security={...I.security,auth:{...C,selectedType:"gemini-api-key"}},await Bun.write(yW,JSON.stringify(I,null,2)+`
|
|
770
770
|
`)}var lT={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(B){return{GEMINI_API_KEY:B.apiKey,GOOGLE_GEMINI_BASE_URL:B.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:cT};Q2(lT);OI();mE();MQ();await k1();MQ();import{homedir as Sv}from"os";var kv=50,y5=3;async function T5(B){try{return(await(await import("fs/promises")).stat(B)).isDirectory()}catch{return!1}}async function CY(B,I,C){let g=await EB(),F=g.recentProjects||[],N=new Date().toISOString(),H=F.findIndex((M)=>M.path===B);if(H>=0){let M=F[H],R=M.clientUsage||{},X=R[I]||{count:0,lastAt:N};F[H]={...M,launchCount:M.launchCount+1,lastLaunchedAt:N,lastClientId:I,clientUsage:{...R,[I]:{count:X.count+1,lastAt:N,lastSelectedOptionIds:C??X.lastSelectedOptionIds}}}}else F.push({path:B,launchCount:1,lastLaunchedAt:N,lastClientId:I,clientUsage:{[I]:{count:1,lastAt:N,lastSelectedOptionIds:C}}});let J=F.sort((M,R)=>new Date(R.lastLaunchedAt).getTime()-new Date(M.lastLaunchedAt).getTime()).slice(0,kv);g.recentProjects=J,await uI(g)}async function gY(B){let C=(await EB()).recentProjects||[],g=process.cwd(),N=C.find((J)=>J.path===g)?.clientUsage?.[B]?.lastSelectedOptionIds;if(N)return N;return C.filter((J)=>J.path!==g&&J.clientUsage?.[B]?.lastSelectedOptionIds).sort((J,M)=>{let R=new Date(J.clientUsage[B].lastAt).getTime();return new Date(M.clientUsage[B].lastAt).getTime()-R})[0]?.clientUsage?.[B]?.lastSelectedOptionIds??[]}function zv(B,I){let C=B.clientUsage?.[I];if(C)return new Date(C.lastAt).getTime();if(B.lastClientId===I)return new Date(B.lastLaunchedAt).getTime();return 0}async function DY(B,I=y5,C=!0){let F=(await EB()).recentProjects||[],N=process.cwd(),J=F.filter((R)=>{if(C&&R.path===N)return!1;return R.clientUsage?.[B]||R.lastClientId===B}).map((R)=>({...R,lastUsedTime:zv(R,B)})).sort((R,X)=>X.lastUsedTime-R.lastUsedTime),M=[];for(let{lastUsedTime:R,...X}of J){if(M.length>=I)break;if(await T5(X.path))M.push(X)}return M}async function FY(){let I=(await EB()).recentProjects||[],C=process.cwd();return I.find((F)=>F.path===C)?.lastClientId||null}function v5(B,I=25){let C=Sv(),g=B.startsWith(C)?"~"+B.slice(C.length):B;if(g.length>I){let N=g.split("/").pop()||"";if(N.length>I-4)g="..."+N.slice(-I+3);else g=`.../${N}`}return g}function wY(B){let{t:I}=(OQ(),TO(WW)),C=Date.now(),g=new Date(B).getTime(),F=C-g,N=Math.floor(F/60000),H=Math.floor(F/3600000),J=Math.floor(F/86400000),M=Math.floor(J/7),R=Math.floor(J/30);if(N<1)return I("time.justNow");if(N<60)return I("time.minutesAgo",{n:N});if(H<24)return I("time.hoursAgo",{n:H});if(J===1)return I("time.yesterday");if(J<7)return I("time.daysAgo",{n:J});if(J<30)return I("time.weeksAgo",{n:M});return I("time.monthsAgo",{n:R})}t0();OQ();M0();OI();await k1();async function GY(B,I){try{let C=I?.projectPath||process.cwd(),g=I?.providerContext;if(!g)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let F=await A2(B);if(!F)F=B2(B);if(!await Bun.file(F).exists()){let{execSync:X}=await import("child_process"),O=process.platform==="win32"?`where ${B.command}`:`which ${B.command}`;try{let Z=X(O,{encoding:"utf8"}).trim().split(`
|
|
771
|
-
`)[0];if(Z)F=Z;else return{success:!1,error:`\u627E\u4E0D\u5230 ${B.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${B.id}`}}catch{return{success:!1,error:`\u627E\u4E0D\u5230 ${B.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${B.id}`}}}let H=B.getEnvVars(g),J={...process.env,...H,...I?.envVars??{}},M;if(B.runtime==="native")M=[F];else M=[await EC(),F];if(I?.args&&I.args.length>0)M=[...M,...I.args];let R=process.platform==="win32";if(!R)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(R){let{spawnSync:X}=await import("child_process");X(M[0],M.slice(1),{env:J,stdio:"inherit",cwd:C,windowsHide:!1})}else try{Bun.spawnSync(M,{env:J,stdio:["inherit","inherit","inherit"],cwd:C})}catch{await Bun.spawn(M,{env:J,stdio:["inherit","inherit","inherit"],cwd:C}).exited}return{success:!0}}catch(C){return{success:!1,error:C instanceof Error?C.message:"\u542F\u52A8\u5931\u8D25"}}}async function $v(B,I){if(I?.providerContext)return I.providerContext;let C=await aI();if(C){let g=await BC(B.id);if(g.some((N)=>N.id===C.id))return zI(C);if(g.length>0)return zI(g[0])}return null}async function c3(B,I){try{let C=I?.projectPath||process.cwd();if(I?.projectPath){if(!await T5(I.projectPath))return{success:!1,error:hA("launcher.directoryNotFound",{path:I.projectPath})}}let g=await EY(B);if(!g.success)return g;let F=await $v(B,I);if(!F)return{success:!1,error:hA("launcher.apiKeyNotConfigured")};if(B.setupConfigFiles)await B.setupConfigFiles(F,I?.selectedOptionIds);await CY(C,B.id,I?.selectedOptionIds);let H=(await EB()).installedClients[B.id]?.version;return _Q("client_launched",{client_id:B.id,client_version:H,project_hash:oW(C),is_recent_project:!!I?.projectPath}),aA.info(hA("launcher.starting",{client:B.name})),await GY(B,{...I,providerContext:F})}catch(C){return{success:!1,error:C instanceof Error?C.message:"Launch failed"}}}OI();OQ();M0();t0();mE();mE();M0();async function l3(B){let I=await BC(B);if(I.length===0)return null;let C=await QC(B);if(C)return zI(C);if(I.length===1)return zI(I[0]);let g=await aI();if(g&&I.some((F)=>F.id===g.id))return zI(g);return zI(I[0])}async function NY(){let B=await X1();if(await q1(B)>0){for(let C of B)_Q("provider_added",{provider_type:C.type,method:"auto_detect"});IC(),hE()}}await KI();var LE=YA(FB(),1);await KI();var QQ=YA(FB(),1);OI();mE();OQ();a3();await KI();var YB=YA(VB(),1),cv=[["\u2191\u2193","\u9009\u62E9","select"],["Enter","\u786E\u8BA4","confirm"],["Esc","\u53D6\u6D88","cancel"]];function qY({zh:B}){return YB.jsxDEV(h,{marginTop:1,justifyContent:"center",gap:2,children:cv.flatMap((I,C)=>{return[C>0?YB.jsxDEV(K,{dimColor:!0,children:"\u2502"},`s${C}`,!1,void 0,this):null,YB.jsxDEV(K,{dimColor:!0,bold:!0,children:I[0]},`k${C}`,!1,void 0,this),YB.jsxDEV(K,{dimColor:!0,children:B?I[1]:I[2]},`l${C}`,!1,void 0,this)]})},void 0,!1,void 0,this)}function OY({provs:B,provIdx:I,pickerIdx:C,color:g,zh:F}){return YB.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:g,paddingX:2,paddingY:1,children:[YB.jsxDEV(K,{bold:!0,color:g,children:["\u25A3 ",F?"\u9009\u62E9\u670D\u52A1\u5546":"Pick Provider"]},void 0,!0,void 0,this),YB.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[B.length===0&&YB.jsxDEV(h,{paddingLeft:1,children:YB.jsxDEV(K,{dimColor:!0,children:F?"\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),B.map((N,H)=>{let J=C===H,M=H===I;return YB.jsxDEV(h,{paddingLeft:1,children:[YB.jsxDEV(K,{color:J?g:void 0,bold:J,children:J?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:J,color:J?g:void 0,children:[" ",N.name]},void 0,!0,void 0,this),N.email&&YB.jsxDEV(K,{dimColor:!0,children:[" (",N.email,")"]},void 0,!0,void 0,this),M&&YB.jsxDEV(K,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},N.id,!0,void 0,this)}),(()=>{let N=C===B.length;return YB.jsxDEV(h,{paddingLeft:1,marginTop:1,children:[YB.jsxDEV(K,{color:N?g:void 0,bold:N,children:N?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:N,color:N?g:void 0,children:[" ","\u2699 ",F?"\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),YB.jsxDEV(qY,{zh:F},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function SY({group:B,options:I,enabled:C,pickerIdx:g,color:F,zh:N}){let H=I.filter((R)=>R.group===B),J=B==="model"?N?"\u9009\u62E9\u6A21\u578B":"Pick Model":B,M=!H.some((R)=>C.has(R.id));return YB.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:F,paddingX:2,paddingY:1,children:[YB.jsxDEV(K,{bold:!0,color:F,children:["\u25A3 ",J]},void 0,!0,void 0,this),YB.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[(()=>{let R=g===0;return YB.jsxDEV(h,{paddingLeft:1,children:[YB.jsxDEV(K,{color:R?F:void 0,bold:R,children:R?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:R,color:R?F:void 0,children:[" ",N?"\u9ED8\u8BA4\uFF08\u4E0D\u6307\u5B9A\uFF09":"Default (none)"]},void 0,!0,void 0,this),M&&YB.jsxDEV(K,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})(),H.map((R,X)=>{let O=g===X+1,Z=C.has(R.id);return YB.jsxDEV(h,{paddingLeft:1,flexDirection:"column",children:[YB.jsxDEV(h,{children:[YB.jsxDEV(K,{color:O?F:void 0,bold:O,children:O?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:O,color:O?F:void 0,children:[" ",R.label[N?"zh":"en"]||R.label.en]},void 0,!0,void 0,this),Z&&YB.jsxDEV(K,{color:"green",children:" \u2605"},void 0,!1,void 0,this),YB.jsxDEV(K,{dimColor:!0,children:[" ",R.flag]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),O&&YB.jsxDEV(h,{paddingLeft:3,children:YB.jsxDEV(K,{dimColor:!0,children:R.description[N?"zh":"en"]||R.description.en},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},R.id,!0,void 0,this)})]},void 0,!0,void 0,this),YB.jsxDEV(qY,{zh:N},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var BA=YA(VB(),1),lv="0.3.3",kY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},zY={icon:"\u25AA",color:"white"};async function av(){let B=jg(),I=await FY(),C=await aI(),g=rQ()==="zh",F=[...B].sort((J,M)=>{if(J.id===I)return-1;if(M.id===I)return 1;return 0}),N=[];for(let J of F){let M=await DY(J.id,y5,!0),R=process.cwd(),X=[{label:g?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:v5(R,45),path:R},...M.map((r)=>({label:v5(r.path,45),hint:wY(r.lastLaunchedAt),path:r.path}))],O=await BC(J.id),k=await QC(J.id)||O.find((r)=>r.id===C?.id)||O[0],v=k?O.findIndex((r)=>r.id===k.id):0,S=bF(J,k),V=await gY(J.id),d=S.map((r)=>r.id),c=V.filter((r)=>d.includes(r));N.push({client:J,projects:X,providers:O,activeProvIdx:Math.max(v,0),launchOptions:S,lastSelectedOptionIds:c})}let H=N.some((J)=>J.providers.length>0);return{clients:N,defaultIdx:0,hasProviders:H}}function $Y({color:B}){let{stdout:I}=D5(),C=Math.max((I.columns||80)-6,20);return BA.jsxDEV(h,{marginY:0,children:BA.jsxDEV(K,{dimColor:!0,color:B,children:"\u2500".repeat(C)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function ov(B){return B>30?"green":B>10?"yellow":"red"}function nv({provider:B,zh:I}){if(!B)return BA.jsxDEV(K,{color:"yellow",children:["\u26A0 ",I?"\u672A\u7ED1\u5B9A":"no provider"]},void 0,!0,void 0,this);let C={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"}},g=C[B.type]??C.custom,F=I?g.zh:g.en,N=B.email??"";if(N.length>0){let[H,J]=N.split("@");if(H&&J)N=H.length>14?`${H.slice(0,12)}\u2026@${J}`:N}return BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV(K,{color:g.color,children:[g.icon," ",F]},void 0,!0,void 0,this),N&&BA.jsxDEV(K,{dimColor:!0,children:[" \xB7 ",N]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function rv({quota:B,zh:I}){if(B.status==="unsupported")return null;if(B.status==="error")return BA.jsxDEV(K,{dimColor:!0,children:["\uD83D\uDCB0 ",B.hint||(I?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")]},void 0,!0,void 0,this);if(B.provider==="tako")if(!!(B.primary?.costLimit||B.secondary?.costLimit||B.daily?.costLimit));else{let J=B.daily??B.primary??B.secondary;if(!J)return null;let M=J.costUsed??0;return BA.jsxDEV(K,{dimColor:!0,children:["\uD83D\uDCB0 ",I?"\u4ECA\u65E5":"Today",": ",BA.jsxDEV(K,{color:"green",children:["$",M.toFixed(2)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}let C=(H,J,M)=>{if(H&&H>=1440)return`${Math.round(H/1440)}d`;if(H)return`${Math.round(H/60)}h`;return M?`${M}d`:`${J}h`},g=(H)=>Math.max(0,Math.min(100,100-Math.round(H))),F=[],N=(H,J,M)=>{if(F.length)F.push(BA.jsxDEV(K,{dimColor:!0,children:" \xB7 "},`sep-${H}`,!1,void 0,this));let R=g(M);F.push(BA.jsxDEV(QQ.default.Fragment,{children:[`${J} \u5269 `,BA.jsxDEV(K,{color:ov(R),children:[R,"%"]},void 0,!0,void 0,this)]},H,!0,void 0,this))};if(B.primary)N("primary",C(B.primary.windowMinutes,5),B.primary.usedPct);if(B.secondary)N("secondary",C(B.secondary.windowMinutes,24,7),B.secondary.usedPct);if(B.modelLimits?.opus)N("opus","opus",B.modelLimits.opus.usedPct);if(!F.length)return null;return BA.jsxDEV(K,{dimColor:!0,children:["\uD83D\uDCB0 ",F]},void 0,!0,void 0,this)}function sv(B,I){let C=[],g=new Set;for(let F of B)if(!F.group)C.push({kind:"flag",opt:F});else if(!g.has(F.group)){g.add(F.group);let N=F.group==="model"?I?"\u6A21\u578B":"Model":F.group;C.push({kind:"group",group:F.group,title:N})}return C.push({kind:"provider",title:I?"\u670D\u52A1\u5546":"Provider"}),C}function _5(B,I,C){return B.find((g)=>g.group===C&&I.has(g.id))}function tv({clients:B,defaultIdx:I,hasProviders:C,onResult:g}){let[F,N]=QQ.useState(I),[H,J]=QQ.useState("projects"),[M,R]=QQ.useState(0),[X,O]=QQ.useState(0),[Z,k]=QQ.useState(()=>B[I]?.activeProvIdx||0),[v,S]=QQ.useState(()=>new Set(B[I]?.lastSelectedOptionIds??[])),[V,d]=QQ.useState(""),[c,r]=QQ.useState(null),[FA,JA]=QQ.useState(!1),[wA,ZA]=QQ.useState(0),GA=B[F],s=GA.projects,XA=GA.providers,qA=kY[GA.client.id]||zY,UA=rQ()==="zh",uA=XA[Z],AB=QQ.default.useMemo(()=>bF(GA.client,uA),[GA.client.id,uA?.id,uA?.type]),IA=QQ.default.useMemo(()=>sv(AB,UA),[AB,UA]),VA=uA?.name||(UA?"\u672A\u914D\u7F6E":"N/A"),[kA,nA]=QQ.useState(null);return QQ.useEffect(()=>{if(!uA){nA(null);return}let OA=!1;return $1(uA).then((f)=>{if(!OA)nA(f)}),()=>{OA=!0}},[uA?.id,uA?.type]),QQ.useEffect(()=>{R(0),O(0),J("projects"),k(B[F]?.activeProvIdx||0),r(null),JA(!1),S(new Set(B[F]?.lastSelectedOptionIds??[]))},[F]),QQ.useEffect(()=>{let OA=new Set(AB.map((DA)=>DA.id)),f=new Set(AB.filter((DA)=>DA.group==="model").map((DA)=>DA.id)),NA=uA?.model?`model-${uA.model}`:void 0;S((DA)=>{let WA=new Set,bA=!1,GB=!1;for(let fA of DA)if(OA.has(fA)){if(WA.add(fA),f.has(fA))GB=!0}else bA=!0;if(!GB&&NA&&f.has(NA))WA.add(NA),bA=!0;return bA?WA:DA})},[AB,uA?.model]),BQ(QQ.useCallback((OA,f)=>{if(FA){let DA=XA.length+1;if(f.escape||OA==="q"){JA(!1);return}if(f.upArrow){ZA((WA)=>WA>0?WA-1:DA-1);return}if(f.downArrow){ZA((WA)=>WA<DA-1?WA+1:0);return}if(f.return)if(wA<XA.length){let WA=XA[wA];k(wA),(async()=>{if(await Z1(GA.client.id,WA.id),GA.client.setupConfigFiles)try{await GA.client.setupConfigFiles(zI(WA))}catch(bA){d(UA?"\u26A0 \u914D\u7F6E\u540C\u6B65\u5931\u8D25":"\u26A0 Config sync failed"),setTimeout(()=>d(""),2500);return}GA.activeProvIdx=wA,d(UA?`\u2713 \u5DF2\u7ED1\u5B9A ${WA.name}`:`\u2713 Bound ${WA.name}`),setTimeout(()=>d(""),2000)})(),JA(!1)}else JA(!1),g({type:"providers"});return}if(c){let DA=AB.filter((bA)=>bA.group===c),WA=DA.length+1;if(f.escape||OA==="q"){r(null);return}if(f.upArrow){ZA((bA)=>bA>0?bA-1:WA-1);return}if(f.downArrow){ZA((bA)=>bA<WA-1?bA+1:0);return}if(f.return){if(wA===0)S((bA)=>{let GB=new Set(bA);for(let fA of DA)GB.delete(fA.id);return GB});else{let bA=DA[wA-1];S((GB)=>{let fA=new Set(GB);for(let hB of DA)fA.delete(hB.id);return fA.add(bA.id),fA})}r(null)}return}if(OA==="q"){g({type:"exit"});return}if(OA==="a"){g({type:"agent"});return}if(OA==="s"){g({type:"stats"});return}if(OA==="c"){g({type:"config"});return}if(OA==="l"){g({type:"language"});return}if(OA==="p"){g({type:"providers"});return}let NA=parseInt(OA);if(NA>=1&&NA<=B.length){N(NA-1);return}if(f.leftArrow){N((DA)=>DA>0?DA-1:B.length-1);return}if(f.rightArrow){N((DA)=>DA<B.length-1?DA+1:0);return}if(H==="projects"){if(f.downArrow){if(M<s.length-1)R((DA)=>DA+1);else if(IA.length>0)J("options"),O(0);return}if(f.upArrow){if(M>0)R((DA)=>DA-1);return}}if(H==="options"){if(f.downArrow){if(X<IA.length-1)O((DA)=>DA+1);return}if(f.upArrow){if(X>0)O((DA)=>DA-1);else J("projects"),R(s.length-1);return}}if(OA===" "&&H==="options"&&IA.length>0){let DA=IA[X];if(DA.kind==="flag")S((WA)=>{let bA=new Set(WA);if(bA.has(DA.opt.id))bA.delete(DA.opt.id);else bA.add(DA.opt.id);return bA});else if(DA.kind==="group"){let WA=_5(AB,v,DA.group),bA=AB.filter((fA)=>fA.group===DA.group),GB=WA?bA.findIndex((fA)=>fA.id===WA.id)+1:0;ZA(Math.max(0,GB)),r(DA.group)}else ZA(Z),JA(!0);return}if(f.return){if(H==="options"&&IA.length>0){let fA=IA[X];if(fA.kind==="group"){let hB=_5(AB,v,fA.group),TB=AB.filter((CA)=>CA.group===fA.group),EA=hB?TB.findIndex((CA)=>CA.id===hB.id)+1:0;ZA(Math.max(0,EA)),r(fA.group);return}if(fA.kind==="provider"){ZA(Z),JA(!0);return}}let DA=s[M],WA=[],bA={},GB=[];for(let fA of AB)if(v.has(fA.id)){if(WA.push(...fA.args),fA.envVars)Object.assign(bA,fA.envVars);GB.push(fA.id)}g({type:"launch",clientId:GA.client.id,projectPath:DA.path,args:WA,envVars:bA,selectedOptionIds:GB})}},[H,F,M,X,Z,XA,uA,GA,s,AB,IA,v,B,g,UA,c,FA,wA])),BA.jsxDEV(h,{flexDirection:"column",paddingX:0,paddingY:1,children:[BA.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:qA.color,paddingX:2,paddingY:1,children:[BA.jsxDEV(h,{justifyContent:"space-between",children:[BA.jsxDEV(h,{gap:1,children:[BA.jsxDEV(K,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:["v",lv]},void 0,!0,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(nv,{provider:uA,zh:UA},void 0,!1,void 0,this)]},void 0,!0,void 0,this),BA.jsxDEV(h,{children:[V&&BA.jsxDEV(K,{color:"green",children:V},void 0,!1,void 0,this),!V&&kA&&BA.jsxDEV(rv,{quota:kA,zh:UA},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!C&&BA.jsxDEV(h,{marginTop:1,justifyContent:"center",gap:1,children:[BA.jsxDEV(K,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\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),BA.jsxDEV(h,{marginTop:1,gap:1,justifyContent:"center",children:[BA.jsxDEV(K,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),B.map((OA,f)=>{let NA=kY[OA.client.id]||zY;return f===F?BA.jsxDEV(h,{borderStyle:"bold",borderColor:NA.color,paddingX:1,children:BA.jsxDEV(K,{color:NA.color,bold:!0,children:[NA.icon," ",OA.client.name]},void 0,!0,void 0,this)},OA.client.id,!1,void 0,this):BA.jsxDEV(h,{borderStyle:"single",borderColor:"gray",paddingX:1,children:BA.jsxDEV(K,{dimColor:!0,children:[NA.icon," ",OA.client.name]},void 0,!0,void 0,this)},OA.client.id,!1,void 0,this)}),BA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),BA.jsxDEV($Y,{color:qA.color},void 0,!1,void 0,this),FA?BA.jsxDEV(OY,{provs:XA,provIdx:Z,pickerIdx:wA,color:qA.color,zh:UA},void 0,!1,void 0,this):c?BA.jsxDEV(SY,{group:c,options:AB,enabled:v,pickerIdx:wA,color:qA.color,zh:UA},void 0,!1,void 0,this):BA.jsxDEV(BA.Fragment,{children:[s.map((OA,f)=>{let NA=H==="projects"&&f===M;return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:OA.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),OA.hint?BA.jsxDEV(K,{dimColor:!0,children:OA.hint},void 0,!1,void 0,this):null]},f,!0,void 0,this)}),IA.length>0&&BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV($Y,{color:qA.color},void 0,!1,void 0,this),IA.map((OA,f)=>{let NA=H==="options"&&f===X;if(OA.kind==="flag"){let DA=OA.opt,WA=v.has(DA.id);return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{color:WA?qA.color:void 0,bold:WA,children:WA?"\u25C9":"\u25CB"},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:DA.label[UA?"zh":"en"]||DA.label.en},void 0,!1,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:DA.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:DA.description[UA?"zh":"en"]||DA.description.en},void 0,!1,void 0,this)]},DA.id,!0,void 0,this)}if(OA.kind==="group"){let DA=_5(AB,v,OA.group),WA=DA?DA.shortLabel:UA?"\u9ED8\u8BA4":"Default";return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:[OA.title,":"]},void 0,!0,void 0,this),BA.jsxDEV(K,{color:DA?qA.color:void 0,children:WA},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:UA?"Enter \u8FDB\u5165\u9009\u62E9":"Enter to pick"},void 0,!1,void 0,this)]},`group-${OA.group}`,!0,void 0,this)}return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:[OA.title,":"]},void 0,!0,void 0,this),BA.jsxDEV(K,{color:uA?qA.color:"yellow",children:uA?VA:UA?"\u672A\u914D\u7F6E":"Not set"},void 0,!1,void 0,this),BA.jsxDEV(K,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:UA?"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),BA.jsxDEV(h,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:H==="options"?BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"a"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"agent"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\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 yY({onResult:B}){let[I,C]=QQ.useState(null);if(QQ.useEffect(()=>{av().then(C)},[]),!I)return BA.jsxDEV(K,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return BA.jsxDEV(tv,{clients:I.clients,defaultIdx:I.defaultIdx,hasProviders:I.hasProviders,onResult:B},void 0,!1,void 0,this)}OQ();mE();await KI();var iB=YA(FB(),1);dC();dC();M0();dC();await KI();var HA=YA(VB(),1),R0={"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"}},m5={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},y1=["claude-subscription","codex-subscription","tako","anthropic","deepseek","xiaomi","custom"];function TY({provider:B,focused:I,bound:C,isDefault:g,zh:F}){let N=R0[B.type]||R0.custom,H=F?wE[B.type]?.zh:wE[B.type]?.en;return HA.jsxDEV(h,{flexDirection:"column",borderStyle:I?"bold":"round",borderColor:I?N.color:C?N.color:"gray",paddingX:2,paddingY:0,children:[HA.jsxDEV(h,{justifyContent:"space-between",children:[HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{color:N.color,bold:!0,children:N.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:I||C,color:I?N.color:void 0,children:B.name},void 0,!1,void 0,this),g&&HA.jsxDEV(K,{color:"yellow",children:["\u2605 ",F?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),B.builtin&&HA.jsxDEV(K,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{gap:1,children:C?HA.jsxDEV(K,{color:N.color,bold:!0,children:["\u25CF ",F?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):HA.jsxDEV(K,{dimColor:!0,children:["\u25CB ",F?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:H},void 0,!1,void 0,this),B.model&&HA.jsxDEV(K,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),B.model&&HA.jsxDEV(K,{dimColor:!0,children:B.model},void 0,!1,void 0,this),B.email&&HA.jsxDEV(K,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),B.email&&HA.jsxDEV(K,{dimColor:!0,children:B.email},void 0,!1,void 0,this),B.apiKey&&HA.jsxDEV(K,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),B.apiKey&&HA.jsxDEV(K,{dimColor:!0,children:["Key: ",B.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),I&&HA.jsxDEV(h,{marginTop:0,children:HA.jsxDEV(K,{color:N.color,dimColor:!0,children:["Enter ",F?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",F?"\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 vY({screen:B,addType:I,addKey:C,addUrl:g,addModel:F,addCtx:N,rowIdx:H,zh:J}){let M=R0[I]||R0.custom,R=J?wE[I]?.zh:wE[I]?.en,X=B==="add-model"?pF(I):void 0;if(X)return HA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[HA.jsxDEV(h,{borderStyle:"bold",borderColor:M.color,paddingX:3,paddingY:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,marginBottom:1,children:[HA.jsxDEV(K,{color:M.color,bold:!0,children:M.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:!0,color:M.color,children:R},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:["\u2014 ",J?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X.map((S,V)=>{let d=H===V;return HA.jsxDEV(h,{paddingLeft:1,gap:1,children:[HA.jsxDEV(K,{color:d?M.color:void 0,bold:d,children:d?"\u25B8":" "},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:d,color:d?M.color:void 0,children:S},void 0,!1,void 0,this)]},S,!0,void 0,this)})]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u9009\u62E9":"select"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let O=B==="add-key"?J?"\u8F93\u5165 API Key":"Enter API Key":B==="add-url"?"Base URL":B==="add-ctx"?J?"\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08tokens\uFF0C\u53EF\u7559\u7A7A\uFF09":"Context Window (tokens, optional)":J?"\u6A21\u578B":"Model",Z=B==="add-key"?C:B==="add-url"?g:B==="add-ctx"?N??"":F,k=B==="add-url"?"https://your-proxy.com":B==="add-ctx"?J?"\u5982 200000\uFF1Bcatalog \u6CA1\u6709\u8BE5\u6A21\u578B\u65F6\u5EFA\u8BAE\u586B\u5199":"e.g. 200000; recommended if model is unknown to catalog":B==="add-model"?C2(I)||(J?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,v=B==="add-url"?J?"\u4E0B\u4E00\u6B65":"next":B==="add-ctx"?J?"\u4FDD\u5B58":"save":B==="add-model"?J?"\u4FDD\u5B58":"save":J?"\u786E\u8BA4":"confirm";return HA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[HA.jsxDEV(h,{borderStyle:"bold",borderColor:M.color,paddingX:3,paddingY:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,marginBottom:1,children:[HA.jsxDEV(K,{color:M.color,bold:!0,children:M.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:!0,color:M.color,children:R},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:["\u2014 ",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B==="add-key"&&I==="xiaomi"&&HA.jsxDEV(K,{dimColor:!0,children:[" ",J?"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),k&&HA.jsxDEV(K,{dimColor:!0,children:[" ",J?"\u9ED8\u8BA4":"Default",": ",k]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:k?1:0,children:[HA.jsxDEV(K,{color:M.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),HA.jsxDEV(K,{children:Z||k||""},void 0,!1,void 0,this),HA.jsxDEV(K,{color:M.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:v},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function VY({provider:B,defaultId:I,detailActions:C,detailIdx:g,zh:F}){let N=R0[B.type]||R0.custom,H=F?wE[B.type]?.zh:wE[B.type]?.en;return HA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[HA.jsxDEV(h,{borderStyle:"bold",borderColor:N.color,paddingX:3,paddingY:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{color:N.color,bold:!0,children:N.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:!0,color:N.color,children:B.name},void 0,!1,void 0,this),B.id===I&&HA.jsxDEV(K,{color:"yellow",children:[" \u2605 ",F?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:[F?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),HA.jsxDEV(K,{children:H},void 0,!1,void 0,this),B.builtin&&HA.jsxDEV(K,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.model&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:[F?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),HA.jsxDEV(K,{children:B.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.email&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),HA.jsxDEV(K,{children:B.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.apiKey&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),HA.jsxDEV(K,{children:[B.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B.baseUrl&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),HA.jsxDEV(K,{children:B.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),HA.jsxDEV(h,{gap:1,marginTop:1,children:C.map((J,M)=>{let R=J==="default"?`\u2B50 ${F?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:J==="rekey"?`\uD83D\uDD11 ${F?"\u4FEE\u6539 Key":"Change Key"}`:J==="relogin"?`\uD83D\uDD04 ${F?"\u91CD\u65B0\u767B\u5F55":"Re-login"}`:J==="delete"?`\uD83D\uDDD1\uFE0F ${F?"\u5220\u9664":"Delete"}`:`\u2190 ${F?"\u8FD4\u56DE":"Back"}`,X=M===g;return HA.jsxDEV(h,{borderStyle:X?"bold":"round",borderColor:X?"cyan":"gray",paddingX:2,children:HA.jsxDEV(K,{bold:X,color:X?"cyan":void 0,dimColor:!X,children:R},void 0,!1,void 0,this)},J,!1,void 0,this)})},void 0,!1,void 0,this),HA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:F?"\u9009\u62E9":"select"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:F?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:F?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var xA=YA(VB(),1);function PY({onDone:B}){let[I,C]=iB.useState("list"),[g,F]=iB.useState([]),[N,H]=iB.useState(),[J,M]=iB.useState({}),[R,X]=iB.useState(0),[O,Z]=iB.useState(0),[k,v]=iB.useState(0),[S,V]=iB.useState(""),[d,c]=iB.useState(""),[r,FA]=iB.useState("tako"),[JA,wA]=iB.useState(""),[ZA,GA]=iB.useState(""),[s,XA]=iB.useState(""),[qA,UA]=iB.useState(""),uA=rQ()==="zh",AB=jg(),IA=AB[R],VA=m5[IA?.id]?.color||"white",kA=IA?g.filter((EA)=>g2(EA,IA.id)):[],nA=J[IA?.id]||N,OA=kA.length+4,f=g.find((EA)=>EA.id===S),NA=f?.type==="claude-subscription"||f?.type==="codex-subscription",DA=f?[...f.id!==N?["default"]:[],...NA?["relogin"]:[],...f.builtin?["rekey"]:["delete"],"back"]:["back"],WA=iB.useCallback(async()=>{let EA=await kI(),CA=await aI();F(EA),H(CA?.id);let e={};for(let LA of jg()){let cA=await QC(LA.id);e[LA.id]=cA?.id}M(e)},[]);iB.useEffect(()=>{WA()},[WA]),iB.useEffect(()=>{Z(0)},[R]),iB.useEffect(()=>{if(d){let EA=setTimeout(()=>c(""),3000);return()=>clearTimeout(EA)}},[d]);let bA=iB.useCallback(async()=>{if(S&&g.find((PA)=>PA.id===S)?.builtin){await ED(S,{apiKey:JA}),c(uA?"Key \u5DF2\u66F4\u65B0":"Key updated"),await WA(),C("list"),Z(0);return}let EA=wE[r]?.[uA?"zh":"en"]||r,CA=ZA||K6(r),e=s||C2(r),LA=qA?parseInt(qA,10):NaN,cA=Number.isFinite(LA)&&LA>0?LA:void 0;await ID({name:EA,type:r,apiKey:JA,baseUrl:CA,model:e,modelContextWindow:cA,supportedClients:cI(r)}),_Q("provider_added",{provider_type:r,method:"manual"}),IC(),hE(),c(uA?"\u5DF2\u6DFB\u52A0":"Added"),UA(""),await WA(),C("list"),Z(0)},[r,JA,ZA,s,qA,uA,WA,S,g]),GB=iB.useCallback(async()=>{C("scanning");let EA=await X1(),CA=await q1(EA);if(CA>0)IC(),hE();c(uA?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${CA} \u4E2A`:`Scan done, ${CA} added`),await WA(),C("list"),Z(0)},[WA,uA]),[fA,hB]=iB.useState("claude"),TB=iB.useCallback(async(EA)=>{hB(EA),C("logging-in");let CA=EA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];await Bun.spawn(CA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited;let{invalidateQuotaCache:LA}=await Promise.resolve().then(() => (a3(),XY));if(EA==="claude")try{let cA=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),PA=await new Response(cA.stdout).text();await cA.exited;let JB=JSON.parse(PA.trim());if(JB.loggedIn&&JB.authMethod==="claude.ai"){let bB=JB.email||"",PB=JB.subscriptionType||"pro",_A=`Claude ${PB.charAt(0).toUpperCase()+PB.slice(1)}${bB?` (${bB})`:""}`,{readClaudeAuth:bQ}=await Promise.resolve().then(() => (x3(),j3)),SQ=await bQ(),kQ=SQ.credentials||SQ.oauthAccount?{credentials:SQ.credentials,oauthAccount:SQ.oauthAccount}:void 0,ME=g.find((vI)=>vI.type==="claude-subscription"&&vI.email===bB);if(!ME)await ID({name:_A,type:"claude-subscription",email:bB,subscriptionType:PB,supportedClients:cI("claude-subscription"),authData:kQ}),c(uA?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else await ED(ME.id,{authData:kQ}),LA(ME.id,"claude-subscription"),c(uA?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else c(uA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{c(uA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let cA=await import("fs/promises"),{homedir:PA}=await import("os"),{join:JB}=await import("path"),bB=JSON.parse(await cA.readFile(JB(PA(),".codex","auth.json"),"utf-8"));if(bB.auth_mode==="chatgpt"&&bB.tokens?.access_token){let PB="";try{PB=JSON.parse(atob(bB.tokens.id_token.split(".")[1])).email||""}catch{}let _A=g.find((bQ)=>bQ.type==="codex-subscription"&&bQ.email===PB);if(!_A)await ID({name:PB?`Codex Plus (${PB})`:"Codex Subscription",type:"codex-subscription",email:PB||void 0,supportedClients:cI("codex-subscription"),authData:bB}),c(uA?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await ED(_A.id,{authData:bB}),LA(_A.id,"codex-subscription"),c(uA?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else c(uA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{c(uA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await WA(),C("list"),Z(0)},[g,uA,WA]);if(BQ(iB.useCallback((EA,CA)=>{if(I==="list"){if(CA.escape||EA==="q"){B();return}if(CA.leftArrow){X((LA)=>LA>0?LA-1:AB.length-1);return}if(CA.rightArrow){X((LA)=>LA<AB.length-1?LA+1:0);return}let e=parseInt(EA);if(e>=1&&e<=AB.length){X(e-1);return}if(CA.upArrow){Z((LA)=>LA>0?LA-1:OA-1);return}if(CA.downArrow){Z((LA)=>LA<OA-1?LA+1:0);return}if(CA.return){if(O<kA.length){let LA=kA[O];Z1(IA.id,LA.id).then(()=>{B()})}else if(O===kA.length)C("add-type"),Z(0);else if(O===kA.length+1)GB();else if(O===kA.length+2)B("client-versions");else B();return}if((EA==="d"||EA==="e")&&O<kA.length)V(kA[O].id),C("detail"),v(0);return}if(I==="detail"){if(CA.leftArrow){v((e)=>e>0?e-1:DA.length-1);return}if(CA.rightArrow){v((e)=>e<DA.length-1?e+1:0);return}if(CA.escape){C("list"),Z(0);return}if(CA.return){let e=DA[k];if(e==="back"){C("list"),Z(0);return}if(e==="default")J5(S).then(()=>{c(uA?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),WA(),C("list"),Z(0)});if(e==="delete")U5(S).then(()=>{c(uA?"\u5DF2\u5220\u9664":"Deleted"),WA(),C("list"),Z(0)});if(e==="rekey")FA(f?.type||"tako"),wA(""),C("add-key"),Z(0);if(e==="relogin"){let LA=f?.type==="codex-subscription"?"codex":"claude";C("list"),Z(0),TB(LA)}}return}if(I==="add-type"){if(CA.upArrow){Z((e)=>e>0?e-1:y1.length-1);return}if(CA.downArrow){Z((e)=>e<y1.length-1?e+1:0);return}if(CA.escape){C("list"),Z(0);return}if(CA.return){let e=y1[O];if(FA(e),e==="claude-subscription"){TB("claude");return}if(e==="codex-subscription"){TB("codex");return}wA(""),GA(""),XA(C2(e)||""),C("add-key"),Z(0)}return}if(I==="add-key"){if(CA.escape){C("list"),Z(0);return}if(CA.return&&JA){if(r==="custom")C("add-url");else if(r==="deepseek"||r==="anthropic"||r==="tako"||r==="xiaomi")C("add-model"),Z(0);else bA();return}if(CA.backspace||CA.delete){wA((e)=>e.slice(0,-1));return}if(EA&&!CA.ctrl)wA((e)=>e+EA);return}if(I==="add-url"){if(CA.escape){C("list"),Z(0);return}if(CA.return){C("add-model"),Z(0);return}if(CA.backspace||CA.delete){GA((e)=>e.slice(0,-1));return}if(EA&&!CA.ctrl)GA((e)=>e+EA);return}if(I==="add-model"){let e=pF(r);if(CA.escape){C("list"),Z(0);return}if(e){if(CA.upArrow){Z((LA)=>LA>0?LA-1:e.length-1);return}if(CA.downArrow){Z((LA)=>LA<e.length-1?LA+1:0);return}if(CA.return){XA(e[O]),setTimeout(()=>bA(),0);return}}else{if(CA.return){let LA=s.trim();if(LA&&SI.some((cA)=>cA.id===LA))bA();else C("add-ctx");return}if(CA.backspace||CA.delete){XA((LA)=>LA.slice(0,-1));return}if(EA&&!CA.ctrl)XA((LA)=>LA+EA)}return}if(I==="add-ctx"){if(CA.escape){C("list"),Z(0);return}if(CA.return){bA();return}if(CA.backspace||CA.delete){UA((e)=>e.slice(0,-1));return}if(EA&&!CA.ctrl&&/^[0-9]$/.test(EA))UA((e)=>e+EA);return}},[I,O,k,kA,OA,AB.length,IA,S,f,DA,r,JA,ZA,s,qA,B,GB,TB,bA,WA,uA])),I==="scanning"||I==="logging-in"){let EA=I==="logging-in"?R0[fA==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},CA=I==="scanning"?uA?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":uA?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return xA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:xA.jsxDEV(h,{borderStyle:"round",borderColor:EA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[xA.jsxDEV(K,{color:EA.color,bold:!0,children:[EA.icon," ",CA]},void 0,!0,void 0,this),I==="logging-in"&&xA.jsxDEV(K,{dimColor:!0,children:uA?"\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(I==="add-key"||I==="add-url"||I==="add-model"||I==="add-ctx")return xA.jsxDEV(vY,{screen:I,addType:r,addKey:JA,addUrl:ZA,addModel:s,addCtx:qA,rowIdx:O,zh:uA},void 0,!1,void 0,this);if(I==="add-type")return xA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[xA.jsxDEV(h,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:xA.jsxDEV(K,{bold:!0,children:["\u2795 ",uA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),xA.jsxDEV(h,{flexDirection:"column",marginTop:1,gap:0,children:y1.map((EA,CA)=>{let e=R0[EA]||R0.custom,LA=O===CA,cA=uA?wE[EA]?.zh:wE[EA]?.en,PA=EA==="claude-subscription"||EA==="codex-subscription";return xA.jsxDEV(h,{borderStyle:LA?"bold":"round",borderColor:LA?e.color:"gray",paddingX:2,paddingY:0,children:xA.jsxDEV(h,{gap:1,children:[xA.jsxDEV(K,{color:e.color,bold:!0,children:e.icon},void 0,!1,void 0,this),xA.jsxDEV(K,{bold:LA,color:LA?e.color:void 0,children:cA},void 0,!1,void 0,this),PA&&xA.jsxDEV(K,{dimColor:!0,children:["(",uA?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!PA&&xA.jsxDEV(K,{dimColor:!0,children:["(",uA?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},EA,!1,void 0,this)})},void 0,!1,void 0,this),xA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(I==="detail"&&f)return xA.jsxDEV(VY,{provider:f,defaultId:N,detailActions:DA,detailIdx:k,zh:uA},void 0,!1,void 0,this);return xA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[xA.jsxDEV(h,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[xA.jsxDEV(K,{bold:!0,children:["\u26A1 ",uA?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),d&&xA.jsxDEV(K,{color:"green",children:[" \u2713 ",d]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),xA.jsxDEV(h,{marginTop:1,gap:1,justifyContent:"center",children:[xA.jsxDEV(K,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),AB.map((EA,CA)=>{let e=m5[EA.id]||{icon:"\u25AA",color:"white"},LA=CA===R;return xA.jsxDEV(h,{borderStyle:LA?"bold":"single",borderColor:LA?e.color:"gray",paddingX:2,children:xA.jsxDEV(K,{color:LA?e.color:void 0,bold:LA,dimColor:!LA,children:[e.icon," ",EA.name]},void 0,!0,void 0,this)},EA.id,!1,void 0,this)}),xA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),xA.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:VA,paddingX:1,paddingY:1,children:[kA.length===0&&xA.jsxDEV(h,{paddingX:2,paddingY:1,justifyContent:"center",children:xA.jsxDEV(K,{dimColor:!0,children:uA?"\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),kA.map((EA,CA)=>xA.jsxDEV(TY,{provider:EA,focused:O===CA,bound:EA.id===nA,isDefault:EA.id===N,zh:uA},EA.id,!1,void 0,this))]},void 0,!0,void 0,this),xA.jsxDEV(h,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:uA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:uA?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"versions",offset:2,icon:"\uD83D\uDCE6",label:uA?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"},{id:"back",offset:3,icon:"\u2190",label:uA?"\u8FD4\u56DE":"Back"}].map((EA)=>{let CA=O===kA.length+EA.offset;return xA.jsxDEV(h,{borderStyle:CA?"bold":"round",borderColor:CA?"cyan":"gray",paddingX:2,children:xA.jsxDEV(K,{bold:CA,color:CA?"cyan":void 0,dimColor:!CA,children:[EA.icon," ",EA.label]},void 0,!0,void 0,this)},EA.id,!1,void 0,this)})},void 0,!1,void 0,this),xA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}OQ();await KI();var CC=YA(FB(),1);MQ();async function _Y(){try{let B=await fg();if(!B)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let C=await(await fetch(`${RI}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:B})})).json(),F=await(await fetch(`${RI}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:B,period:"daily"})})).json();if(!C.success)return{success:!1,error:C.error||C.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let N=(F.data||[]).map((H)=>({model:H.model,requests:H.requests,cost:H.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:C.data?.usage?.total?.requests||0,totalCost:C.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(C.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:N}}}catch(B){return{success:!1,error:B instanceof Error?B.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function mY(B){return B.toLocaleString("en-US")}var $I=YA(VB(),1);function hY({onExit:B}){let[I,C]=CC.useState(null),[g,F]=CC.useState(!0),[N,H]=CC.useState(10),J=CC.useCallback(async()=>{F(!0);let R=await _Y();if(R.success&&R.data)C(R.data);F(!1)},[]);CC.useEffect(()=>{J()},[J]),CC.useEffect(()=>{let R=setInterval(()=>{H((X)=>{if(X<=1)return J(),10;return X-1})},1000);return()=>clearInterval(R)},[J]),BQ((R,X)=>{if(R==="q"||X.escape)B()});let M=rQ()==="zh";return $I.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[$I.jsxDEV(K,{bold:!0,children:hA("stats.title")},void 0,!1,void 0,this),g&&!I?$I.jsxDEV(K,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):I?$I.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[$I.jsxDEV(K,{children:hA("stats.totalRequests",{count:mY(I.totalRequests)})},void 0,!1,void 0,this),$I.jsxDEV(K,{children:hA("stats.totalCost",{cost:I.totalCost})},void 0,!1,void 0,this),$I.jsxDEV(K,{children:hA("stats.todayCost",{cost:I.todayCost})},void 0,!1,void 0,this),I.modelStats.length>0&&$I.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[$I.jsxDEV(K,{bold:!0,dimColor:!0,children:M?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),I.modelStats.map((R,X)=>$I.jsxDEV(K,{dimColor:!0,children:[X===I.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",R.model.padEnd(25)," ",String(R.requests).padStart(5)," ",R.cost]},R.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):$I.jsxDEV(K,{color:"red",children:M?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),$I.jsxDEV(h,{marginTop:1,children:$I.jsxDEV(K,{dimColor:!0,children:M?`${N}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${N}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}OQ();await KI();var tC=YA(FB(),1);MQ();OQ();M0();mE();dC();function ev(B){return B.startsWith("cr_")&&B.length>10}async function AV(B){try{let C=await(await fetch(`${RI}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:B})})).json();if(C.success&&C.data?.id)return{valid:!0,apiId:C.data.id};return{valid:!1,error:C.error||hA("auth.validationFailed")}}catch(I){return{valid:!1,error:I instanceof Error?I.message:hA("auth.networkError")}}}async function bY(B){if(!ev(B))return _Q("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:hA("auth.invalidFormat")};let I=await AV(B);if(!I.valid)return _Q("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:I.error};return await bg({apiKey:B,apiId:I.apiId}),await BV(B,I.apiId),_Q("api_key_validated",{success:!0}),IC(),hE(),{success:!0}}async function BV(B,I){let g=(await kI()).find((F)=>F.type==="tako");if(g)await ED(g.id,{apiKey:B,apiId:I});else await ID({name:"Tako \u5B98\u65B9",type:"tako",apiKey:B,baseUrl:RI,apiId:I,supportedClients:cI("tako"),builtin:!0})}M0();var JE=YA(VB(),1);function fY({isReconfigure:B,onDone:I}){let[C,g]=tC.useState(""),[F,N]=tC.useState("idle"),[H,J]=tC.useState(""),{stdin:M,setRawMode:R}=S2();tC.useEffect(()=>{if(!M)return;R(!0);let k=(v)=>{let S=v.toString();if(S.length>1&&!S.startsWith("\x1B"))g((V)=>V+S.replace(/[\r\n]/g,""))};return M.on("data",k),()=>{M.off("data",k)}},[M,R]);let X=tC.useCallback(async()=>{if(!C||F==="validating")return;N("validating");let k=await bY(C);if(k.success)N("success"),IC(),hE(),setTimeout(()=>I(!0),500);else N("error"),J(k.error||"Validation failed")},[C,F,I]);BQ((k,v)=>{if(v.escape){I(!1);return}if(v.return){X();return}if(v.backspace||v.delete){g((S)=>S.slice(0,-1)),N("idle");return}if(k&&!v.ctrl&&k.length===1)g((S)=>S+k),N("idle")});let O=C.length<=6?C:`${C.slice(0,3)}${"\u2022".repeat(Math.min(C.length-6,20))}${C.slice(-3)}`,Z=rQ()==="zh";return JE.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[JE.jsxDEV(K,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",B?hA("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),JE.jsxDEV(h,{marginTop:1,children:[JE.jsxDEV(K,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),JE.jsxDEV(K,{children:O},void 0,!1,void 0,this),F==="idle"&&JE.jsxDEV(K,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F==="validating"&&JE.jsxDEV(K,{color:"yellow",children:["\u23F3 ",hA("prompts.validating")]},void 0,!0,void 0,this),F==="success"&&JE.jsxDEV(K,{color:"green",children:["\u2713 ",hA("prompts.keyConfigured")]},void 0,!0,void 0,this),F==="error"&&JE.jsxDEV(K,{color:"red",children:["\u2717 ",H]},void 0,!0,void 0,this),JE.jsxDEV(h,{marginTop:1,children:JE.jsxDEV(K,{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)}OQ();await KI();var jY=YA(FB(),1),gC=YA(VB(),1),T1=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function xY({onDone:B}){let[I,C]=jY.useState(T1.findIndex((g)=>g.value===rQ()));return BQ((g,F)=>{if(F.upArrow)C((N)=>N>0?N-1:T1.length-1);if(F.downArrow)C((N)=>N<T1.length-1?N+1:0);if(F.return)G5(T1[I].value),B();if(F.escape)B()}),gC.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[gC.jsxDEV(K,{bold:!0,children:["\uD83C\uDF10 ",hA("menu.changeLanguage")]},void 0,!0,void 0,this),T1.map((g,F)=>gC.jsxDEV(h,{gap:1,marginTop:F===0?1:0,children:[gC.jsxDEV(K,{color:"cyan",bold:F===I,children:F===I?"\u25B8":" "},void 0,!1,void 0,this),gC.jsxDEV(K,{bold:F===I,children:g.label},void 0,!1,void 0,this),g.value===rQ()&&gC.jsxDEV(K,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},g.value,!0,void 0,this)),gC.jsxDEV(h,{marginTop:1,children:gC.jsxDEV(K,{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)}MQ();MQ();OQ();await KI();var n3=YA(FB(),1),DQ=YA(VB(),1);import{join as QV}from"path";var iY=QV(VQ,".key-prompt.json");async function IV(){try{return await Bun.file(iY).json()}catch{return{}}}async function pY(B){await Bun.write(iY,JSON.stringify(B))}async function dY(){if(await B6())return!1;let B=await IV();if(B.never)return!1;let I=new Date().toISOString().slice(0,10);if(B.dismissed===I)return!1;return!0}async function cY(B){if(B==="never")await pY({never:!0});else{let I=new Date().toISOString().slice(0,10);await pY({dismissed:I})}}var o3=[{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 lY({onDone:B}){let[I,C]=n3.useState(0),g=rQ()==="zh";return BQ(n3.useCallback((F,N)=>{if(N.upArrow){C((H)=>H>0?H-1:o3.length-1);return}if(N.downArrow){C((H)=>H<o3.length-1?H+1:0);return}if(N.escape){B("skip");return}if(N.return){B(o3[I].id);return}},[I,B])),DQ.jsxDEV(h,{flexDirection:"column",paddingX:0,paddingY:1,children:[DQ.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[DQ.jsxDEV(h,{gap:1,children:[DQ.jsxDEV(K,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),DQ.jsxDEV(K,{bold:!0,children:g?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DQ.jsxDEV(h,{marginTop:1,flexDirection:"column",children:[DQ.jsxDEV(K,{dimColor:!0,children:g?"\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),DQ.jsxDEV(K,{dimColor:!0,children:g?"\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),DQ.jsxDEV(h,{marginTop:1,flexDirection:"column",children:o3.map((F,N)=>{let H=N===I;return DQ.jsxDEV(h,{paddingLeft:1,gap:1,children:[DQ.jsxDEV(K,{color:H?F.color||"white":void 0,bold:H,children:H?"\u25B8":" "},void 0,!1,void 0,this),DQ.jsxDEV(K,{bold:H,color:H?F.color||"white":void 0,children:g?F.label.zh:F.label.en},void 0,!1,void 0,this),H&&DQ.jsxDEV(K,{dimColor:!0,children:g?F.hint.zh:F.hint.en},void 0,!1,void 0,this)]},F.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DQ.jsxDEV(h,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[DQ.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:g?"\u9009\u62E9":"select"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:g?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:g?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}await KI();var yI=YA(FB(),1);OI();MQ();z2();import{join as r3}from"path";async function s3(B){let C=`${await oI()}/${encodeURIComponent(B).replace("%40","@")}`,g=await fetch(C,{signal:AbortSignal.timeout(1e4)});if(!g.ok)throw Error(`registry http ${g.status}`);let F=await g.json(),N=Object.keys(F.versions??{});if(!N.length)throw Error("no versions found");let H=F.time??{},J=N.map((M)=>({version:M,publishedAt:H[M],isCurrent:!1}));return J.sort((M,R)=>{let X=M.publishedAt?Date.parse(M.publishedAt):0;return(R.publishedAt?Date.parse(R.publishedAt):0)-X}),J}async function t3(B,I){let C=await import("fs/promises"),g=r0(B.id);await C.mkdir(g,{recursive:!0});let F=r3(g,"bun.lock"),N=r3(g,"node_modules");await C.rm(F,{force:!0}).catch(()=>{}),await C.rm(N,{recursive:!0,force:!0}).catch(()=>{});let H=r3(g,"package.json");await Bun.write(H,JSON.stringify({name:`tako-${B.id}-host`,version:"0.0.0",private:!0},null,2));let J=await oI(),{detectRegion:M}=await Promise.resolve().then(() => (z2(),fW)),R=await M(),{log:X}=await Promise.resolve().then(() => (t0(),R7));X.info(`\u7F51\u7EDC\u73AF\u5883: ${R==="cn"?"\u56FD\u5185":"\u6D77\u5916"} | registry: ${J}`);let O=Bun.spawn([nQ,"add",`${B.package}@${I}`],{cwd:g,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:J}});if(await O.exited,O.exitCode!==0){let k=await new Response(O.stderr).text();throw Error(`bun add ${B.package}@${I} failed: ${k.slice(0,500).trim()}`)}let Z=await EB();await bg({installedClients:{...Z.installedClients,[B.id]:{version:I,installedAt:new Date().toISOString()}}})}async function e3(B){let I=r0(B.id),C=r3(I,"node_modules",B.package,"package.json");try{let F=Bun.file(C);if(await F.exists()){let N=await F.json();if(N.version)return N.version}}catch{}return(await EB()).installedClients[B.id]?.version??null}OQ();var OB=YA(VB(),1),h5=12,aY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}};function oY({onDone:B}){let I=jg(),C=rQ()==="zh",[g,F]=yI.useState(0),[N,H]=yI.useState(0),[J,M]=yI.useState(0),[R,X]=yI.useState({}),[O,Z]=yI.useState(null),[k,v]=yI.useState(""),S=I[g],V=yI.useCallback(async(wA)=>{X((GA)=>({...GA,[wA]:{loading:!0,versions:[],current:null}}));let ZA=I.find((GA)=>GA.id===wA);if(!ZA)return;try{let[GA,s]=await Promise.all([s3(ZA.package),e3(ZA)]),XA=GA.map((qA)=>({...qA,isCurrent:qA.version===s}));X((qA)=>({...qA,[wA]:{loading:!1,versions:XA,current:s}}))}catch(GA){X((s)=>({...s,[wA]:{loading:!1,error:GA.message,versions:[],current:null}}))}},[I]);yI.useEffect(()=>{if(!S)return;if(!R[S.id])V(S.id)},[g,S?.id]),yI.useEffect(()=>{H(0),M(0)},[g]),yI.useEffect(()=>{if(!k)return;let wA=setTimeout(()=>v(""),3000);return()=>clearTimeout(wA)},[k]);let d=S?R[S.id]:void 0,c=d?.versions??[],r=yI.useCallback(async(wA)=>{if(!S||O)return;Z(wA);try{await t3(S,wA),v(C?`\u2713 \u5DF2\u5207\u6362\u5230 ${wA}`:`\u2713 Switched to ${wA}`),await V(S.id)}catch(ZA){v(C?`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${ZA.message}`:`\u2717 Install failed: ${ZA.message}`)}finally{Z(null)}},[S,O,V,C]);BQ((wA,ZA)=>{if(O)return;if(ZA.escape||wA==="q"){B();return}if(ZA.leftArrow){F((s)=>s>0?s-1:I.length-1);return}if(ZA.rightArrow){F((s)=>s<I.length-1?s+1:0);return}if(wA==="r"){if(S)V(S.id);return}if(!c.length)return;let GA=c.length-1;if(ZA.upArrow){H((s)=>{let XA=Math.max(0,s-1);if(XA<J)M(XA);return XA});return}if(ZA.downArrow){H((s)=>{let XA=Math.min(GA,s+1);if(XA>=J+h5)M(XA-h5+1);return XA});return}if(ZA.return){let s=c[N];if(s&&!s.isCurrent)r(s.version)}});let FA=aY[S?.id]?.color||"white",JA=c.slice(J,J+h5);return OB.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[OB.jsxDEV(h,{borderStyle:"round",borderColor:"gray",paddingX:3,children:[OB.jsxDEV(K,{bold:!0,children:["\uD83D\uDCE6 ",C?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"]},void 0,!0,void 0,this),k&&OB.jsxDEV(K,{color:k.startsWith("\u2713")?"green":"red",children:[" ",k]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),OB.jsxDEV(h,{marginTop:1,gap:1,justifyContent:"center",children:I.map((wA,ZA)=>{let GA=aY[wA.id]||{icon:"\u25AA",color:"white"},s=ZA===g;return OB.jsxDEV(h,{borderStyle:s?"bold":"single",borderColor:s?GA.color:"gray",paddingX:2,children:OB.jsxDEV(K,{bold:s,color:s?GA.color:void 0,dimColor:!s,children:[GA.icon," ",wA.name]},void 0,!0,void 0,this)},wA.id,!1,void 0,this)})},void 0,!1,void 0,this),OB.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:FA,paddingX:2,paddingY:1,children:!d||d.loading?OB.jsxDEV(K,{dimColor:!0,children:C?"\u52A0\u8F7D\u4E2D...":"Loading..."},void 0,!1,void 0,this):d.error?OB.jsxDEV(K,{color:"red",children:[C?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: ",d.error]},void 0,!0,void 0,this):c.length===0?OB.jsxDEV(K,{dimColor:!0,children:C?"\u6682\u65E0\u7248\u672C":"No versions"},void 0,!1,void 0,this):OB.jsxDEV(h,{flexDirection:"column",children:[OB.jsxDEV(K,{dimColor:!0,children:[C?`\u5171 ${c.length} \u4E2A\u7248\u672C\uFF0C\u5F53\u524D\u5B89\u88C5\uFF1A`:`${c.length} versions, current: `,OB.jsxDEV(K,{color:FA,children:d.current??(C?"\u672A\u5B89\u88C5":"not installed")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),OB.jsxDEV(h,{marginTop:1,flexDirection:"column",children:JA.map((wA,ZA)=>{let s=J+ZA===N,XA=wA.publishedAt?wA.publishedAt.slice(0,10):"",qA=wA.isCurrent?C?" \u2605 \u5F53\u524D":" \u2605 current":"",UA=O===wA.version,uA=s?FA:wA.isCurrent?"green":void 0;return OB.jsxDEV(h,{paddingLeft:1,children:OB.jsxDEV(K,{color:uA,bold:s,dimColor:!s&&!wA.isCurrent,children:[s?"\u25B6 ":" ",wA.version.padEnd(16),XA.padEnd(14),qA,UA?C?" \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),OB.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u9009\u62E9":"select"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u5B89\u88C5":"install"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}OQ();await eD([KI(),U4()]);var hQ=YA(FB(),1);OQ();gD();await eD([KI(),U4()]);var sQ=YA(FB(),1),KB=YA(VB(),1),RZ=300,uZ=200;function OV(B){let I=new Date(B.ts).toISOString().slice(11,19);switch(B.kind){case"session_started":return{dim:!0,text:`[${I}] \u25B6 session_started ${B.backend}`};case"turn_started":return{color:"cyan",text:`[${I}] \u25B6 turn_started`};case"text_delta":return{text:B.text};case"reasoning_delta":return{dim:!0,text:`[${I}] \uD83D\uDCAD ${B.text.slice(0,200)}`};case"tool_use":return{color:"yellow",text:`[${I}] \uD83D\uDD27 ${B.name} ${JSON.stringify(B.input).slice(0,160)}`};case"tool_result":return{color:"green",text:`[${I}] \u2713 result`};case"approval_required":return{color:"magenta",text:`[${I}] \u26A0 approval(${B.approvalType})`};case"turn_completed":return{color:"cyan",text:`[${I}] \u25C0 turn_completed`};case"error":return{color:"red",text:`[${I}] \u2717 ${B.message}`};case"session_closed":return{dim:!0,text:`[${I}] \u23F9 closed`};default:return{text:JSON.stringify(B)}}}function KZ({sid:B,onBack:I}){let C=UE()==="zh",[g,F]=sQ.useState(null),[N,H]=sQ.useState([]),[J,M]=sQ.useState(""),[R,X]=sQ.useState("idle"),[O,Z]=sQ.useState(null),[k,v]=sQ.useState([]),S=sQ.useRef(0),V=sQ.useCallback(async()=>{let FA=await P2(B,uZ);if(!FA)return;F(FA.meta),H(FA.log);try{let wA=await(await import("fs/promises")).stat(iQ(B));S.current=wA.size}catch{S.current=0}},[B]);sQ.useEffect(()=>{V()},[V]),sQ.useEffect(()=>{let FA=!1,JA=null,wA=async()=>{if(FA)return;try{let ZA=await import("fs/promises"),GA=await ZA.stat(iQ(B));if(GA.size>S.current){let s=await ZA.open(iQ(B),"r"),XA=Buffer.alloc(GA.size-S.current);await s.read(XA,0,XA.length,S.current),await s.close(),S.current=GA.size;let qA=[];for(let UA of XA.toString("utf-8").split(`
|
|
771
|
+
`)[0];if(Z)F=Z;else return{success:!1,error:`\u627E\u4E0D\u5230 ${B.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${B.id}`}}catch{return{success:!1,error:`\u627E\u4E0D\u5230 ${B.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${B.id}`}}}let H=B.getEnvVars(g),J={...process.env,...H,...I?.envVars??{}},M;if(B.runtime==="native")M=[F];else M=[await EC(),F];if(I?.args&&I.args.length>0)M=[...M,...I.args];let R=process.platform==="win32";if(!R)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(R){let{spawnSync:X}=await import("child_process");X(M[0],M.slice(1),{env:J,stdio:"inherit",cwd:C,windowsHide:!1})}else try{Bun.spawnSync(M,{env:J,stdio:["inherit","inherit","inherit"],cwd:C})}catch{await Bun.spawn(M,{env:J,stdio:["inherit","inherit","inherit"],cwd:C}).exited}return{success:!0}}catch(C){return{success:!1,error:C instanceof Error?C.message:"\u542F\u52A8\u5931\u8D25"}}}async function $v(B,I){if(I?.providerContext)return I.providerContext;let C=await aI();if(C){let g=await BC(B.id);if(g.some((N)=>N.id===C.id))return zI(C);if(g.length>0)return zI(g[0])}return null}async function c3(B,I){try{let C=I?.projectPath||process.cwd();if(I?.projectPath){if(!await T5(I.projectPath))return{success:!1,error:hA("launcher.directoryNotFound",{path:I.projectPath})}}let g=await EY(B);if(!g.success)return g;let F=await $v(B,I);if(!F)return{success:!1,error:hA("launcher.apiKeyNotConfigured")};if(B.setupConfigFiles)await B.setupConfigFiles(F,I?.selectedOptionIds);await CY(C,B.id,I?.selectedOptionIds);let H=(await EB()).installedClients[B.id]?.version;return _Q("client_launched",{client_id:B.id,client_version:H,project_hash:oW(C),is_recent_project:!!I?.projectPath}),aA.info(hA("launcher.starting",{client:B.name})),await GY(B,{...I,providerContext:F})}catch(C){return{success:!1,error:C instanceof Error?C.message:"Launch failed"}}}OI();OQ();M0();t0();mE();mE();M0();async function l3(B){let I=await BC(B);if(I.length===0)return null;let C=await QC(B);if(C)return zI(C);if(I.length===1)return zI(I[0]);let g=await aI();if(g&&I.some((F)=>F.id===g.id))return zI(g);return zI(I[0])}async function NY(){let B=await X1();if(await q1(B)>0){for(let C of B)_Q("provider_added",{provider_type:C.type,method:"auto_detect"});IC(),hE()}}await KI();var LE=YA(FB(),1);await KI();var QQ=YA(FB(),1);OI();mE();OQ();a3();await KI();var YB=YA(VB(),1),cv=[["\u2191\u2193","\u9009\u62E9","select"],["Enter","\u786E\u8BA4","confirm"],["Esc","\u53D6\u6D88","cancel"]];function qY({zh:B}){return YB.jsxDEV(h,{marginTop:1,justifyContent:"center",gap:2,children:cv.flatMap((I,C)=>{return[C>0?YB.jsxDEV(K,{dimColor:!0,children:"\u2502"},`s${C}`,!1,void 0,this):null,YB.jsxDEV(K,{dimColor:!0,bold:!0,children:I[0]},`k${C}`,!1,void 0,this),YB.jsxDEV(K,{dimColor:!0,children:B?I[1]:I[2]},`l${C}`,!1,void 0,this)]})},void 0,!1,void 0,this)}function OY({provs:B,provIdx:I,pickerIdx:C,color:g,zh:F}){return YB.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:g,paddingX:2,paddingY:1,children:[YB.jsxDEV(K,{bold:!0,color:g,children:["\u25A3 ",F?"\u9009\u62E9\u670D\u52A1\u5546":"Pick Provider"]},void 0,!0,void 0,this),YB.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[B.length===0&&YB.jsxDEV(h,{paddingLeft:1,children:YB.jsxDEV(K,{dimColor:!0,children:F?"\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),B.map((N,H)=>{let J=C===H,M=H===I;return YB.jsxDEV(h,{paddingLeft:1,children:[YB.jsxDEV(K,{color:J?g:void 0,bold:J,children:J?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:J,color:J?g:void 0,children:[" ",N.name]},void 0,!0,void 0,this),N.email&&YB.jsxDEV(K,{dimColor:!0,children:[" (",N.email,")"]},void 0,!0,void 0,this),M&&YB.jsxDEV(K,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},N.id,!0,void 0,this)}),(()=>{let N=C===B.length;return YB.jsxDEV(h,{paddingLeft:1,marginTop:1,children:[YB.jsxDEV(K,{color:N?g:void 0,bold:N,children:N?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:N,color:N?g:void 0,children:[" ","\u2699 ",F?"\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),YB.jsxDEV(qY,{zh:F},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function SY({group:B,options:I,enabled:C,pickerIdx:g,color:F,zh:N}){let H=I.filter((R)=>R.group===B),J=B==="model"?N?"\u9009\u62E9\u6A21\u578B":"Pick Model":B,M=!H.some((R)=>C.has(R.id));return YB.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:F,paddingX:2,paddingY:1,children:[YB.jsxDEV(K,{bold:!0,color:F,children:["\u25A3 ",J]},void 0,!0,void 0,this),YB.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[(()=>{let R=g===0;return YB.jsxDEV(h,{paddingLeft:1,children:[YB.jsxDEV(K,{color:R?F:void 0,bold:R,children:R?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:R,color:R?F:void 0,children:[" ",N?"\u9ED8\u8BA4\uFF08\u4E0D\u6307\u5B9A\uFF09":"Default (none)"]},void 0,!0,void 0,this),M&&YB.jsxDEV(K,{color:"green",children:" \u2605"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)})(),H.map((R,X)=>{let O=g===X+1,Z=C.has(R.id);return YB.jsxDEV(h,{paddingLeft:1,flexDirection:"column",children:[YB.jsxDEV(h,{children:[YB.jsxDEV(K,{color:O?F:void 0,bold:O,children:O?"\u25B8":" "},void 0,!1,void 0,this),YB.jsxDEV(K,{bold:O,color:O?F:void 0,children:[" ",R.label[N?"zh":"en"]||R.label.en]},void 0,!0,void 0,this),Z&&YB.jsxDEV(K,{color:"green",children:" \u2605"},void 0,!1,void 0,this),YB.jsxDEV(K,{dimColor:!0,children:[" ",R.flag]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),O&&YB.jsxDEV(h,{paddingLeft:3,children:YB.jsxDEV(K,{dimColor:!0,children:R.description[N?"zh":"en"]||R.description.en},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},R.id,!0,void 0,this)})]},void 0,!0,void 0,this),YB.jsxDEV(qY,{zh:N},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var BA=YA(VB(),1),lv="0.3.4",kY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},zY={icon:"\u25AA",color:"white"};async function av(){let B=jg(),I=await FY(),C=await aI(),g=rQ()==="zh",F=[...B].sort((J,M)=>{if(J.id===I)return-1;if(M.id===I)return 1;return 0}),N=[];for(let J of F){let M=await DY(J.id,y5,!0),R=process.cwd(),X=[{label:g?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:v5(R,45),path:R},...M.map((r)=>({label:v5(r.path,45),hint:wY(r.lastLaunchedAt),path:r.path}))],O=await BC(J.id),k=await QC(J.id)||O.find((r)=>r.id===C?.id)||O[0],v=k?O.findIndex((r)=>r.id===k.id):0,S=bF(J,k),V=await gY(J.id),d=S.map((r)=>r.id),c=V.filter((r)=>d.includes(r));N.push({client:J,projects:X,providers:O,activeProvIdx:Math.max(v,0),launchOptions:S,lastSelectedOptionIds:c})}let H=N.some((J)=>J.providers.length>0);return{clients:N,defaultIdx:0,hasProviders:H}}function $Y({color:B}){let{stdout:I}=D5(),C=Math.max((I.columns||80)-6,20);return BA.jsxDEV(h,{marginY:0,children:BA.jsxDEV(K,{dimColor:!0,color:B,children:"\u2500".repeat(C)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function ov(B){return B>30?"green":B>10?"yellow":"red"}function nv({provider:B,zh:I}){if(!B)return BA.jsxDEV(K,{color:"yellow",children:["\u26A0 ",I?"\u672A\u7ED1\u5B9A":"no provider"]},void 0,!0,void 0,this);let C={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"}},g=C[B.type]??C.custom,F=I?g.zh:g.en,N=B.email??"";if(N.length>0){let[H,J]=N.split("@");if(H&&J)N=H.length>14?`${H.slice(0,12)}\u2026@${J}`:N}return BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV(K,{color:g.color,children:[g.icon," ",F]},void 0,!0,void 0,this),N&&BA.jsxDEV(K,{dimColor:!0,children:[" \xB7 ",N]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function rv({quota:B,zh:I}){if(B.status==="unsupported")return null;if(B.status==="error")return BA.jsxDEV(K,{dimColor:!0,children:["\uD83D\uDCB0 ",B.hint||(I?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")]},void 0,!0,void 0,this);if(B.provider==="tako")if(!!(B.primary?.costLimit||B.secondary?.costLimit||B.daily?.costLimit));else{let J=B.daily??B.primary??B.secondary;if(!J)return null;let M=J.costUsed??0;return BA.jsxDEV(K,{dimColor:!0,children:["\uD83D\uDCB0 ",I?"\u4ECA\u65E5":"Today",": ",BA.jsxDEV(K,{color:"green",children:["$",M.toFixed(2)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}let C=(H,J,M)=>{if(H&&H>=1440)return`${Math.round(H/1440)}d`;if(H)return`${Math.round(H/60)}h`;return M?`${M}d`:`${J}h`},g=(H)=>Math.max(0,Math.min(100,100-Math.round(H))),F=[],N=(H,J,M)=>{if(F.length)F.push(BA.jsxDEV(K,{dimColor:!0,children:" \xB7 "},`sep-${H}`,!1,void 0,this));let R=g(M);F.push(BA.jsxDEV(QQ.default.Fragment,{children:[`${J} \u5269 `,BA.jsxDEV(K,{color:ov(R),children:[R,"%"]},void 0,!0,void 0,this)]},H,!0,void 0,this))};if(B.primary)N("primary",C(B.primary.windowMinutes,5),B.primary.usedPct);if(B.secondary)N("secondary",C(B.secondary.windowMinutes,24,7),B.secondary.usedPct);if(B.modelLimits?.opus)N("opus","opus",B.modelLimits.opus.usedPct);if(!F.length)return null;return BA.jsxDEV(K,{dimColor:!0,children:["\uD83D\uDCB0 ",F]},void 0,!0,void 0,this)}function sv(B,I){let C=[],g=new Set;for(let F of B)if(!F.group)C.push({kind:"flag",opt:F});else if(!g.has(F.group)){g.add(F.group);let N=F.group==="model"?I?"\u6A21\u578B":"Model":F.group;C.push({kind:"group",group:F.group,title:N})}return C.push({kind:"provider",title:I?"\u670D\u52A1\u5546":"Provider"}),C}function _5(B,I,C){return B.find((g)=>g.group===C&&I.has(g.id))}function tv({clients:B,defaultIdx:I,hasProviders:C,onResult:g}){let[F,N]=QQ.useState(I),[H,J]=QQ.useState("projects"),[M,R]=QQ.useState(0),[X,O]=QQ.useState(0),[Z,k]=QQ.useState(()=>B[I]?.activeProvIdx||0),[v,S]=QQ.useState(()=>new Set(B[I]?.lastSelectedOptionIds??[])),[V,d]=QQ.useState(""),[c,r]=QQ.useState(null),[FA,JA]=QQ.useState(!1),[wA,ZA]=QQ.useState(0),GA=B[F],s=GA.projects,XA=GA.providers,qA=kY[GA.client.id]||zY,UA=rQ()==="zh",uA=XA[Z],AB=QQ.default.useMemo(()=>bF(GA.client,uA),[GA.client.id,uA?.id,uA?.type]),IA=QQ.default.useMemo(()=>sv(AB,UA),[AB,UA]),VA=uA?.name||(UA?"\u672A\u914D\u7F6E":"N/A"),[kA,nA]=QQ.useState(null);return QQ.useEffect(()=>{if(!uA){nA(null);return}let OA=!1;return $1(uA).then((f)=>{if(!OA)nA(f)}),()=>{OA=!0}},[uA?.id,uA?.type]),QQ.useEffect(()=>{R(0),O(0),J("projects"),k(B[F]?.activeProvIdx||0),r(null),JA(!1),S(new Set(B[F]?.lastSelectedOptionIds??[]))},[F]),QQ.useEffect(()=>{let OA=new Set(AB.map((DA)=>DA.id)),f=new Set(AB.filter((DA)=>DA.group==="model").map((DA)=>DA.id)),NA=uA?.model?`model-${uA.model}`:void 0;S((DA)=>{let WA=new Set,bA=!1,GB=!1;for(let fA of DA)if(OA.has(fA)){if(WA.add(fA),f.has(fA))GB=!0}else bA=!0;if(!GB&&NA&&f.has(NA))WA.add(NA),bA=!0;return bA?WA:DA})},[AB,uA?.model]),BQ(QQ.useCallback((OA,f)=>{if(FA){let DA=XA.length+1;if(f.escape||OA==="q"){JA(!1);return}if(f.upArrow){ZA((WA)=>WA>0?WA-1:DA-1);return}if(f.downArrow){ZA((WA)=>WA<DA-1?WA+1:0);return}if(f.return)if(wA<XA.length){let WA=XA[wA];k(wA),(async()=>{if(await Z1(GA.client.id,WA.id),GA.client.setupConfigFiles)try{await GA.client.setupConfigFiles(zI(WA))}catch(bA){d(UA?"\u26A0 \u914D\u7F6E\u540C\u6B65\u5931\u8D25":"\u26A0 Config sync failed"),setTimeout(()=>d(""),2500);return}GA.activeProvIdx=wA,d(UA?`\u2713 \u5DF2\u7ED1\u5B9A ${WA.name}`:`\u2713 Bound ${WA.name}`),setTimeout(()=>d(""),2000)})(),JA(!1)}else JA(!1),g({type:"providers"});return}if(c){let DA=AB.filter((bA)=>bA.group===c),WA=DA.length+1;if(f.escape||OA==="q"){r(null);return}if(f.upArrow){ZA((bA)=>bA>0?bA-1:WA-1);return}if(f.downArrow){ZA((bA)=>bA<WA-1?bA+1:0);return}if(f.return){if(wA===0)S((bA)=>{let GB=new Set(bA);for(let fA of DA)GB.delete(fA.id);return GB});else{let bA=DA[wA-1];S((GB)=>{let fA=new Set(GB);for(let hB of DA)fA.delete(hB.id);return fA.add(bA.id),fA})}r(null)}return}if(OA==="q"){g({type:"exit"});return}if(OA==="a"){g({type:"agent"});return}if(OA==="s"){g({type:"stats"});return}if(OA==="c"){g({type:"config"});return}if(OA==="l"){g({type:"language"});return}if(OA==="p"){g({type:"providers"});return}let NA=parseInt(OA);if(NA>=1&&NA<=B.length){N(NA-1);return}if(f.leftArrow){N((DA)=>DA>0?DA-1:B.length-1);return}if(f.rightArrow){N((DA)=>DA<B.length-1?DA+1:0);return}if(H==="projects"){if(f.downArrow){if(M<s.length-1)R((DA)=>DA+1);else if(IA.length>0)J("options"),O(0);return}if(f.upArrow){if(M>0)R((DA)=>DA-1);return}}if(H==="options"){if(f.downArrow){if(X<IA.length-1)O((DA)=>DA+1);return}if(f.upArrow){if(X>0)O((DA)=>DA-1);else J("projects"),R(s.length-1);return}}if(OA===" "&&H==="options"&&IA.length>0){let DA=IA[X];if(DA.kind==="flag")S((WA)=>{let bA=new Set(WA);if(bA.has(DA.opt.id))bA.delete(DA.opt.id);else bA.add(DA.opt.id);return bA});else if(DA.kind==="group"){let WA=_5(AB,v,DA.group),bA=AB.filter((fA)=>fA.group===DA.group),GB=WA?bA.findIndex((fA)=>fA.id===WA.id)+1:0;ZA(Math.max(0,GB)),r(DA.group)}else ZA(Z),JA(!0);return}if(f.return){if(H==="options"&&IA.length>0){let fA=IA[X];if(fA.kind==="group"){let hB=_5(AB,v,fA.group),TB=AB.filter((CA)=>CA.group===fA.group),EA=hB?TB.findIndex((CA)=>CA.id===hB.id)+1:0;ZA(Math.max(0,EA)),r(fA.group);return}if(fA.kind==="provider"){ZA(Z),JA(!0);return}}let DA=s[M],WA=[],bA={},GB=[];for(let fA of AB)if(v.has(fA.id)){if(WA.push(...fA.args),fA.envVars)Object.assign(bA,fA.envVars);GB.push(fA.id)}g({type:"launch",clientId:GA.client.id,projectPath:DA.path,args:WA,envVars:bA,selectedOptionIds:GB})}},[H,F,M,X,Z,XA,uA,GA,s,AB,IA,v,B,g,UA,c,FA,wA])),BA.jsxDEV(h,{flexDirection:"column",paddingX:0,paddingY:1,children:[BA.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:qA.color,paddingX:2,paddingY:1,children:[BA.jsxDEV(h,{justifyContent:"space-between",children:[BA.jsxDEV(h,{gap:1,children:[BA.jsxDEV(K,{bold:!0,children:"\uD83D\uDC19 Tako"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:["v",lv]},void 0,!0,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(nv,{provider:uA,zh:UA},void 0,!1,void 0,this)]},void 0,!0,void 0,this),BA.jsxDEV(h,{children:[V&&BA.jsxDEV(K,{color:"green",children:V},void 0,!1,void 0,this),!V&&kA&&BA.jsxDEV(rv,{quota:kA,zh:UA},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!C&&BA.jsxDEV(h,{marginTop:1,justifyContent:"center",gap:1,children:[BA.jsxDEV(K,{color:"yellow",children:"\u26A0"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\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),BA.jsxDEV(h,{marginTop:1,gap:1,justifyContent:"center",children:[BA.jsxDEV(K,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),B.map((OA,f)=>{let NA=kY[OA.client.id]||zY;return f===F?BA.jsxDEV(h,{borderStyle:"bold",borderColor:NA.color,paddingX:1,children:BA.jsxDEV(K,{color:NA.color,bold:!0,children:[NA.icon," ",OA.client.name]},void 0,!0,void 0,this)},OA.client.id,!1,void 0,this):BA.jsxDEV(h,{borderStyle:"single",borderColor:"gray",paddingX:1,children:BA.jsxDEV(K,{dimColor:!0,children:[NA.icon," ",OA.client.name]},void 0,!0,void 0,this)},OA.client.id,!1,void 0,this)}),BA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),BA.jsxDEV($Y,{color:qA.color},void 0,!1,void 0,this),FA?BA.jsxDEV(OY,{provs:XA,provIdx:Z,pickerIdx:wA,color:qA.color,zh:UA},void 0,!1,void 0,this):c?BA.jsxDEV(SY,{group:c,options:AB,enabled:v,pickerIdx:wA,color:qA.color,zh:UA},void 0,!1,void 0,this):BA.jsxDEV(BA.Fragment,{children:[s.map((OA,f)=>{let NA=H==="projects"&&f===M;return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:OA.label},void 0,!1,void 0,this)]},void 0,!0,void 0,this),OA.hint?BA.jsxDEV(K,{dimColor:!0,children:OA.hint},void 0,!1,void 0,this):null]},f,!0,void 0,this)}),IA.length>0&&BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV($Y,{color:qA.color},void 0,!1,void 0,this),IA.map((OA,f)=>{let NA=H==="options"&&f===X;if(OA.kind==="flag"){let DA=OA.opt,WA=v.has(DA.id);return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{color:WA?qA.color:void 0,bold:WA,children:WA?"\u25C9":"\u25CB"},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:DA.label[UA?"zh":"en"]||DA.label.en},void 0,!1,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:DA.flag},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:DA.description[UA?"zh":"en"]||DA.description.en},void 0,!1,void 0,this)]},DA.id,!0,void 0,this)}if(OA.kind==="group"){let DA=_5(AB,v,OA.group),WA=DA?DA.shortLabel:UA?"\u9ED8\u8BA4":"Default";return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:[OA.title,":"]},void 0,!0,void 0,this),BA.jsxDEV(K,{color:DA?qA.color:void 0,children:WA},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:UA?"Enter \u8FDB\u5165\u9009\u62E9":"Enter to pick"},void 0,!1,void 0,this)]},`group-${OA.group}`,!0,void 0,this)}return BA.jsxDEV(h,{paddingLeft:1,children:[BA.jsxDEV(h,{flexGrow:1,gap:1,children:[BA.jsxDEV(K,{color:NA?qA.color:void 0,bold:NA,children:NA?"\u25B8":" "},void 0,!1,void 0,this),BA.jsxDEV(K,{bold:NA,color:NA?qA.color:void 0,children:[OA.title,":"]},void 0,!0,void 0,this),BA.jsxDEV(K,{color:uA?qA.color:"yellow",children:uA?VA:UA?"\u672A\u914D\u7F6E":"Not set"},void 0,!1,void 0,this),BA.jsxDEV(K,{color:"yellow",children:"\u2605"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),NA&&BA.jsxDEV(K,{dimColor:!0,children:UA?"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),BA.jsxDEV(h,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:H==="options"?BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Space"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u5F00\u5173":"toggle"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u9000\u51FA":"quit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):BA.jsxDEV(BA.Fragment,{children:[BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u542F\u52A8":"launch"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"a"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"agent"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u5207\u6362\u5DE5\u5177":"switch tool"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"p"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u670D\u52A1\u5546":"service"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"s"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\u7EDF\u8BA1":"stats"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),BA.jsxDEV(K,{dimColor:!0,children:UA?"\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 yY({onResult:B}){let[I,C]=QQ.useState(null);if(QQ.useEffect(()=>{av().then(C)},[]),!I)return BA.jsxDEV(K,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this);return BA.jsxDEV(tv,{clients:I.clients,defaultIdx:I.defaultIdx,hasProviders:I.hasProviders,onResult:B},void 0,!1,void 0,this)}OQ();mE();await KI();var iB=YA(FB(),1);dC();dC();M0();dC();await KI();var HA=YA(VB(),1),R0={"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"}},m5={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}},y1=["claude-subscription","codex-subscription","tako","anthropic","deepseek","xiaomi","custom"];function TY({provider:B,focused:I,bound:C,isDefault:g,zh:F}){let N=R0[B.type]||R0.custom,H=F?wE[B.type]?.zh:wE[B.type]?.en;return HA.jsxDEV(h,{flexDirection:"column",borderStyle:I?"bold":"round",borderColor:I?N.color:C?N.color:"gray",paddingX:2,paddingY:0,children:[HA.jsxDEV(h,{justifyContent:"space-between",children:[HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{color:N.color,bold:!0,children:N.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:I||C,color:I?N.color:void 0,children:B.name},void 0,!1,void 0,this),g&&HA.jsxDEV(K,{color:"yellow",children:["\u2605 ",F?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this),B.builtin&&HA.jsxDEV(K,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{gap:1,children:C?HA.jsxDEV(K,{color:N.color,bold:!0,children:["\u25CF ",F?"\u5DF2\u7ED1\u5B9A":"bound"]},void 0,!0,void 0,this):HA.jsxDEV(K,{dimColor:!0,children:["\u25CB ",F?"\u672A\u7ED1\u5B9A":"unbound"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:H},void 0,!1,void 0,this),B.model&&HA.jsxDEV(K,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),B.model&&HA.jsxDEV(K,{dimColor:!0,children:B.model},void 0,!1,void 0,this),B.email&&HA.jsxDEV(K,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),B.email&&HA.jsxDEV(K,{dimColor:!0,children:B.email},void 0,!1,void 0,this),B.apiKey&&HA.jsxDEV(K,{dimColor:!0,children:"\xB7"},void 0,!1,void 0,this),B.apiKey&&HA.jsxDEV(K,{dimColor:!0,children:["Key: ",B.apiKey.slice(0,8),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),I&&HA.jsxDEV(h,{marginTop:0,children:HA.jsxDEV(K,{color:N.color,dimColor:!0,children:["Enter ",F?"\u7ED1\u5B9A\u5230\u5F53\u524D\u5DE5\u5177":"bind to this tool"," \xB7 d ",F?"\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 vY({screen:B,addType:I,addKey:C,addUrl:g,addModel:F,addCtx:N,rowIdx:H,zh:J}){let M=R0[I]||R0.custom,R=J?wE[I]?.zh:wE[I]?.en,X=B==="add-model"?pF(I):void 0;if(X)return HA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[HA.jsxDEV(h,{borderStyle:"bold",borderColor:M.color,paddingX:3,paddingY:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,marginBottom:1,children:[HA.jsxDEV(K,{color:M.color,bold:!0,children:M.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:!0,color:M.color,children:R},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:["\u2014 ",J?"\u9009\u62E9\u6A21\u578B":"Select Model"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X.map((S,V)=>{let d=H===V;return HA.jsxDEV(h,{paddingLeft:1,gap:1,children:[HA.jsxDEV(K,{color:d?M.color:void 0,bold:d,children:d?"\u25B8":" "},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:d,color:d?M.color:void 0,children:S},void 0,!1,void 0,this)]},S,!0,void 0,this)})]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u9009\u62E9":"select"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);let O=B==="add-key"?J?"\u8F93\u5165 API Key":"Enter API Key":B==="add-url"?"Base URL":B==="add-ctx"?J?"\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08tokens\uFF0C\u53EF\u7559\u7A7A\uFF09":"Context Window (tokens, optional)":J?"\u6A21\u578B":"Model",Z=B==="add-key"?C:B==="add-url"?g:B==="add-ctx"?N??"":F,k=B==="add-url"?"https://your-proxy.com":B==="add-ctx"?J?"\u5982 200000\uFF1Bcatalog \u6CA1\u6709\u8BE5\u6A21\u578B\u65F6\u5EFA\u8BAE\u586B\u5199":"e.g. 200000; recommended if model is unknown to catalog":B==="add-model"?C2(I)||(J?"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4":"leave empty"):void 0,v=B==="add-url"?J?"\u4E0B\u4E00\u6B65":"next":B==="add-ctx"?J?"\u4FDD\u5B58":"save":B==="add-model"?J?"\u4FDD\u5B58":"save":J?"\u786E\u8BA4":"confirm";return HA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[HA.jsxDEV(h,{borderStyle:"bold",borderColor:M.color,paddingX:3,paddingY:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,marginBottom:1,children:[HA.jsxDEV(K,{color:M.color,bold:!0,children:M.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:!0,color:M.color,children:R},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:["\u2014 ",O]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B==="add-key"&&I==="xiaomi"&&HA.jsxDEV(K,{dimColor:!0,children:[" ",J?"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),k&&HA.jsxDEV(K,{dimColor:!0,children:[" ",J?"\u9ED8\u8BA4":"Default",": ",k]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:k?1:0,children:[HA.jsxDEV(K,{color:M.color,bold:!0,children:["\u203A"," "]},void 0,!0,void 0,this),HA.jsxDEV(K,{children:Z||k||""},void 0,!1,void 0,this),HA.jsxDEV(K,{color:M.color,children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:v},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:J?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function VY({provider:B,defaultId:I,detailActions:C,detailIdx:g,zh:F}){let N=R0[B.type]||R0.custom,H=F?wE[B.type]?.zh:wE[B.type]?.en;return HA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[HA.jsxDEV(h,{borderStyle:"bold",borderColor:N.color,paddingX:3,paddingY:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{color:N.color,bold:!0,children:N.icon},void 0,!1,void 0,this),HA.jsxDEV(K,{bold:!0,color:N.color,children:B.name},void 0,!1,void 0,this),B.id===I&&HA.jsxDEV(K,{color:"yellow",children:[" \u2605 ",F?"\u9ED8\u8BA4":"default"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),HA.jsxDEV(h,{marginTop:1,flexDirection:"column",children:[HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:[F?"\u7C7B\u578B":"Type",":"]},void 0,!0,void 0,this),HA.jsxDEV(K,{children:H},void 0,!1,void 0,this),B.builtin&&HA.jsxDEV(K,{dimColor:!0,children:"[built-in]"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.model&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:[F?"\u6A21\u578B":"Model",":"]},void 0,!0,void 0,this),HA.jsxDEV(K,{children:B.model},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.email&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:"Email:"},void 0,!1,void 0,this),HA.jsxDEV(K,{children:B.email},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.apiKey&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:"Key:"},void 0,!1,void 0,this),HA.jsxDEV(K,{children:[B.apiKey.slice(0,12),"\u2022\u2022\u2022"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B.baseUrl&&HA.jsxDEV(h,{gap:1,children:[HA.jsxDEV(K,{dimColor:!0,children:"URL:"},void 0,!1,void 0,this),HA.jsxDEV(K,{children:B.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),HA.jsxDEV(h,{gap:1,marginTop:1,children:C.map((J,M)=>{let R=J==="default"?`\u2B50 ${F?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set Default"}`:J==="rekey"?`\uD83D\uDD11 ${F?"\u4FEE\u6539 Key":"Change Key"}`:J==="relogin"?`\uD83D\uDD04 ${F?"\u91CD\u65B0\u767B\u5F55":"Re-login"}`:J==="delete"?`\uD83D\uDDD1\uFE0F ${F?"\u5220\u9664":"Delete"}`:`\u2190 ${F?"\u8FD4\u56DE":"Back"}`,X=M===g;return HA.jsxDEV(h,{borderStyle:X?"bold":"round",borderColor:X?"cyan":"gray",paddingX:2,children:HA.jsxDEV(K,{bold:X,color:X?"cyan":void 0,dimColor:!X,children:R},void 0,!1,void 0,this)},J,!1,void 0,this)})},void 0,!1,void 0,this),HA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:F?"\u9009\u62E9":"select"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:F?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),HA.jsxDEV(K,{dimColor:!0,children:F?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var xA=YA(VB(),1);function PY({onDone:B}){let[I,C]=iB.useState("list"),[g,F]=iB.useState([]),[N,H]=iB.useState(),[J,M]=iB.useState({}),[R,X]=iB.useState(0),[O,Z]=iB.useState(0),[k,v]=iB.useState(0),[S,V]=iB.useState(""),[d,c]=iB.useState(""),[r,FA]=iB.useState("tako"),[JA,wA]=iB.useState(""),[ZA,GA]=iB.useState(""),[s,XA]=iB.useState(""),[qA,UA]=iB.useState(""),uA=rQ()==="zh",AB=jg(),IA=AB[R],VA=m5[IA?.id]?.color||"white",kA=IA?g.filter((EA)=>g2(EA,IA.id)):[],nA=J[IA?.id]||N,OA=kA.length+4,f=g.find((EA)=>EA.id===S),NA=f?.type==="claude-subscription"||f?.type==="codex-subscription",DA=f?[...f.id!==N?["default"]:[],...NA?["relogin"]:[],...f.builtin?["rekey"]:["delete"],"back"]:["back"],WA=iB.useCallback(async()=>{let EA=await kI(),CA=await aI();F(EA),H(CA?.id);let e={};for(let LA of jg()){let cA=await QC(LA.id);e[LA.id]=cA?.id}M(e)},[]);iB.useEffect(()=>{WA()},[WA]),iB.useEffect(()=>{Z(0)},[R]),iB.useEffect(()=>{if(d){let EA=setTimeout(()=>c(""),3000);return()=>clearTimeout(EA)}},[d]);let bA=iB.useCallback(async()=>{if(S&&g.find((PA)=>PA.id===S)?.builtin){await ED(S,{apiKey:JA}),c(uA?"Key \u5DF2\u66F4\u65B0":"Key updated"),await WA(),C("list"),Z(0);return}let EA=wE[r]?.[uA?"zh":"en"]||r,CA=ZA||K6(r),e=s||C2(r),LA=qA?parseInt(qA,10):NaN,cA=Number.isFinite(LA)&&LA>0?LA:void 0;await ID({name:EA,type:r,apiKey:JA,baseUrl:CA,model:e,modelContextWindow:cA,supportedClients:cI(r)}),_Q("provider_added",{provider_type:r,method:"manual"}),IC(),hE(),c(uA?"\u5DF2\u6DFB\u52A0":"Added"),UA(""),await WA(),C("list"),Z(0)},[r,JA,ZA,s,qA,uA,WA,S,g]),GB=iB.useCallback(async()=>{C("scanning");let EA=await X1(),CA=await q1(EA);if(CA>0)IC(),hE();c(uA?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${CA} \u4E2A`:`Scan done, ${CA} added`),await WA(),C("list"),Z(0)},[WA,uA]),[fA,hB]=iB.useState("claude"),TB=iB.useCallback(async(EA)=>{hB(EA),C("logging-in");let CA=EA==="claude"?["claude","auth","login","--claudeai"]:["codex","login"];await Bun.spawn(CA,{stdin:"inherit",stdout:"pipe",stderr:"pipe"}).exited;let{invalidateQuotaCache:LA}=await Promise.resolve().then(() => (a3(),XY));if(EA==="claude")try{let cA=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),PA=await new Response(cA.stdout).text();await cA.exited;let JB=JSON.parse(PA.trim());if(JB.loggedIn&&JB.authMethod==="claude.ai"){let bB=JB.email||"",PB=JB.subscriptionType||"pro",_A=`Claude ${PB.charAt(0).toUpperCase()+PB.slice(1)}${bB?` (${bB})`:""}`,{readClaudeAuth:bQ}=await Promise.resolve().then(() => (x3(),j3)),SQ=await bQ(),kQ=SQ.credentials||SQ.oauthAccount?{credentials:SQ.credentials,oauthAccount:SQ.oauthAccount}:void 0,ME=g.find((vI)=>vI.type==="claude-subscription"&&vI.email===bB);if(!ME)await ID({name:_A,type:"claude-subscription",email:bB,subscriptionType:PB,supportedClients:cI("claude-subscription"),authData:kQ}),c(uA?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added");else await ED(ME.id,{authData:kQ}),LA(ME.id,"claude-subscription"),c(uA?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else c(uA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{c(uA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}else try{let cA=await import("fs/promises"),{homedir:PA}=await import("os"),{join:JB}=await import("path"),bB=JSON.parse(await cA.readFile(JB(PA(),".codex","auth.json"),"utf-8"));if(bB.auth_mode==="chatgpt"&&bB.tokens?.access_token){let PB="";try{PB=JSON.parse(atob(bB.tokens.id_token.split(".")[1])).email||""}catch{}let _A=g.find((bQ)=>bQ.type==="codex-subscription"&&bQ.email===PB);if(!_A)await ID({name:PB?`Codex Plus (${PB})`:"Codex Subscription",type:"codex-subscription",email:PB||void 0,supportedClients:cI("codex-subscription"),authData:bB}),c(uA?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added");else await ED(_A.id,{authData:bB}),LA(_A.id,"codex-subscription"),c(uA?"\u5DF2\u66F4\u65B0 tokens":"Tokens updated")}else c(uA?"\u767B\u5F55\u5931\u8D25":"Login failed")}catch{c(uA?"\u68C0\u6D4B\u5931\u8D25":"Detection failed")}await WA(),C("list"),Z(0)},[g,uA,WA]);if(BQ(iB.useCallback((EA,CA)=>{if(I==="list"){if(CA.escape||EA==="q"){B();return}if(CA.leftArrow){X((LA)=>LA>0?LA-1:AB.length-1);return}if(CA.rightArrow){X((LA)=>LA<AB.length-1?LA+1:0);return}let e=parseInt(EA);if(e>=1&&e<=AB.length){X(e-1);return}if(CA.upArrow){Z((LA)=>LA>0?LA-1:OA-1);return}if(CA.downArrow){Z((LA)=>LA<OA-1?LA+1:0);return}if(CA.return){if(O<kA.length){let LA=kA[O];Z1(IA.id,LA.id).then(()=>{B()})}else if(O===kA.length)C("add-type"),Z(0);else if(O===kA.length+1)GB();else if(O===kA.length+2)B("client-versions");else B();return}if((EA==="d"||EA==="e")&&O<kA.length)V(kA[O].id),C("detail"),v(0);return}if(I==="detail"){if(CA.leftArrow){v((e)=>e>0?e-1:DA.length-1);return}if(CA.rightArrow){v((e)=>e<DA.length-1?e+1:0);return}if(CA.escape){C("list"),Z(0);return}if(CA.return){let e=DA[k];if(e==="back"){C("list"),Z(0);return}if(e==="default")J5(S).then(()=>{c(uA?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"),WA(),C("list"),Z(0)});if(e==="delete")U5(S).then(()=>{c(uA?"\u5DF2\u5220\u9664":"Deleted"),WA(),C("list"),Z(0)});if(e==="rekey")FA(f?.type||"tako"),wA(""),C("add-key"),Z(0);if(e==="relogin"){let LA=f?.type==="codex-subscription"?"codex":"claude";C("list"),Z(0),TB(LA)}}return}if(I==="add-type"){if(CA.upArrow){Z((e)=>e>0?e-1:y1.length-1);return}if(CA.downArrow){Z((e)=>e<y1.length-1?e+1:0);return}if(CA.escape){C("list"),Z(0);return}if(CA.return){let e=y1[O];if(FA(e),e==="claude-subscription"){TB("claude");return}if(e==="codex-subscription"){TB("codex");return}wA(""),GA(""),XA(C2(e)||""),C("add-key"),Z(0)}return}if(I==="add-key"){if(CA.escape){C("list"),Z(0);return}if(CA.return&&JA){if(r==="custom")C("add-url");else if(r==="deepseek"||r==="anthropic"||r==="tako"||r==="xiaomi")C("add-model"),Z(0);else bA();return}if(CA.backspace||CA.delete){wA((e)=>e.slice(0,-1));return}if(EA&&!CA.ctrl)wA((e)=>e+EA);return}if(I==="add-url"){if(CA.escape){C("list"),Z(0);return}if(CA.return){C("add-model"),Z(0);return}if(CA.backspace||CA.delete){GA((e)=>e.slice(0,-1));return}if(EA&&!CA.ctrl)GA((e)=>e+EA);return}if(I==="add-model"){let e=pF(r);if(CA.escape){C("list"),Z(0);return}if(e){if(CA.upArrow){Z((LA)=>LA>0?LA-1:e.length-1);return}if(CA.downArrow){Z((LA)=>LA<e.length-1?LA+1:0);return}if(CA.return){XA(e[O]),setTimeout(()=>bA(),0);return}}else{if(CA.return){let LA=s.trim();if(LA&&SI.some((cA)=>cA.id===LA))bA();else C("add-ctx");return}if(CA.backspace||CA.delete){XA((LA)=>LA.slice(0,-1));return}if(EA&&!CA.ctrl)XA((LA)=>LA+EA)}return}if(I==="add-ctx"){if(CA.escape){C("list"),Z(0);return}if(CA.return){bA();return}if(CA.backspace||CA.delete){UA((e)=>e.slice(0,-1));return}if(EA&&!CA.ctrl&&/^[0-9]$/.test(EA))UA((e)=>e+EA);return}},[I,O,k,kA,OA,AB.length,IA,S,f,DA,r,JA,ZA,s,qA,B,GB,TB,bA,WA,uA])),I==="scanning"||I==="logging-in"){let EA=I==="logging-in"?R0[fA==="claude"?"claude-subscription":"codex-subscription"]:{icon:"\u23F3",color:"yellow"},CA=I==="scanning"?uA?"\u6B63\u5728\u626B\u63CF\u672C\u5730\u8BA2\u9605...":"Scanning local subscriptions...":uA?"\u6B63\u5728\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...":"Logging in, please authorize in browser...";return xA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:xA.jsxDEV(h,{borderStyle:"round",borderColor:EA.color,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",children:[xA.jsxDEV(K,{color:EA.color,bold:!0,children:[EA.icon," ",CA]},void 0,!0,void 0,this),I==="logging-in"&&xA.jsxDEV(K,{dimColor:!0,children:uA?"\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(I==="add-key"||I==="add-url"||I==="add-model"||I==="add-ctx")return xA.jsxDEV(vY,{screen:I,addType:r,addKey:JA,addUrl:ZA,addModel:s,addCtx:qA,rowIdx:O,zh:uA},void 0,!1,void 0,this);if(I==="add-type")return xA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[xA.jsxDEV(h,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:xA.jsxDEV(K,{bold:!0,children:["\u2795 ",uA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),xA.jsxDEV(h,{flexDirection:"column",marginTop:1,gap:0,children:y1.map((EA,CA)=>{let e=R0[EA]||R0.custom,LA=O===CA,cA=uA?wE[EA]?.zh:wE[EA]?.en,PA=EA==="claude-subscription"||EA==="codex-subscription";return xA.jsxDEV(h,{borderStyle:LA?"bold":"round",borderColor:LA?e.color:"gray",paddingX:2,paddingY:0,children:xA.jsxDEV(h,{gap:1,children:[xA.jsxDEV(K,{color:e.color,bold:!0,children:e.icon},void 0,!1,void 0,this),xA.jsxDEV(K,{bold:LA,color:LA?e.color:void 0,children:cA},void 0,!1,void 0,this),PA&&xA.jsxDEV(K,{dimColor:!0,children:["(",uA?"\u767B\u5F55\u6388\u6743":"login auth",")"]},void 0,!0,void 0,this),!PA&&xA.jsxDEV(K,{dimColor:!0,children:["(",uA?"\u586B\u5199 Key":"enter key",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},EA,!1,void 0,this)})},void 0,!1,void 0,this),xA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(I==="detail"&&f)return xA.jsxDEV(VY,{provider:f,defaultId:N,detailActions:DA,detailIdx:k,zh:uA},void 0,!1,void 0,this);return xA.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[xA.jsxDEV(h,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0,children:[xA.jsxDEV(K,{bold:!0,children:["\u26A1 ",uA?"\u7BA1\u7406\u670D\u52A1\u5546":"Manage Providers"]},void 0,!0,void 0,this),d&&xA.jsxDEV(K,{color:"green",children:[" \u2713 ",d]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),xA.jsxDEV(h,{marginTop:1,gap:1,justifyContent:"center",children:[xA.jsxDEV(K,{dimColor:!0,children:"\u2039"},void 0,!1,void 0,this),AB.map((EA,CA)=>{let e=m5[EA.id]||{icon:"\u25AA",color:"white"},LA=CA===R;return xA.jsxDEV(h,{borderStyle:LA?"bold":"single",borderColor:LA?e.color:"gray",paddingX:2,children:xA.jsxDEV(K,{color:LA?e.color:void 0,bold:LA,dimColor:!LA,children:[e.icon," ",EA.name]},void 0,!0,void 0,this)},EA.id,!1,void 0,this)}),xA.jsxDEV(K,{dimColor:!0,children:"\u203A"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),xA.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:VA,paddingX:1,paddingY:1,children:[kA.length===0&&xA.jsxDEV(h,{paddingX:2,paddingY:1,justifyContent:"center",children:xA.jsxDEV(K,{dimColor:!0,children:uA?"\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),kA.map((EA,CA)=>xA.jsxDEV(TY,{provider:EA,focused:O===CA,bound:EA.id===nA,isDefault:EA.id===N,zh:uA},EA.id,!1,void 0,this))]},void 0,!0,void 0,this),xA.jsxDEV(h,{marginTop:1,gap:1,children:[{id:"add",offset:0,icon:"\u2795",label:uA?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider"},{id:"scan",offset:1,icon:"\uD83D\uDD0D",label:uA?"\u626B\u63CF\u8BA2\u9605":"Scan"},{id:"versions",offset:2,icon:"\uD83D\uDCE6",label:uA?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"},{id:"back",offset:3,icon:"\u2190",label:uA?"\u8FD4\u56DE":"Back"}].map((EA)=>{let CA=O===kA.length+EA.offset;return xA.jsxDEV(h,{borderStyle:CA?"bold":"round",borderColor:CA?"cyan":"gray",paddingX:2,children:xA.jsxDEV(K,{bold:CA,color:CA?"cyan":void 0,dimColor:!CA,children:[EA.icon," ",EA.label]},void 0,!0,void 0,this)},EA.id,!1,void 0,this)})},void 0,!1,void 0,this),xA.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u9009\u62E9":"select"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u7ED1\u5B9A":"bind"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u8BE6\u60C5":"detail"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),xA.jsxDEV(K,{dimColor:!0,children:uA?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}OQ();await KI();var CC=YA(FB(),1);MQ();async function _Y(){try{let B=await fg();if(!B)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let C=await(await fetch(`${RI}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:B})})).json(),F=await(await fetch(`${RI}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:B,period:"daily"})})).json();if(!C.success)return{success:!1,error:C.error||C.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let N=(F.data||[]).map((H)=>({model:H.model,requests:H.requests,cost:H.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:C.data?.usage?.total?.requests||0,totalCost:C.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(C.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:N}}}catch(B){return{success:!1,error:B instanceof Error?B.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function mY(B){return B.toLocaleString("en-US")}var $I=YA(VB(),1);function hY({onExit:B}){let[I,C]=CC.useState(null),[g,F]=CC.useState(!0),[N,H]=CC.useState(10),J=CC.useCallback(async()=>{F(!0);let R=await _Y();if(R.success&&R.data)C(R.data);F(!1)},[]);CC.useEffect(()=>{J()},[J]),CC.useEffect(()=>{let R=setInterval(()=>{H((X)=>{if(X<=1)return J(),10;return X-1})},1000);return()=>clearInterval(R)},[J]),BQ((R,X)=>{if(R==="q"||X.escape)B()});let M=rQ()==="zh";return $I.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[$I.jsxDEV(K,{bold:!0,children:hA("stats.title")},void 0,!1,void 0,this),g&&!I?$I.jsxDEV(K,{dimColor:!0,children:"Loading..."},void 0,!1,void 0,this):I?$I.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[$I.jsxDEV(K,{children:hA("stats.totalRequests",{count:mY(I.totalRequests)})},void 0,!1,void 0,this),$I.jsxDEV(K,{children:hA("stats.totalCost",{cost:I.totalCost})},void 0,!1,void 0,this),$I.jsxDEV(K,{children:hA("stats.todayCost",{cost:I.todayCost})},void 0,!1,void 0,this),I.modelStats.length>0&&$I.jsxDEV(h,{flexDirection:"column",marginTop:1,children:[$I.jsxDEV(K,{bold:!0,dimColor:!0,children:M?"\u6A21\u578B\u5206\u5E03":"Model Distribution"},void 0,!1,void 0,this),I.modelStats.map((R,X)=>$I.jsxDEV(K,{dimColor:!0,children:[X===I.modelStats.length-1?"\u2514\u2500":"\u251C\u2500"," ",R.model.padEnd(25)," ",String(R.requests).padStart(5)," ",R.cost]},R.model,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):$I.jsxDEV(K,{color:"red",children:M?"\u83B7\u53D6\u5931\u8D25":"Failed to load"},void 0,!1,void 0,this),$I.jsxDEV(h,{marginTop:1,children:$I.jsxDEV(K,{dimColor:!0,children:M?`${N}s \u540E\u5237\u65B0 q \u8FD4\u56DE`:`Refresh in ${N}s q back`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}OQ();await KI();var tC=YA(FB(),1);MQ();OQ();M0();mE();dC();function ev(B){return B.startsWith("cr_")&&B.length>10}async function AV(B){try{let C=await(await fetch(`${RI}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:B})})).json();if(C.success&&C.data?.id)return{valid:!0,apiId:C.data.id};return{valid:!1,error:C.error||hA("auth.validationFailed")}}catch(I){return{valid:!1,error:I instanceof Error?I.message:hA("auth.networkError")}}}async function bY(B){if(!ev(B))return _Q("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:hA("auth.invalidFormat")};let I=await AV(B);if(!I.valid)return _Q("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:I.error};return await bg({apiKey:B,apiId:I.apiId}),await BV(B,I.apiId),_Q("api_key_validated",{success:!0}),IC(),hE(),{success:!0}}async function BV(B,I){let g=(await kI()).find((F)=>F.type==="tako");if(g)await ED(g.id,{apiKey:B,apiId:I});else await ID({name:"Tako \u5B98\u65B9",type:"tako",apiKey:B,baseUrl:RI,apiId:I,supportedClients:cI("tako"),builtin:!0})}M0();var JE=YA(VB(),1);function fY({isReconfigure:B,onDone:I}){let[C,g]=tC.useState(""),[F,N]=tC.useState("idle"),[H,J]=tC.useState(""),{stdin:M,setRawMode:R}=S2();tC.useEffect(()=>{if(!M)return;R(!0);let k=(v)=>{let S=v.toString();if(S.length>1&&!S.startsWith("\x1B"))g((V)=>V+S.replace(/[\r\n]/g,""))};return M.on("data",k),()=>{M.off("data",k)}},[M,R]);let X=tC.useCallback(async()=>{if(!C||F==="validating")return;N("validating");let k=await bY(C);if(k.success)N("success"),IC(),hE(),setTimeout(()=>I(!0),500);else N("error"),J(k.error||"Validation failed")},[C,F,I]);BQ((k,v)=>{if(v.escape){I(!1);return}if(v.return){X();return}if(v.backspace||v.delete){g((S)=>S.slice(0,-1)),N("idle");return}if(k&&!v.ctrl&&k.length===1)g((S)=>S+k),N("idle")});let O=C.length<=6?C:`${C.slice(0,3)}${"\u2022".repeat(Math.min(C.length-6,20))}${C.slice(-3)}`,Z=rQ()==="zh";return JE.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[JE.jsxDEV(K,{bold:!0,color:"cyan",children:["\uD83D\uDD11 ",B?hA("prompts.enterApiKey"):"API Key"]},void 0,!0,void 0,this),JE.jsxDEV(h,{marginTop:1,children:[JE.jsxDEV(K,{color:"cyan",bold:!0,children:[">"," "]},void 0,!0,void 0,this),JE.jsxDEV(K,{children:O},void 0,!1,void 0,this),F==="idle"&&JE.jsxDEV(K,{color:"cyan",children:"\u2588"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F==="validating"&&JE.jsxDEV(K,{color:"yellow",children:["\u23F3 ",hA("prompts.validating")]},void 0,!0,void 0,this),F==="success"&&JE.jsxDEV(K,{color:"green",children:["\u2713 ",hA("prompts.keyConfigured")]},void 0,!0,void 0,this),F==="error"&&JE.jsxDEV(K,{color:"red",children:["\u2717 ",H]},void 0,!0,void 0,this),JE.jsxDEV(h,{marginTop:1,children:JE.jsxDEV(K,{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)}OQ();await KI();var jY=YA(FB(),1),gC=YA(VB(),1),T1=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}];function xY({onDone:B}){let[I,C]=jY.useState(T1.findIndex((g)=>g.value===rQ()));return BQ((g,F)=>{if(F.upArrow)C((N)=>N>0?N-1:T1.length-1);if(F.downArrow)C((N)=>N<T1.length-1?N+1:0);if(F.return)G5(T1[I].value),B();if(F.escape)B()}),gC.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:2,paddingY:1,children:[gC.jsxDEV(K,{bold:!0,children:["\uD83C\uDF10 ",hA("menu.changeLanguage")]},void 0,!0,void 0,this),T1.map((g,F)=>gC.jsxDEV(h,{gap:1,marginTop:F===0?1:0,children:[gC.jsxDEV(K,{color:"cyan",bold:F===I,children:F===I?"\u25B8":" "},void 0,!1,void 0,this),gC.jsxDEV(K,{bold:F===I,children:g.label},void 0,!1,void 0,this),g.value===rQ()&&gC.jsxDEV(K,{dimColor:!0,children:"\u2190"},void 0,!1,void 0,this)]},g.value,!0,void 0,this)),gC.jsxDEV(h,{marginTop:1,children:gC.jsxDEV(K,{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)}MQ();MQ();OQ();await KI();var n3=YA(FB(),1),DQ=YA(VB(),1);import{join as QV}from"path";var iY=QV(VQ,".key-prompt.json");async function IV(){try{return await Bun.file(iY).json()}catch{return{}}}async function pY(B){await Bun.write(iY,JSON.stringify(B))}async function dY(){if(await B6())return!1;let B=await IV();if(B.never)return!1;let I=new Date().toISOString().slice(0,10);if(B.dismissed===I)return!1;return!0}async function cY(B){if(B==="never")await pY({never:!0});else{let I=new Date().toISOString().slice(0,10);await pY({dismissed:I})}}var o3=[{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 lY({onDone:B}){let[I,C]=n3.useState(0),g=rQ()==="zh";return BQ(n3.useCallback((F,N)=>{if(N.upArrow){C((H)=>H>0?H-1:o3.length-1);return}if(N.downArrow){C((H)=>H<o3.length-1?H+1:0);return}if(N.escape){B("skip");return}if(N.return){B(o3[I].id);return}},[I,B])),DQ.jsxDEV(h,{flexDirection:"column",paddingX:0,paddingY:1,children:[DQ.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1,children:[DQ.jsxDEV(h,{gap:1,children:[DQ.jsxDEV(K,{color:"cyan",bold:!0,children:"\uD83D\uDD11"},void 0,!1,void 0,this),DQ.jsxDEV(K,{bold:!0,children:g?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DQ.jsxDEV(h,{marginTop:1,flexDirection:"column",children:[DQ.jsxDEV(K,{dimColor:!0,children:g?"\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),DQ.jsxDEV(K,{dimColor:!0,children:g?"\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),DQ.jsxDEV(h,{marginTop:1,flexDirection:"column",children:o3.map((F,N)=>{let H=N===I;return DQ.jsxDEV(h,{paddingLeft:1,gap:1,children:[DQ.jsxDEV(K,{color:H?F.color||"white":void 0,bold:H,children:H?"\u25B8":" "},void 0,!1,void 0,this),DQ.jsxDEV(K,{bold:H,color:H?F.color||"white":void 0,children:g?F.label.zh:F.label.en},void 0,!1,void 0,this),H&&DQ.jsxDEV(K,{dimColor:!0,children:g?F.hint.zh:F.hint.en},void 0,!1,void 0,this)]},F.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this),DQ.jsxDEV(h,{paddingX:2,marginTop:1,justifyContent:"center",gap:2,children:[DQ.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:g?"\u9009\u62E9":"select"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:g?"\u786E\u8BA4":"confirm"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),DQ.jsxDEV(K,{dimColor:!0,children:g?"\u8DF3\u8FC7":"skip"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}await KI();var yI=YA(FB(),1);OI();MQ();z2();import{join as r3}from"path";async function s3(B){let C=`${await oI()}/${encodeURIComponent(B).replace("%40","@")}`,g=await fetch(C,{signal:AbortSignal.timeout(1e4)});if(!g.ok)throw Error(`registry http ${g.status}`);let F=await g.json(),N=Object.keys(F.versions??{});if(!N.length)throw Error("no versions found");let H=F.time??{},J=N.map((M)=>({version:M,publishedAt:H[M],isCurrent:!1}));return J.sort((M,R)=>{let X=M.publishedAt?Date.parse(M.publishedAt):0;return(R.publishedAt?Date.parse(R.publishedAt):0)-X}),J}async function t3(B,I){let C=await import("fs/promises"),g=r0(B.id);await C.mkdir(g,{recursive:!0});let F=r3(g,"bun.lock"),N=r3(g,"node_modules");await C.rm(F,{force:!0}).catch(()=>{}),await C.rm(N,{recursive:!0,force:!0}).catch(()=>{});let H=r3(g,"package.json");await Bun.write(H,JSON.stringify({name:`tako-${B.id}-host`,version:"0.0.0",private:!0},null,2));let J=await oI(),{detectRegion:M}=await Promise.resolve().then(() => (z2(),fW)),R=await M(),{log:X}=await Promise.resolve().then(() => (t0(),R7));X.info(`\u7F51\u7EDC\u73AF\u5883: ${R==="cn"?"\u56FD\u5185":"\u6D77\u5916"} | registry: ${J}`);let O=Bun.spawn([nQ,"add",`${B.package}@${I}`],{cwd:g,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:J}});if(await O.exited,O.exitCode!==0){let k=await new Response(O.stderr).text();throw Error(`bun add ${B.package}@${I} failed: ${k.slice(0,500).trim()}`)}let Z=await EB();await bg({installedClients:{...Z.installedClients,[B.id]:{version:I,installedAt:new Date().toISOString()}}})}async function e3(B){let I=r0(B.id),C=r3(I,"node_modules",B.package,"package.json");try{let F=Bun.file(C);if(await F.exists()){let N=await F.json();if(N.version)return N.version}}catch{}return(await EB()).installedClients[B.id]?.version??null}OQ();var OB=YA(VB(),1),h5=12,aY={"claude-code":{icon:"\u2726",color:"yellow"},codex:{icon:"\u25C8",color:"blue"},gemini:{icon:"\u25C6",color:"cyan"}};function oY({onDone:B}){let I=jg(),C=rQ()==="zh",[g,F]=yI.useState(0),[N,H]=yI.useState(0),[J,M]=yI.useState(0),[R,X]=yI.useState({}),[O,Z]=yI.useState(null),[k,v]=yI.useState(""),S=I[g],V=yI.useCallback(async(wA)=>{X((GA)=>({...GA,[wA]:{loading:!0,versions:[],current:null}}));let ZA=I.find((GA)=>GA.id===wA);if(!ZA)return;try{let[GA,s]=await Promise.all([s3(ZA.package),e3(ZA)]),XA=GA.map((qA)=>({...qA,isCurrent:qA.version===s}));X((qA)=>({...qA,[wA]:{loading:!1,versions:XA,current:s}}))}catch(GA){X((s)=>({...s,[wA]:{loading:!1,error:GA.message,versions:[],current:null}}))}},[I]);yI.useEffect(()=>{if(!S)return;if(!R[S.id])V(S.id)},[g,S?.id]),yI.useEffect(()=>{H(0),M(0)},[g]),yI.useEffect(()=>{if(!k)return;let wA=setTimeout(()=>v(""),3000);return()=>clearTimeout(wA)},[k]);let d=S?R[S.id]:void 0,c=d?.versions??[],r=yI.useCallback(async(wA)=>{if(!S||O)return;Z(wA);try{await t3(S,wA),v(C?`\u2713 \u5DF2\u5207\u6362\u5230 ${wA}`:`\u2713 Switched to ${wA}`),await V(S.id)}catch(ZA){v(C?`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${ZA.message}`:`\u2717 Install failed: ${ZA.message}`)}finally{Z(null)}},[S,O,V,C]);BQ((wA,ZA)=>{if(O)return;if(ZA.escape||wA==="q"){B();return}if(ZA.leftArrow){F((s)=>s>0?s-1:I.length-1);return}if(ZA.rightArrow){F((s)=>s<I.length-1?s+1:0);return}if(wA==="r"){if(S)V(S.id);return}if(!c.length)return;let GA=c.length-1;if(ZA.upArrow){H((s)=>{let XA=Math.max(0,s-1);if(XA<J)M(XA);return XA});return}if(ZA.downArrow){H((s)=>{let XA=Math.min(GA,s+1);if(XA>=J+h5)M(XA-h5+1);return XA});return}if(ZA.return){let s=c[N];if(s&&!s.isCurrent)r(s.version)}});let FA=aY[S?.id]?.color||"white",JA=c.slice(J,J+h5);return OB.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[OB.jsxDEV(h,{borderStyle:"round",borderColor:"gray",paddingX:3,children:[OB.jsxDEV(K,{bold:!0,children:["\uD83D\uDCE6 ",C?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"]},void 0,!0,void 0,this),k&&OB.jsxDEV(K,{color:k.startsWith("\u2713")?"green":"red",children:[" ",k]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),OB.jsxDEV(h,{marginTop:1,gap:1,justifyContent:"center",children:I.map((wA,ZA)=>{let GA=aY[wA.id]||{icon:"\u25AA",color:"white"},s=ZA===g;return OB.jsxDEV(h,{borderStyle:s?"bold":"single",borderColor:s?GA.color:"gray",paddingX:2,children:OB.jsxDEV(K,{bold:s,color:s?GA.color:void 0,dimColor:!s,children:[GA.icon," ",wA.name]},void 0,!0,void 0,this)},wA.id,!1,void 0,this)})},void 0,!1,void 0,this),OB.jsxDEV(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:FA,paddingX:2,paddingY:1,children:!d||d.loading?OB.jsxDEV(K,{dimColor:!0,children:C?"\u52A0\u8F7D\u4E2D...":"Loading..."},void 0,!1,void 0,this):d.error?OB.jsxDEV(K,{color:"red",children:[C?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: ",d.error]},void 0,!0,void 0,this):c.length===0?OB.jsxDEV(K,{dimColor:!0,children:C?"\u6682\u65E0\u7248\u672C":"No versions"},void 0,!1,void 0,this):OB.jsxDEV(h,{flexDirection:"column",children:[OB.jsxDEV(K,{dimColor:!0,children:[C?`\u5171 ${c.length} \u4E2A\u7248\u672C\uFF0C\u5F53\u524D\u5B89\u88C5\uFF1A`:`${c.length} versions, current: `,OB.jsxDEV(K,{color:FA,children:d.current??(C?"\u672A\u5B89\u88C5":"not installed")},void 0,!1,void 0,this)]},void 0,!0,void 0,this),OB.jsxDEV(h,{marginTop:1,flexDirection:"column",children:JA.map((wA,ZA)=>{let s=J+ZA===N,XA=wA.publishedAt?wA.publishedAt.slice(0,10):"",qA=wA.isCurrent?C?" \u2605 \u5F53\u524D":" \u2605 current":"",UA=O===wA.version,uA=s?FA:wA.isCurrent?"green":void 0;return OB.jsxDEV(h,{paddingLeft:1,children:OB.jsxDEV(K,{color:uA,bold:s,dimColor:!s&&!wA.isCurrent,children:[s?"\u25B6 ":" ",wA.version.padEnd(16),XA.padEnd(14),qA,UA?C?" \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),OB.jsxDEV(h,{marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:2,justifyContent:"center",gap:2,children:[OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2190\u2192"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u5207\u6362\u5DE5\u5177":"switch"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u9009\u62E9":"select"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u5B89\u88C5":"install"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,bold:!0,children:"Esc"},void 0,!1,void 0,this),OB.jsxDEV(K,{dimColor:!0,children:C?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}OQ();await eD([KI(),U4()]);var hQ=YA(FB(),1);OQ();gD();await eD([KI(),U4()]);var sQ=YA(FB(),1),KB=YA(VB(),1),RZ=300,uZ=200;function OV(B){let I=new Date(B.ts).toISOString().slice(11,19);switch(B.kind){case"session_started":return{dim:!0,text:`[${I}] \u25B6 session_started ${B.backend}`};case"turn_started":return{color:"cyan",text:`[${I}] \u25B6 turn_started`};case"text_delta":return{text:B.text};case"reasoning_delta":return{dim:!0,text:`[${I}] \uD83D\uDCAD ${B.text.slice(0,200)}`};case"tool_use":return{color:"yellow",text:`[${I}] \uD83D\uDD27 ${B.name} ${JSON.stringify(B.input).slice(0,160)}`};case"tool_result":return{color:"green",text:`[${I}] \u2713 result`};case"approval_required":return{color:"magenta",text:`[${I}] \u26A0 approval(${B.approvalType})`};case"turn_completed":return{color:"cyan",text:`[${I}] \u25C0 turn_completed`};case"error":return{color:"red",text:`[${I}] \u2717 ${B.message}`};case"session_closed":return{dim:!0,text:`[${I}] \u23F9 closed`};default:return{text:JSON.stringify(B)}}}function KZ({sid:B,onBack:I}){let C=UE()==="zh",[g,F]=sQ.useState(null),[N,H]=sQ.useState([]),[J,M]=sQ.useState(""),[R,X]=sQ.useState("idle"),[O,Z]=sQ.useState(null),[k,v]=sQ.useState([]),S=sQ.useRef(0),V=sQ.useCallback(async()=>{let FA=await P2(B,uZ);if(!FA)return;F(FA.meta),H(FA.log);try{let wA=await(await import("fs/promises")).stat(iQ(B));S.current=wA.size}catch{S.current=0}},[B]);sQ.useEffect(()=>{V()},[V]),sQ.useEffect(()=>{let FA=!1,JA=null,wA=async()=>{if(FA)return;try{let ZA=await import("fs/promises"),GA=await ZA.stat(iQ(B));if(GA.size>S.current){let s=await ZA.open(iQ(B),"r"),XA=Buffer.alloc(GA.size-S.current);await s.read(XA,0,XA.length,S.current),await s.close(),S.current=GA.size;let qA=[];for(let UA of XA.toString("utf-8").split(`
|
|
772
772
|
`)){if(!UA.trim())continue;try{qA.push(JSON.parse(UA))}catch{}}if(qA.length)H((UA)=>[...UA,...qA].slice(-uZ))}if(Math.random()<0.1){let s=await P2(B,0);if(s)F(s.meta)}v(await _1(B))}catch{}JA=setTimeout(wA,RZ)};return JA=setTimeout(wA,RZ),()=>{if(FA=!0,JA)clearTimeout(JA)}},[B]);let d=sQ.useCallback(async()=>{if(R!=="idle"||!J.trim())return;let FA=J;M(""),Z(null),X("sending");try{await b1(B,FA)}catch(JA){Z(JA instanceof Error?JA.message:String(JA))}finally{X("idle");let JA=await P2(B,0);if(JA)F(JA.meta)}},[B,J,R]),c=sQ.useCallback(async()=>{if(R!=="sending")return I();X("cancelling"),await f1(B).catch(()=>{})},[R,B,I]),r=sQ.useCallback(async(FA)=>{let JA=k[0];if(!JA)return;await I4(B,JA.approvalId,{decision:FA?"allow":"deny",by:"tui",decidedAt:Date.now()}),v((wA)=>wA.filter((ZA)=>ZA.approvalId!==JA.approvalId))},[k,B]);if(BQ((FA,JA)=>{if(JA.ctrl&&FA==="y"){r(!0);return}if(JA.ctrl&&FA==="n"){r(!1);return}if(JA.escape){c();return}if(JA.ctrl&&FA==="c"){c();return}if(JA.ctrl&&FA==="d"){I();return}if(JA.return){d();return}if(JA.backspace||JA.delete){M((wA)=>wA.slice(0,-1));return}if(J.length===0&&FA==="q"){I();return}if(FA&&!JA.ctrl&&FA.length===1)M((wA)=>wA+FA)}),!g)return KB.jsxDEV(h,{paddingX:2,paddingY:1,children:KB.jsxDEV(K,{dimColor:!0,children:C?"\u52A0\u8F7D\u4E2D...":"loading..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return KB.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[KB.jsxDEV(h,{children:[KB.jsxDEV(K,{bold:!0,children:"Session "},void 0,!1,void 0,this),KB.jsxDEV(K,{color:"cyan",children:g.sid.slice(0,8)},void 0,!1,void 0,this),KB.jsxDEV(K,{children:" "},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,children:g.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),KB.jsxDEV(h,{children:KB.jsxDEV(K,{dimColor:!0,children:[g.backend," \xB7 ",g.model??"-"," \xB7 status=",g.status," \xB7 turns=",g.turnCount]},void 0,!0,void 0,this)},void 0,!1,void 0,this),KB.jsxDEV(h,{children:KB.jsxDEV(K,{dimColor:!0,children:[C?"\u5DE5\u4F5C\u76EE\u5F55\uFF1A":"cwd: ",g.workdir]},void 0,!0,void 0,this)},void 0,!1,void 0,this),k.length>0&&KB.jsxDEV(h,{marginTop:1,flexDirection:"column",borderStyle:"round",borderColor:"magenta",paddingX:1,children:[KB.jsxDEV(K,{color:"magenta",bold:!0,children:["\u26A0 ",k.length," ",C?"\u4E2A\u5F85\u5BA1\u6279":"pending"," \u2014 ",KB.jsxDEV(K,{bold:!0,children:"Ctrl-Y"},void 0,!1,void 0,this)," ",C?"\u6279\u51C6":"allow"," / ",KB.jsxDEV(K,{bold:!0,children:"Ctrl-N"},void 0,!1,void 0,this)," ",C?"\u62D2\u7EDD":"deny"]},void 0,!0,void 0,this),k.slice(0,3).map((FA,JA)=>KB.jsxDEV(K,{color:JA===0?"magenta":void 0,dimColor:JA!==0,children:[JA===0?"\u25B6 ":" ","[",FA.approvalType,"] ",FA.approvalId.slice(0,12)]},FA.approvalId,!0,void 0,this))]},void 0,!0,void 0,this),KB.jsxDEV(h,{marginTop:1,flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:N.length===0?KB.jsxDEV(K,{dimColor:!0,children:C?"\uFF08\u6682\u65E0\u65E5\u5FD7\uFF09":"(no log yet)"},void 0,!1,void 0,this):N.slice(-30).map((FA,JA)=>{let wA=OV(FA);return KB.jsxDEV(K,{color:wA.color,dimColor:wA.dim,children:wA.text||" "},JA,!1,void 0,this)})},void 0,!1,void 0,this),O&&KB.jsxDEV(h,{marginTop:1,children:KB.jsxDEV(K,{color:"red",children:["\u2717 ",O]},void 0,!0,void 0,this)},void 0,!1,void 0,this),KB.jsxDEV(h,{marginTop:1,children:[KB.jsxDEV(K,{color:"cyan",bold:!0,children:R==="sending"?"\u23F3 ":R==="cancelling"?"\u270B ":"\u25B6 "},void 0,!1,void 0,this),KB.jsxDEV(K,{children:J},void 0,!1,void 0,this),R==="idle"&&KB.jsxDEV(K,{inverse:!0,children:" "},void 0,!1,void 0,this),R==="sending"&&KB.jsxDEV(K,{dimColor:!0,children:[" (",C?"\u6B63\u5728\u53D1\u9001\u2026ESC \u53D6\u6D88":"sending\u2026 ESC cancel",")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),KB.jsxDEV(h,{marginTop:1,gap:2,children:[KB.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,children:C?"\u53D1\u9001":"send"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,bold:!0,children:"^Y/^N"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,children:C?"\u6279/\u62D2":"allow/deny"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,bold:!0,children:"ESC"},void 0,!1,void 0,this),KB.jsxDEV(K,{dimColor:!0,children:C?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var $A=YA(VB(),1);function WZ(B){let I=Math.floor(B/1000);if(I<60)return`${I}s`;if(I<3600)return`${Math.floor(I/60)}m`;if(I<86400)return`${Math.floor(I/3600)}h`;return`${Math.floor(I/86400)}d`}function SV(B){switch(B){case"running":return"yellow";case"idle":return"green";case"closed":return"gray";case"dead":return"red";default:return"white"}}function YZ({onDone:B}){let I=UE()==="zh",[C,g]=hQ.useState(null),[F,N]=hQ.useState({}),[H,J]=hQ.useState(0),[M,R]=hQ.useState(null),[X,O]=hQ.useState(0),[Z,k]=hQ.useState({kind:"list"}),v=hQ.useCallback(async()=>{let[S,V]=await Promise.all([w4(),H4()]);g(S),N(V),J((d)=>Math.max(0,Math.min(d,S.length-1)))},[]);if(hQ.useEffect(()=>{v()},[v,X]),hQ.useEffect(()=>{let S=setInterval(()=>O((V)=>V+1),5000);return()=>clearInterval(S)},[]),BQ((S,V)=>{if(M)return;if(Z.kind!=="list")return;if(V.escape||S==="q"){B();return}if(S==="n"){k({kind:"new",backend:"claude",model:"",name:"",field:"backend"});return}if(!C||C.length===0){if(S==="r")O((c)=>c+1);return}if(V.upArrow||S==="k"){J((c)=>Math.max(0,c-1));return}if(V.downArrow||S==="j"){J((c)=>Math.min(C.length-1,c+1));return}if(S==="r"){O((c)=>c+1);return}if(S==="p"){R(I?"\u6E05\u7406\u4E2D...":"purging..."),N4().then(()=>{R(null),v()});return}let d=C[H];if(!d)return;if(V.return||S==="o"){k({kind:"detail",sid:d.sid});return}if(S==="d"){R(`closing ${d.sid.slice(0,8)}...`),DD(d.sid,!1).then(()=>{R(null),v()});return}if(S==="x"){R(`purging ${d.sid.slice(0,8)}...`),DD(d.sid,!0).then(()=>{R(null),v()});return}}),Z.kind==="detail")return $A.jsxDEV(KZ,{sid:Z.sid,onBack:()=>{k({kind:"list"}),v()}},void 0,!1,void 0,this);if(Z.kind==="new")return $A.jsxDEV(kV,{initial:Z,onCancel:()=>k({kind:"list"}),onCreated:(S)=>{k({kind:"detail",sid:S})}},void 0,!1,void 0,this);if(!C)return $A.jsxDEV(h,{paddingX:2,paddingY:1,children:$A.jsxDEV(K,{dimColor:!0,children:I?"\u52A0\u8F7D\u4E2D...":"loading..."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return $A.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[$A.jsxDEV(K,{bold:!0,children:I?"Agent \u4F1A\u8BDD\u7BA1\u7406":"Agent Sessions"},void 0,!1,void 0,this),$A.jsxDEV(h,{marginTop:1,children:$A.jsxDEV(K,{dimColor:!0,children:[I?"\u9ED8\u8BA4 Provider\uFF1A":"Defaults: ",Object.keys(F).length===0?I?"\uFF08\u672A\u8BBE\u7F6E\uFF09":"(unset)":Object.entries(F).map(([S,V])=>`${S}=${V.slice(0,8)}`).join(" \u2502 ")]},void 0,!0,void 0,this)},void 0,!1,void 0,this),C.length===0?$A.jsxDEV(h,{marginTop:2,flexDirection:"column",children:$A.jsxDEV(K,{dimColor:!0,children:I?"\uFF08\u6682\u65E0 session \u2014 \u6309 n \u65B0\u5EFA\uFF09":"(no sessions \u2014 press n to create)"},void 0,!1,void 0,this)},void 0,!1,void 0,this):$A.jsxDEV(h,{marginTop:1,flexDirection:"column",children:[$A.jsxDEV(h,{children:$A.jsxDEV(K,{bold:!0,children:["sid".padEnd(10),"backend".padEnd(9),"name".padEnd(20),"model".padEnd(22),"status".padEnd(9),"turns".padEnd(7),"age".padEnd(6),"last"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),C.map((S,V)=>{let d=V===H;return $A.jsxDEV(h,{children:[$A.jsxDEV(K,{color:d?"cyan":void 0,inverse:d,children:d?"\u25B6 ":" "},void 0,!1,void 0,this),$A.jsxDEV(K,{color:d?"cyan":void 0,children:S.sid.slice(0,8).padEnd(10)},void 0,!1,void 0,this),$A.jsxDEV(K,{children:S.backend.padEnd(9)},void 0,!1,void 0,this),$A.jsxDEV(K,{children:(S.name??"").slice(0,18).padEnd(20)},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:(S.model??"-").slice(0,20).padEnd(22)},void 0,!1,void 0,this),$A.jsxDEV(K,{color:SV(S.status),children:S.status.padEnd(9)},void 0,!1,void 0,this),$A.jsxDEV(K,{children:String(S.turnCount).padEnd(7)},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:WZ(Date.now()-S.createdAt).padEnd(6)},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:WZ(Date.now()-S.lastActiveAt)},void 0,!1,void 0,this)]},S.sid,!0,void 0,this)})]},void 0,!0,void 0,this),M&&$A.jsxDEV(h,{marginTop:1,children:$A.jsxDEV(K,{color:"yellow",children:["\u23F3 ",M]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$A.jsxDEV(h,{marginTop:2,gap:2,children:[$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"\u2191\u2193"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u9009\u62E9":"select"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u8FDB\u5165":"open"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"n"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u65B0\u5EFA":"new"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"d"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u5173\u95ED":"close"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"x"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u5220\u9664":"purge"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"r"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u5237\u65B0":"refresh"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"q"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:I?"\u8FD4\u56DE":"back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function kV({initial:B,onCancel:I,onCreated:C}){let g=UE()==="zh",[F,N]=hQ.useState(B.backend),[H,J]=hQ.useState(B.model),[M,R]=hQ.useState(B.name),[X,O]=hQ.useState(B.field),[Z,k]=hQ.useState(!1),[v,S]=hQ.useState(null),V=hQ.useCallback(async()=>{if(Z)return;k(!0),S(null);try{let d=await h1({backend:F,model:H.trim()||void 0,name:M.trim()||void 0});C(d.sid)}catch(d){S(d instanceof Error?d.message:String(d)),k(!1)}},[F,H,M,Z,C]);return BQ((d,c)=>{if(Z)return;if(c.escape){I();return}if(c.tab||c.downArrow){O((r)=>r==="backend"?"model":r==="model"?"name":"backend");return}if(c.upArrow){O((r)=>r==="backend"?"name":r==="model"?"backend":"model");return}if(X==="backend"){if(c.leftArrow||c.rightArrow||d===" "){N((r)=>r==="claude"?"codex":"claude");return}if(c.return){V();return}return}if(X==="model"){if(c.return){O("name");return}if(c.backspace||c.delete){J((r)=>r.slice(0,-1));return}if(d&&!c.ctrl&&d.length===1)J((r)=>r+d);return}if(X==="name"){if(c.return){V();return}if(c.backspace||c.delete){R((r)=>r.slice(0,-1));return}if(d&&!c.ctrl&&d.length===1)R((r)=>r+d)}}),$A.jsxDEV(h,{flexDirection:"column",paddingX:2,paddingY:1,children:[$A.jsxDEV(K,{bold:!0,children:g?"\u65B0\u5EFA Agent Session":"New agent session"},void 0,!1,void 0,this),$A.jsxDEV(h,{marginTop:1,children:$A.jsxDEV(K,{color:X==="backend"?"cyan":void 0,bold:X==="backend",children:[X==="backend"?"\u25B6 ":" ",g?"\u540E\u7AEF":"backend",": ",F==="claude"?"\u25CF claude \u25CB codex":"\u25CB claude \u25CF codex"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$A.jsxDEV(h,{children:$A.jsxDEV(K,{color:X==="model"?"cyan":void 0,bold:X==="model",children:[X==="model"?"\u25B6 ":" ",g?"\u6A21\u578B":"model",": ",H||(g?"\uFF08\u7559\u7A7A\u8D70\u9ED8\u8BA4\uFF09":"(default)"),X==="model"&&$A.jsxDEV(K,{inverse:!0,children:" "},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$A.jsxDEV(h,{children:$A.jsxDEV(K,{color:X==="name"?"cyan":void 0,bold:X==="name",children:[X==="name"?"\u25B6 ":" ",g?"\u540D\u5B57":"name",": ",M||(g?"\uFF08\u7559\u7A7A\u81EA\u52A8\uFF09":"(auto)"),X==="name"&&$A.jsxDEV(K,{inverse:!0,children:" "},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),v&&$A.jsxDEV(h,{marginTop:1,children:$A.jsxDEV(K,{color:"red",children:["\u2717 ",v]},void 0,!0,void 0,this)},void 0,!1,void 0,this),Z&&$A.jsxDEV(h,{marginTop:1,children:$A.jsxDEV(K,{color:"yellow",children:["\u23F3 ",g?"\u521B\u5EFA\u4E2D...":"creating..."]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$A.jsxDEV(h,{marginTop:1,gap:2,children:[$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"Tab/\u2191\u2193"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:g?"\u5207\u5B57\u6BB5":"switch"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"Enter"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:g?"\u521B\u5EFA":"create"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:"\u2502"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,bold:!0,children:"ESC"},void 0,!1,void 0,this),$A.jsxDEV(K,{dimColor:!0,children:g?"\u53D6\u6D88":"cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}t0();var rI=YA(VB(),1);function zV({onLaunch:B,onExit:I,initialView:C="launcher"}){let[g,F]=LE.useState(C),[N,H]=LE.useState([]),J=LE.useRef(null),M=LE.useRef(!1);LE.useEffect(()=>{if(M.current||C!=="launcher")return;M.current=!0,dY().then((v)=>{if(v)F("key-guide")})},[C]);let R=LE.useCallback((v)=>{if(H((S)=>[...S.slice(-4),v]),J.current)clearTimeout(J.current);J.current=setTimeout(()=>H([]),5000)},[]);LE.useEffect(()=>{let v=0;return X6({info:(S)=>R({text:S,type:"info"}),warn:(S)=>R({text:S,type:"warn"}),error:(S)=>R({text:S,type:"error"}),success:(S)=>R({text:S,type:"success"}),spin:(S)=>{let V=++v;return R({id:V,text:S,type:"spin"}),{stop:(d)=>{if(H((c)=>{let r=c.filter((FA)=>FA.id!==V);if(d)r.push({text:d,type:"success"});return r.slice(-5)}),J.current)clearTimeout(J.current);J.current=setTimeout(()=>H([]),5000)},update:(d)=>{if(H((c)=>c.map((r)=>r.id===V?{...r,text:d}:r)),J.current)clearTimeout(J.current);J.current=setTimeout(()=>H([]),5000)}}}}),()=>iF()},[R]);let X=LE.useCallback(()=>F("launcher"),[]),O={info:"cyan",warn:"yellow",error:"red",success:"green",spin:"yellow"},Z={info:"\u2139",warn:"\u26A0",error:"\u2717",success:"\u2713",spin:"\u23F3"},k=(()=>{switch(g){case"launcher":return rI.jsxDEV(yY,{onResult:(v)=>{switch(v.type){case"launch":B(v);break;case"agent":F("agents");break;case"providers":F("providers");break;case"stats":F("stats");break;case"config":F("config");break;case"language":F("language");break;case"exit":I();break}}},void 0,!1,void 0,this);case"providers":return rI.jsxDEV(PY,{onDone:(v)=>{if(v==="client-versions")F("client-versions");else X()}},void 0,!1,void 0,this);case"agents":return rI.jsxDEV(YZ,{onDone:X},void 0,!1,void 0,this);case"client-versions":return rI.jsxDEV(oY,{onDone:()=>F("providers")},void 0,!1,void 0,this);case"stats":return rI.jsxDEV(hY,{onExit:X},void 0,!1,void 0,this);case"config":return rI.jsxDEV(fY,{isReconfigure:!0,onDone:X},void 0,!1,void 0,this);case"language":return rI.jsxDEV(xY,{onDone:X},void 0,!1,void 0,this);case"key-guide":return rI.jsxDEV(lY,{onDone:(v)=>{if(v==="configure")F("config");else cY(v).then(()=>F("launcher"))}},void 0,!1,void 0,this)}})();return rI.jsxDEV(h,{flexDirection:"column",children:[N.length>0&&rI.jsxDEV(h,{flexDirection:"column",paddingX:2,children:N.map((v,S)=>rI.jsxDEV(K,{color:O[v.type],dimColor:v.type==="info",children:[Z[v.type]," ",v.text]},S,!0,void 0,this))},void 0,!1,void 0,this),k]},void 0,!0,void 0,this)}function t5(){return new Promise((B)=>{let I=null;function C(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause(),process.stdin.unref()}catch{}}function g(N){I?.clear(),I?.unmount(),I=null,C(),iF(),B(N)}function F(){I?.clear(),I?.unmount(),I=null,C(),iF(),B(null)}I=BD(rI.jsxDEV(zV,{onLaunch:g,onExit:F},void 0,!1,void 0,this))})}MQ();mE();await KI();var DC=YA(VB(),1),$V={info:"cyan",success:"green",warning:"yellow",danger:"red"};function yV(B){return $V[B??"info"]??"cyan"}function TV({ann:B,onClose:I}){BQ((F,N)=>{if(N.return||N.escape||F==="q")I()});let C=yV(B.type),g=B.content.split(/\r?\n/);return DC.jsxDEV(h,{flexDirection:"column",borderStyle:"round",borderColor:C,paddingX:2,paddingY:1,children:[DC.jsxDEV(h,{children:DC.jsxDEV(K,{color:C,bold:!0,children:["\uD83D\uDCE3 ",B.title]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DC.jsxDEV(h,{marginTop:1,flexDirection:"column",children:g.map((F,N)=>DC.jsxDEV(K,{children:F||" "},N,!1,void 0,this))},void 0,!1,void 0,this),DC.jsxDEV(h,{marginTop:1,children:DC.jsxDEV(K,{dimColor:!0,children:B.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 ZZ(B){return new Promise((I)=>{let C=null;C=BD(DC.jsxDEV(TV,{ann:B,onClose:()=>{C?.clear(),C?.unmount(),C=null,I()}},void 0,!1,void 0,this))})}var vV=2000,XZ=100;function K0(B){if(hF||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${B}
|
|
773
|
-
`)}function qZ(B){if(!B)return null;if(B.type!=="tako"&&B.type!=="custom")return null;if(!B.baseUrl||!B.apiKey)return null;return{baseUrl:B.baseUrl.replace(/\/+$/,""),apiKey:B.apiKey}}async function VV(B,I){let C=`${B}/v1/announcements/popup`;try{let g=await fetch(C,{headers:{Authorization:`Bearer ${I}`},signal:AbortSignal.timeout(vV)});if(!g.ok)return K0(`HTTP ${g.status} from ${C}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let N=(await g.json())?.announcement;if(!N)return K0("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof N.id!=="string"||typeof N.title!=="string")return K0(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(N)}`),null;return K0(`\u62C9\u5230\u516C\u544A id=${N.id} title=${N.title} popup_once=${!!N.popup_once}`),{id:N.id,title:N.title,content:N.content??"",type:N.type,popup_once:!!N.popup_once}}catch(g){return K0(`fetch \u5931\u8D25\uFF1A${g instanceof Error?g.message:String(g)}`),null}}async function PV(B){return((await EB()).seenAnnouncementIds??[]).includes(B)}async function _V(B){let I=await EB(),C=I.seenAnnouncementIds??[];if(C.includes(B))return;let g=[...C,B];if(g.length>XZ)g.splice(0,g.length-XZ);I.seenAnnouncementIds=g,await uI(I)}async function mV(){let B=qZ(await aI());if(B)return B;for(let I of await kI()){let C=qZ(I);if(C)return C}return null}async function OZ(){let B=await mV();if(!B){K0("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}K0(`\u67E5\u8BE2\u516C\u544A\uFF1A${B.baseUrl}/v1/announcements/popup`);let I=await VV(B.baseUrl,B.apiKey);if(!I)return;if(I.popup_once&&await PV(I.id)){K0(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${I.id}`);return}if(K0(`\u5F39\u7A97\uFF1A${I.id}`),await ZZ(I),I.popup_once)await _V(I.id),K0(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${I.id}`)}async function SZ(){await L5(),await M5(),await NY(),await Promise.race([L6(await kI()),new Promise((B)=>setTimeout(B,3000))]),await OZ();while(!0){let B=await t5();if(!B)break;if(B.type==="agent")continue;let I=iI(B.clientId);if(!I)continue;_Q("menu_action",{action:"launch",client_id:B.clientId});let C=await l3(B.clientId);if(!C){aA.warn(hA("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let g=await c3(I,{projectPath:B.projectPath,args:B.args,envVars:B.envVars,selectedOptionIds:B.selectedOptionIds,providerContext:C});if(!g.success)aA.error(g.error||hA("cli.launchFailed"))}}t0();z2();MQ();OQ();M0();X5();import{join as W0}from"path";var e5="tako-cli",j1="0.3.
|
|
773
|
+
`)}function qZ(B){if(!B)return null;if(B.type!=="tako"&&B.type!=="custom")return null;if(!B.baseUrl||!B.apiKey)return null;return{baseUrl:B.baseUrl.replace(/\/+$/,""),apiKey:B.apiKey}}async function VV(B,I){let C=`${B}/v1/announcements/popup`;try{let g=await fetch(C,{headers:{Authorization:`Bearer ${I}`},signal:AbortSignal.timeout(vV)});if(!g.ok)return K0(`HTTP ${g.status} from ${C}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let N=(await g.json())?.announcement;if(!N)return K0("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof N.id!=="string"||typeof N.title!=="string")return K0(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(N)}`),null;return K0(`\u62C9\u5230\u516C\u544A id=${N.id} title=${N.title} popup_once=${!!N.popup_once}`),{id:N.id,title:N.title,content:N.content??"",type:N.type,popup_once:!!N.popup_once}}catch(g){return K0(`fetch \u5931\u8D25\uFF1A${g instanceof Error?g.message:String(g)}`),null}}async function PV(B){return((await EB()).seenAnnouncementIds??[]).includes(B)}async function _V(B){let I=await EB(),C=I.seenAnnouncementIds??[];if(C.includes(B))return;let g=[...C,B];if(g.length>XZ)g.splice(0,g.length-XZ);I.seenAnnouncementIds=g,await uI(I)}async function mV(){let B=qZ(await aI());if(B)return B;for(let I of await kI()){let C=qZ(I);if(C)return C}return null}async function OZ(){let B=await mV();if(!B){K0("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}K0(`\u67E5\u8BE2\u516C\u544A\uFF1A${B.baseUrl}/v1/announcements/popup`);let I=await VV(B.baseUrl,B.apiKey);if(!I)return;if(I.popup_once&&await PV(I.id)){K0(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${I.id}`);return}if(K0(`\u5F39\u7A97\uFF1A${I.id}`),await ZZ(I),I.popup_once)await _V(I.id),K0(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${I.id}`)}async function SZ(){await L5(),await M5(),await NY(),await Promise.race([L6(await kI()),new Promise((B)=>setTimeout(B,3000))]),await OZ();while(!0){let B=await t5();if(!B)break;if(B.type==="agent")continue;let I=iI(B.clientId);if(!I)continue;_Q("menu_action",{action:"launch",client_id:B.clientId});let C=await l3(B.clientId);if(!C){aA.warn(hA("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546");continue}let g=await c3(I,{projectPath:B.projectPath,args:B.args,envVars:B.envVars,selectedOptionIds:B.selectedOptionIds,providerContext:C});if(!g.success)aA.error(g.error||hA("cli.launchFailed"))}}t0();z2();MQ();OQ();M0();X5();import{join as W0}from"path";var e5="tako-cli",j1="0.3.4";function hV(B,I){let C=B.split(".").map(Number),g=I.split(".").map(Number);for(let F=0;F<3;F++){let N=C[F]||0,H=g[F]||0;if(N>H)return 1;if(N<H)return-1}return 0}async function bV(){try{let B=await oI(),I=await fetch(`${B}/${e5}/latest`,{signal:AbortSignal.timeout(5000)});if(!I.ok)return null;return(await I.json()).version||null}catch{return null}}async function fV(){let B=await bV();if(!B)return{hasUpdate:!1,currentVersion:j1};return{hasUpdate:hV(B,j1)>0,latestVersion:B,currentVersion:j1}}async function kZ(){let B=await import("fs/promises"),I=W0(VQ,"bin"),C=W0(I,"tako"),g=W0(vE,"node_modules/tako-cli/dist/index.js");if(await B.mkdir(I,{recursive:!0}),process.platform==="win32"){let N=`@echo off\r
|
|
774
774
|
"${nQ}" "${g}" %*\r
|
|
775
775
|
`;await B.writeFile(W0(I,"tako.cmd"),N)}else{let N=`#!/bin/bash
|
|
776
776
|
exec "${nQ}" "${g}" "$@"
|
|
777
777
|
`;await B.writeFile(C,N,{mode:493})}}async function jV(B){let I=xg(),C=`\u6B63\u5728\u66F4\u65B0\u5230 v${B}`;I.start(C);try{let g=await oI(),F=await import("fs/promises");await F.mkdir(vE,{recursive:!0});let N=W0(vE,"package.json");try{await F.access(N)}catch{await F.writeFile(N,JSON.stringify({name:"tako-local",private:!0},null,2))}let H=Bun.spawn([nQ,"update",e5,"--latest"],{cwd:vE,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:g}}),J=await d3(H,C,(M)=>I.update(M));if(await H.exited,H.exitCode===0)return await kZ(),_Q("cli_updated",{from_version:j1,to_version:B}),I.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${B}`),!0;else return I.stop(`\u66F4\u65B0\u5931\u8D25: ${J||"\u672A\u77E5\u9519\u8BEF"}`),!1}catch(g){return I.stop(`\u66F4\u65B0\u5931\u8D25: ${g instanceof Error?g.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function xV(){let B=await import("fs/promises"),I=W0(vE,"bun.lock");try{await B.unlink(I)}catch{}}async function pV(){let B=await import("fs/promises");try{let I=await oI();await B.mkdir(vE,{recursive:!0});let C=W0(vE,"package.json");try{await B.access(C)}catch{await B.writeFile(C,JSON.stringify({name:"tako-local",private:!0},null,2))}await xV();let g=Bun.spawn([nQ,"add",`${e5}@latest`],{cwd:vE,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:I}});return await g.exited,g.exitCode===0}catch{return!1}}async function iV(){let B=await import("fs/promises"),I=W0(VQ,"bin"),C=W0(I,"tako"),g=W0(vE,"node_modules/tako-cli/dist/index.js");try{let F=await B.readFile(C,"utf-8");if(F.includes("bun run tako-cli")||F.includes("run tako-cli")){aA.info(hA("updater.migrating"));let N=!1;try{await B.access(g),N=!0}catch{N=!1}if(!N){let H=xg();if(H.start(hA("updater.installingLocally")),!await pV())return H.stop(hA("updater.migrationFailed")),!1;H.stop(hA("updater.installComplete"))}return await kZ(),!0}}catch{}return!1}async function x1(){try{if(await iV())aA.info(hA("updater.migrationComplete")),process.exit(0);let I=await fV();if(I.hasUpdate&&I.latestVersion){if(aA.warn(hA("updater.newVersionAvailable",{version:I.latestVersion,current:j1})),await jV(I.latestVersion))aA.info(hA("updater.pleaseRestart")),process.exit(0)}}catch{}}OI();OQ();M0();import{homedir as cV}from"os";var SB={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 aB={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var UQ={directory:{icon:SB.brightYellow,text:SB.brightGreen},git:{icon:SB.brightBlue,text:SB.brightBlue,clean:SB.brightGreen,dirty:SB.brightYellow,conflict:SB.brightRed},model:{icon:SB.brightCyan,text:SB.brightCyan},version:{icon:SB.brightWhite,text:SB.brightBlack},outputStyle:{icon:SB.brightMagenta,text:SB.brightMagenta},context:{icon:SB.brightMagenta,low:SB.brightGreen,medium:SB.brightYellow,high:SB.brightRed},todayUsage:{icon:SB.brightGreen,text:SB.brightGreen},separator:SB.brightBlack},FC={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 dV(){return!1}function Y0(B){let I=FC[B];if(typeof I==="string")return I;return dV()?I.nerd:I.plain}class J4{id="directory";render(B){let I=this.formatPath(B.workspace.current_dir),C=Y0("directory");return`${UQ.directory.icon}${C}${aB.reset} ${UQ.directory.text}${I}${aB.reset}`}formatPath(B){let I=cV();if(B===I)return"~";if(B.startsWith(I+"/"))return"~"+B.slice(I.length);return B}}class L4{id="git";async render(B){let I=B.workspace.current_dir;if(!await this.isGitRepository(I))return null;let g=await this.getBranch(I);if(!g)return null;let{status:F,statusColor:N}=await this.getStatus(I),{ahead:H,behind:J}=await this.getAheadBehind(I),M=Y0("git"),R=`${UQ.git.icon}${M}${aB.reset} ${UQ.git.text}${g}${aB.reset}`;if(R+=` ${N}${F}${aB.reset}`,H>0)R+=` ${UQ.git.clean}${FC.gitAhead}${H}${aB.reset}`;if(J>0)R+=` ${UQ.git.dirty}${FC.gitBehind}${J}${aB.reset}`;return R}async isGitRepository(B){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:B,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(B){try{let I=Bun.spawn(["git","branch","--show-current"],{cwd:B,stdout:"pipe",stderr:"pipe"}),C=await new Response(I.stdout).text();if(await I.exited===0&&C.trim())return C.trim();let F=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:B,stdout:"pipe",stderr:"pipe"}),N=await new Response(F.stdout).text();if(await F.exited===0&&N.trim())return`detached:${N.trim()}`;return null}catch{return null}}async getStatus(B){try{let I=Bun.spawn(["git","status","--porcelain"],{cwd:B,stdout:"pipe",stderr:"pipe"}),C=await new Response(I.stdout).text();if(await I.exited!==0)return{status:FC.gitClean,statusColor:UQ.git.clean};let F=C.trim();if(!F)return{status:FC.gitClean,statusColor:UQ.git.clean};if(F.includes("UU")||F.includes("AA")||F.includes("DD"))return{status:FC.gitConflict,statusColor:UQ.git.conflict};return{status:FC.gitDirty,statusColor:UQ.git.dirty}}catch{return{status:FC.gitClean,statusColor:UQ.git.clean}}}async getAheadBehind(B){try{let I=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:B,stdout:"pipe",stderr:"pipe"}),C=await new Response(I.stdout).text(),F=await I.exited===0?parseInt(C.trim(),10)||0:0,N=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:B,stdout:"pipe",stderr:"pipe"}),H=await new Response(N.stdout).text(),M=await N.exited===0?parseInt(H.trim(),10)||0:0;return{ahead:F,behind:M}}catch{return{ahead:0,behind:0}}}}var lV={"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 M4{id="model";render(B){let I=B.model.id,C=lV[I]||this.simplifyModelName(B.model.display_name),g=Y0("model");return`${UQ.model.icon}${g}${aB.reset} ${UQ.model.text}${C}${aB.reset}`}simplifyModelName(B){let I=B.replace(/^Claude\s+/i,"");return I=I.replace(/-\d{8}$/,""),I}}var aV=200000;class Z0{id="context";static cache=null;static CACHE_TTL=5000;async render(B){let I=await this.getTokensWithCache(B.transcript_path),g=N6(B.model.id)?.contextWindow??aV,F=Math.round((I??0)/g*100),N=Math.max(0,100-F),H=Y0("context"),J=N<=20?SB.brightRed:N<=50?SB.brightYellow:SB.brightGreen;return`${UQ.context.icon}${H}${aB.reset} ${J}${N}%${aB.reset}`}async getTokensWithCache(B){let I=Date.now();if(Z0.cache&&Z0.cache.path===B&&I-Z0.cache.timestamp<Z0.CACHE_TTL)return Z0.cache.tokens;let C=await this.parseTranscriptTokens(B);return Z0.cache={path:B,tokens:C,timestamp:I},C}async parseTranscriptTokens(B){try{let I=Bun.file(B);if(!await I.exists())return null;let C=await I.text();if(!C.trim())return null;let g=C.split(`
|
|
778
|
-
`).filter((F)=>F.trim());for(let F=g.length-1;F>=0;F--)try{let N=JSON.parse(g[F]);if(N.type==="assistant"&&N.message?.usage){let H=N.message.usage;return(H.input_tokens||0)+(H.output_tokens||0)+(H.cache_creation_input_tokens||0)+(H.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}a3();MQ();mE();class R4{id="quota";async render(B){let I=await this.tryRenderOfficial();if(I)return I;return this.renderSessionCost(B)}async tryRenderOfficial(){try{let B=await QC("claude-code")??await aI();if(!B){let C=await fg().catch(()=>"");if(!C)return null;let g=await z1(C);return this.renderTako(g)}let I=await $1(B);if(I.status!=="ok")return null;switch(I.provider){case"tako":return this.renderTako(I);case"claude-subscription":return this.renderClaudeSub(I);case"codex-subscription":return this.renderCodexSub(I);default:return null}}catch{return null}}renderTako(B){if(B.status!=="ok")return null;if(!!(B.primary?.costLimit||B.secondary?.costLimit||B.daily?.costLimit))return this.renderSub(B);let C=B.daily??B.primary??B.secondary;if(!C)return null;let g=C.costUsed??0;return`${this.icon()} ${SB.brightGreen}Day:${this.fmtCost(g)}${aB.reset}`}renderSub(B){let I=(g,F,N)=>{if(g&&g>=1440)return`${Math.round(g/1440)}d`;if(g)return`${Math.round(g/60)}h`;return N?`${N}d`:`${F}h`},C=[];if(B.primary)C.push(this.remainChunk(I(B.primary.windowMinutes,5),B.primary.usedPct));if(B.secondary)C.push(this.remainChunk(I(B.secondary.windowMinutes,24,7),B.secondary.usedPct));if(B.modelLimits?.opus)C.push(this.remainChunk("opus",B.modelLimits.opus.usedPct));if(!C.length)return null;return`${this.icon()} ${C.join(`${aB.dim} \xB7 ${aB.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(B,I){let C=I>=90?SB.brightRed:I>=70?SB.brightYellow:SB.brightGreen;return`${B}:${C}${I}%${aB.reset}`}remainChunk(B,I){let C=Math.max(0,Math.min(100,100-Math.round(I))),g=C<=10?SB.brightRed:C<=30?SB.brightYellow:SB.brightGreen;return`${B} \u5269 ${g}${C}%${aB.reset}`}renderSessionCost(B){let I=B.cost?.total_cost_usd;if(I==null||I<=0)return null;return`${this.icon()} ${SB.brightGreen}Session:${this.fmtCost(I)}${aB.reset}`}icon(){return`${UQ.todayUsage.icon}${Y0("todayUsage")}${aB.reset}`}fmtCost(B){if(B>=100)return`$${Math.round(B)}`;if(B>=10)return`$${B.toFixed(1)}`;return`$${B.toFixed(2)}`}}class A9{separator=`${UQ.separator} \u2502 ${aB.reset}`;render(B){let I=["directory","git","model","context","quota"],C=[];for(let g of I){let F=B.get(g);if(F)C.push(F)}return C.join(this.separator)}}import{join as FD,dirname as oV}from"path";import{homedir as B9}from"os";import{mkdir as nV}from"fs/promises";var zZ=FD(B9(),".tako"),rV=FD(zZ,"cli"),sV=FD(zZ,"bin",process.platform==="win32"?"tako.cmd":"tako");function tV(){if(process.platform==="win32")return FD(process.env.APPDATA||FD(B9(),"AppData","Roaming"),"claude","settings.json");return FD(B9(),".claude","settings.json")}var eV=process.platform==="win32",AP="0.1.48";function BP(B,I){let C=B.split(".").map(Number),g=I.split(".").map(Number),F=Math.max(C.length,g.length);for(let N=0;N<F;N++){let H=C[N]||0,J=g[N]||0;if(H!==J)return H-J}return 0}async function QP(){let B=FD(rV,"node_modules","tako-cli","package.json");try{let I=Bun.file(B);if(!await I.exists())return null;return(await I.json()).version||null}catch{return null}}async function IP(){let B=await QP();if(!B)return!1;return BP(B,AP)>=0}function EP(){return sV}function CP(){return`"${gP(EP())}" statusline`}function gP(B){if(eV)return B.replace(/\\/g,"/");return B}async function Q9(){if(!await IP())return;let I=tV(),C={};try{let N=Bun.file(I);if(await N.exists())C=await N.json()}catch{}let g={type:"command",command:CP(),padding:0},F=typeof C.statusLine==="object"&&C.statusLine!==null?C.statusLine.command:null;if(typeof F==="string"&&F.includes("tako statusline"))return;C.statusLine=g,await nV(oV(I),{recursive:!0}),await Bun.write(I,JSON.stringify(C,null,2))}var DP=[new J4,new L4,new M4,new Z0,new R4];async function FP(B){let I=await Promise.all(DP.map(async(F)=>{try{let N=await F.render(B);return{id:F.id,content:N}}catch{return{id:F.id,content:null}}})),C=new Map;for(let{id:F,content:N}of I)C.set(F,N);return new A9().render(C)}async function $Z(){try{let B=await Bun.stdin.json(),I=await FP(B);console.log(I)}catch{process.exit(0)}}MQ();var H9="0.3.
|
|
778
|
+
`).filter((F)=>F.trim());for(let F=g.length-1;F>=0;F--)try{let N=JSON.parse(g[F]);if(N.type==="assistant"&&N.message?.usage){let H=N.message.usage;return(H.input_tokens||0)+(H.output_tokens||0)+(H.cache_creation_input_tokens||0)+(H.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}a3();MQ();mE();class R4{id="quota";async render(B){let I=await this.tryRenderOfficial();if(I)return I;return this.renderSessionCost(B)}async tryRenderOfficial(){try{let B=await QC("claude-code")??await aI();if(!B){let C=await fg().catch(()=>"");if(!C)return null;let g=await z1(C);return this.renderTako(g)}let I=await $1(B);if(I.status!=="ok")return null;switch(I.provider){case"tako":return this.renderTako(I);case"claude-subscription":return this.renderClaudeSub(I);case"codex-subscription":return this.renderCodexSub(I);default:return null}}catch{return null}}renderTako(B){if(B.status!=="ok")return null;if(!!(B.primary?.costLimit||B.secondary?.costLimit||B.daily?.costLimit))return this.renderSub(B);let C=B.daily??B.primary??B.secondary;if(!C)return null;let g=C.costUsed??0;return`${this.icon()} ${SB.brightGreen}Day:${this.fmtCost(g)}${aB.reset}`}renderSub(B){let I=(g,F,N)=>{if(g&&g>=1440)return`${Math.round(g/1440)}d`;if(g)return`${Math.round(g/60)}h`;return N?`${N}d`:`${F}h`},C=[];if(B.primary)C.push(this.remainChunk(I(B.primary.windowMinutes,5),B.primary.usedPct));if(B.secondary)C.push(this.remainChunk(I(B.secondary.windowMinutes,24,7),B.secondary.usedPct));if(B.modelLimits?.opus)C.push(this.remainChunk("opus",B.modelLimits.opus.usedPct));if(!C.length)return null;return`${this.icon()} ${C.join(`${aB.dim} \xB7 ${aB.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(B,I){let C=I>=90?SB.brightRed:I>=70?SB.brightYellow:SB.brightGreen;return`${B}:${C}${I}%${aB.reset}`}remainChunk(B,I){let C=Math.max(0,Math.min(100,100-Math.round(I))),g=C<=10?SB.brightRed:C<=30?SB.brightYellow:SB.brightGreen;return`${B} \u5269 ${g}${C}%${aB.reset}`}renderSessionCost(B){let I=B.cost?.total_cost_usd;if(I==null||I<=0)return null;return`${this.icon()} ${SB.brightGreen}Session:${this.fmtCost(I)}${aB.reset}`}icon(){return`${UQ.todayUsage.icon}${Y0("todayUsage")}${aB.reset}`}fmtCost(B){if(B>=100)return`$${Math.round(B)}`;if(B>=10)return`$${B.toFixed(1)}`;return`$${B.toFixed(2)}`}}class A9{separator=`${UQ.separator} \u2502 ${aB.reset}`;render(B){let I=["directory","git","model","context","quota"],C=[];for(let g of I){let F=B.get(g);if(F)C.push(F)}return C.join(this.separator)}}import{join as FD,dirname as oV}from"path";import{homedir as B9}from"os";import{mkdir as nV}from"fs/promises";var zZ=FD(B9(),".tako"),rV=FD(zZ,"cli"),sV=FD(zZ,"bin",process.platform==="win32"?"tako.cmd":"tako");function tV(){if(process.platform==="win32")return FD(process.env.APPDATA||FD(B9(),"AppData","Roaming"),"claude","settings.json");return FD(B9(),".claude","settings.json")}var eV=process.platform==="win32",AP="0.1.48";function BP(B,I){let C=B.split(".").map(Number),g=I.split(".").map(Number),F=Math.max(C.length,g.length);for(let N=0;N<F;N++){let H=C[N]||0,J=g[N]||0;if(H!==J)return H-J}return 0}async function QP(){let B=FD(rV,"node_modules","tako-cli","package.json");try{let I=Bun.file(B);if(!await I.exists())return null;return(await I.json()).version||null}catch{return null}}async function IP(){let B=await QP();if(!B)return!1;return BP(B,AP)>=0}function EP(){return sV}function CP(){return`"${gP(EP())}" statusline`}function gP(B){if(eV)return B.replace(/\\/g,"/");return B}async function Q9(){if(!await IP())return;let I=tV(),C={};try{let N=Bun.file(I);if(await N.exists())C=await N.json()}catch{}let g={type:"command",command:CP(),padding:0},F=typeof C.statusLine==="object"&&C.statusLine!==null?C.statusLine.command:null;if(typeof F==="string"&&F.includes("tako statusline"))return;C.statusLine=g,await nV(oV(I),{recursive:!0}),await Bun.write(I,JSON.stringify(C,null,2))}var DP=[new J4,new L4,new M4,new Z0,new R4];async function FP(B){let I=await Promise.all(DP.map(async(F)=>{try{let N=await F.render(B);return{id:F.id,content:N}}catch{return{id:F.id,content:null}}})),C=new Map;for(let{id:F,content:N}of I)C.set(F,N);return new A9().render(C)}async function $Z(){try{let B=await Bun.stdin.json(),I=await FP(B);console.log(I)}catch{process.exit(0)}}MQ();var H9="0.3.4";function VP(){console.log(`
|
|
779
779
|
${hA("cli.version",{version:H9})}
|
|
780
780
|
|
|
781
781
|
${hA("cli.usage")}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tako-cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Tako CLI — unified launcher for AI coding tools (Claude Code, Codex, Gemini) with multi-agent session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/tako-dev/cli#readme",
|