@wengine-ai/claude-code-router-next 2.1.6 → 2.1.7
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/README.md +6 -0
- package/dist/cli.js +4 -4
- package/dist/index.html +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -82,6 +82,12 @@ npm install -g @wengine-ai/claude-code-router-next
|
|
|
82
82
|
|
|
83
83
|
> **说明**:卸载旧包**不会影响**您已有的配置文件 `~/.claude-code-router/config.json`,新版本会自动读取原有配置。
|
|
84
84
|
|
|
85
|
+
### 升级
|
|
86
|
+
|
|
87
|
+
```shell
|
|
88
|
+
npm install -g @wengine-ai/claude-code-router-next@latest && ccr restart
|
|
89
|
+
```
|
|
90
|
+
|
|
85
91
|
### 2. 配置
|
|
86
92
|
|
|
87
93
|
创建并配置您的 `~/.claude-code-router/config.json` 文件。有关更多详细信息,您可以参考 `config.example.json`。
|
package/dist/cli.js
CHANGED
|
@@ -581,7 +581,7 @@ ${this.toMarkdown(N,_+1)}`:`${F}- ${N}`).join(`
|
|
|
581
581
|
${this.toMarkdown(q,_+1)}`:`${F}${N}: ${q}`).join(`
|
|
582
582
|
`):`${F}${g}`}async output(g,_={}){try{let F=this.formatData(g,_);switch(this.config.level||"log"){case"info":console.info(F);break;case"warn":console.warn(F);break;case"error":console.error(F);break;case"debug":console.debug(F);break;case"log":default:console.log(F);break}return!0}catch(F){return console.error("[ConsoleOutputHandler] Output failed:",F),!1}}}}),rf,Fa=u(()=>{"use strict";rf=class{type="webhook";config;defaultTimeout=3e4;constructor(g){if(!g.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...g}}buildHeaders(){let g={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(g.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let _=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");g.Authorization=`Basic ${_}`}break;case"custom":this.config.auth.custom&&(g[this.config.auth.custom.header]=this.config.auth.custom.value);break}return g}buildBody(g,_){let{format:F="json",timestamp:N=!0,prefix:q,metadata:P}=_||{},V={data:g};return N&&(V.timestamp=new Date().toISOString()),q&&(V.prefix=q),P&&Object.keys(P).length>0&&(V.metadata=P),V}async sendRequest(g,_,F,N,q){let P=new AbortController,V=setTimeout(()=>P.abort(),q);try{let J=await fetch(g,{method:_,headers:F,body:JSON.stringify(N),signal:P.signal});if(clearTimeout(V),!J.ok)throw new Error(`HTTP ${J.status}: ${J.statusText}`);return J}catch(J){throw clearTimeout(V),J}}delay(g){return new Promise(_=>setTimeout(_,g))}async sendWithRetry(g,_,F,N,q,P){let V=null;for(let J=1;J<=P.maxAttempts;J++)try{return await this.sendRequest(g,_,F,N,q)}catch(oe){if(V=oe,J===P.maxAttempts)break;let Z=P.backoffMs*Math.pow(2,J-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${J}/${P.maxAttempts}), retrying in ${Z}ms...`,oe.message),await this.delay(Z)}throw V}async output(g,_={}){let F=_.timeout||this.defaultTimeout;try{let N=this.buildHeaders(),q=this.buildBody(g,_),P=await this.sendWithRetry(this.config.url,this.config.method,N,q,F,this.config.retry);return!0}catch(N){let q=N instanceof Error?N.message:String(N);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${q}`),!1;throw new Error(`Webhook output failed: ${q}`)}}}}),cl,Vh,hl,nf,sf=u(()=>{"use strict";cl=require("fs"),Vh=require("path"),hl=require("os"),nf=class{type="temp-file";config;baseDir;constructor(g={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...g};let _=(0,hl.tmpdir)();this.baseDir=(0,Vh.join)(_,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,cl.existsSync)(this.baseDir)||(0,cl.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(g){try{let _=g.match(/_session_([a-f0-9-]+)/i);return _?_[1]:null}catch{return null}}getFilePath(g){let _=this.config.prefix||"session",F=this.config.extension?`.${this.config.extension}`:"",N;if(this.config.includeTimestamp){let q=Date.now();N=`${_}-${g}-${q}${F}`}else N=`${_}-${g}${F}`;return(0,Vh.join)(this.baseDir,N)}async output(g,_={}){try{let F=_.metadata?.sessionId;if(!F)return!1;let N={...g,timestamp:Date.now(),sessionId:F},q=this.getFilePath(F);return(0,cl.writeFileSync)(q,JSON.stringify(N,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),of,dl,Qg=u(()=>{"use strict";mc(),Fa(),sf(),of=class{handlers=new Map;defaultOptions={};registerHandler(g,_){this.handlers.set(g,_)}registerHandlers(g){for(let _ of g)if(_.enabled!==!1)try{let F=this.createHandler(_),N=_.type+"_"+Date.now();this.registerHandler(N,F)}catch(F){console.error(`[OutputManager] Failed to register ${_.type} handler:`,F)}}createHandler(g){switch(g.type){case"console":return new _s(g.config);case"webhook":return new rf(g.config);case"temp-file":return new nf(g.config);default:throw new Error(`Unknown output handler type: ${g.type}`)}}unregisterHandler(g){return this.handlers.delete(g)}getHandler(g){return this.handlers.get(g)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(g){this.defaultOptions={...this.defaultOptions,...g}}getDefaultOptions(){return{...this.defaultOptions}}async output(g,_){let F={...this.defaultOptions,..._},N={success:[],failed:[]},q=Array.from(this.handlers.entries()).map(async([P,V])=>{try{await V.output(g,F)?N.success.push(P):N.failed.push(P)}catch(J){console.error(`[OutputManager] Handler ${P} failed:`,J),N.failed.push(P)}});return await Promise.all(q),N}async outputTo(g,_,F){let N={...this.defaultOptions,...F},q={success:[],failed:[]},P=g.map(async V=>{let J=this.handlers.get(V);if(!J){console.warn(`[OutputManager] Handler ${V} not found`),q.failed.push(V);return}try{await J.output(_,N)?q.success.push(V):q.failed.push(V)}catch(oe){console.error(`[OutputManager] Handler ${V} failed:`,oe),q.failed.push(V)}});return await Promise.all(P),q}async outputToType(g,_,F){let N=Array.from(this.handlers.entries()).filter(([q,P])=>P.type===g).map(([q])=>q);return this.outputTo(N,_,F)}},dl=new of}),af={};c(af,{ActiveProbeService:()=>gb,ConfigService:()=>Jh,ProviderHealthStore:()=>k,ProviderService:()=>Cc,SSEParserTransform:()=>Db,SSESerializerTransform:()=>gN,TokenizerService:()=>em,TransformerService:()=>Wg,calculateTokenCount:()=>ub,default:()=>bN,getActiveProbeService:()=>mb,getAllQuotaResults:()=>$Q,getAllRateLimitInfo:()=>Hg,getHealthStore:()=>S,getQuotaAdapter:()=>pb,getQuotaResult:()=>ab,getRateLimitInfo:()=>$g,getRuntimeDebugLog:()=>sa,pluginManager:()=>fN,resetActiveProbeService:()=>dN,rewriteStream:()=>mN,router:()=>im,searchProjectBySession:()=>fb,sessionUsageCache:()=>ib,setRuntimeDebugLog:()=>ia,startActiveProbe:()=>Eb,stopActiveProbe:()=>yb,storeQuotaResult:()=>ob,tokenSpeedPlugin:()=>yN}),t.exports=d(af);var Ng=A(DI(),1),Og=A(CI(),1),Yh=require("fs"),uf=require("path"),Lg=bI(),Pg=A(C(),1),Jh=class{config={};options;constructor(g={jsonPath:"./config.json"}){this.options={envPath:g.envPath||".env",jsonPath:g.jsonPath,useEnvFile:!1,useJsonFile:g.useJsonFile!==!1,useEnvironmentVariables:g.useEnvironmentVariables!==!1,...g},this.loadConfig()}loadConfig(){this.options.useJsonFile&&this.options.jsonPath&&this.loadJsonConfig(),this.options.initialConfig&&(this.config={...this.config,...this.options.initialConfig}),this.options.useEnvFile&&this.loadEnvConfig(),this.config.LOG_FILE&&(process.env.LOG_FILE=this.config.LOG_FILE),this.config.LOG&&(process.env.LOG=this.config.LOG)}loadJsonConfig(){if(!this.options.jsonPath)return;let g=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,uf.join)(process.cwd(),this.options.jsonPath);if((0,Yh.existsSync)(g))try{let _=(0,Yh.readFileSync)(g,"utf-8"),F=Pg.default.parse(_);this.config={...this.config,...F},console.log(`Loaded JSON config from: ${g}`)}catch(_){console.warn(`Failed to load JSON config from ${g}:`,_)}else console.warn(`JSON config file not found: ${g}`)}loadEnvConfig(){let g=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,uf.join)(process.cwd(),this.options.envPath);if((0,Yh.existsSync)(g))try{let _=(0,Lg.config)({path:g});_.parsed&&(this.config={...this.config,...this.parseEnvConfig(_.parsed)})}catch(_){console.warn(`Failed to load .env config from ${g}:`,_)}}loadEnvironmentVariables(){let g=this.parseEnvConfig(process.env);this.config={...this.config,...g}}parseEnvConfig(g){let _={};return Object.assign(_,g),_}isAbsolutePath(g){return g.startsWith("/")||g.includes(":")}get(g,_){let F=this.config[g];return F!==void 0?F:_}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(g){return this.config[g]!==void 0}set(g,_){this.config[g]=_}reload(){this.config={},this.loadConfig()}getConfigSummary(){let g=[];return this.options.initialConfig&&g.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&g.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&g.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&g.push("Environment Variables"),`Config sources: ${g.join(", ")}`}};function ds(g,_=500,F="internal_error",N="api_error"){let q=new Error(g);return q.statusCode=_,q.code=F,q.type=N,q}async function Mg(g,_,F){_.log.error(g);let N=g.statusCode||500;if(g.rawBody)try{let P=JSON.parse(g.rawBody);return F.code(N).send(P)}catch{return F.code(N).send(g.rawBody)}let q={error:{message:g.message+(g.stack||"Internal Server Error"),type:g.type||"api_error",code:g.code||"internal_error"}};return F.code(N).send(q)}var Ug=Rs();function Ni(g,_,F,N,q){let P=new Headers({"Content-Type":"application/json"});F.headers&&Object.entries(F.headers).forEach(([Z,ae])=>{ae&&P.set(Z,ae)});let V,J=AbortSignal.timeout(F.TIMEOUT??60*1e3*60);if(F.signal){let Z=new AbortController,ae=()=>Z.abort();F.signal.addEventListener("abort",ae),J.addEventListener("abort",ae),V=Z.signal}else V=J;let oe={method:"POST",headers:P,body:JSON.stringify(_),signal:V};return F.httpsProxy&&(oe.dispatcher=new Ug.ProxyAgent(new URL(F.httpsProxy).toString())),q?.debug({reqId:N.req.id,request:oe,headers:Object.fromEntries(P.entries()),requestUrl:typeof g=="string"?g:g.toString(),useProxy:F.httpsProxy},"final request"),fetch(typeof g=="string"?g:g.toString(),oe)}var Al=new Set(["authorization","x-api-key","cookie","set-cookie"]),ka={maxBodyLength:4096,maxStreamChunks:100},fl=!1;function ia(g){fl=g}function sa(){return fl}function As(g){return fl||g.get("DEBUG_LOG")===!0}function pl(g){let _=g.get("DEBUG_LOG_OPTIONS");return!_||typeof _!="object"?ka:{maxBodyLength:_.maxBodyLength??ka.maxBodyLength,maxStreamChunks:_.maxStreamChunks??ka.maxStreamChunks}}function zh(g){let _={};for(let[F,N]of Object.entries(g))Al.has(F.toLowerCase())?_[F]="***MASKED***":_[F]=N;return _}function xo(g,_){return g.length<=_?g:g.slice(0,_)+`...[truncated, total ${g.length} bytes]`}function lf(g,_,F){let N=typeof F.body=="string"?F.body:JSON.stringify(F.body);g.info({debug_log:!0,reqId:_,phase:"provider_request",url:F.url,headers:zh(F.headers),body:xo(N,ka.maxBodyLength)})}function cf(g,_,F){g.info({debug_log:!0,reqId:_,phase:"provider_response",status:F.status,headers:zh(F.headers),...F.body!==void 0?{body:xo(F.body,ka.maxBodyLength)}:{}})}function gl(g,_,F,N){g.info({debug_log:!0,reqId:_,phase:"provider_stream_chunk",chunkIndex:F,data:xo(N,ka.maxBodyLength)})}function Wh(g,_,F){g.info({debug_log:!0,reqId:_,phase:"provider_stream_end",totalChunks:F})}function hf(g,_,F,N){(async()=>{let q=g.pipeThrough(new TextDecoderStream).getReader(),P=0;try{let V="";for(;;){let{done:J,value:oe}=await q.read();if(J)break;V+=oe;let Z=V.split(`
|
|
583
583
|
|
|
584
|
-
`);V=Z.pop()||"";for(let ae of Z)ae.trim()&&(P<N.maxStreamChunks?gl(_,F,P,ae):P===N.maxStreamChunks&&_.info({debug_log:!0,reqId:F,phase:"provider_stream_chunk_omitted",message:`[chunks after #${P} omitted, maxStreamChunks=${N.maxStreamChunks}]`}),P++)}V.trim()&&(P<N.maxStreamChunks&&gl(_,F,P,V.trim()),P++),Wh(_,F,P)}catch(V){console.error(`[debug_log] Error reading debug stream for reqId=${F}:`,V),Wh(_,F,P)}finally{q.releaseLock()}})()}var df="2.0.93";O();var mu=new Map,Af=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],ff=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],jg=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function Kh(g,_,F){let N=J=>{if(F instanceof Headers)return F.get(J);let oe=Object.keys(F).find(Z=>Z.toLowerCase()===J);return oe?F[oe]:null},q=Zh(N,Af),P=Zh(N,ff),V=Zh(N,jg);(q||P||V)&&mu.set(g,{provider:g,remaining:ml(q),limit:ml(P),reset:qg(V),capturedAt:Date.now()})}function $g(g){return mu.get(g)}function Hg(){return Array.from(mu.values())}function Zh(g,_){for(let F of _){let N=g(F);if(N)return N}return null}function ml(g){if(!g)return null;let _=Number(g.trim().replace(/,/g,""));return Number.isFinite(_)?_:null}function qg(g){if(!g)return null;let _=g.trim();if(!_)return null;let F=Number(_);if(Number.isFinite(F))return F>1e12?Math.floor(F/1e3):F>1e9?Math.floor(F):Math.floor(Date.now()/1e3+F);let N=Date.parse(_);if(Number.isFinite(N))return Math.floor(N/1e3);let q=pf(_);return q===null?null:Math.floor((Date.now()+q)/1e3)}function pf(g){let _=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,F=0,N=!1;for(let q of g.matchAll(_)){N=!0;let P=Number(q[1]),V=q[2].toLowerCase();if(Number.isFinite(P))switch(V){case"ms":F+=P;break;case"s":F+=P*1e3;break;case"m":F+=P*60*1e3;break;case"h":F+=P*60*60*1e3;break;case"d":F+=P*24*60*60*1e3;break}}return N?F:null}B();async function gf(g,_,F,N){let q=g.body,P=g.provider,V=F.providerService.getProvider(P);if(!V)throw ds(`Provider '${P}' not found`,404,"provider_not_found");try{let{requestBody:J,config:oe,bypass:Z}=await Ec(q,V,N,g.headers,{req:g}),ae=await _o(J,oe,V,F,Z,N,{req:g});try{V?.baseUrl&&ae?.headers&&Kh(P,V.baseUrl,ae.headers)}catch{}let le=await El(J,ae,V,N,Z,{req:g});return mf(le,_,q,F)}catch(J){let oe=await Xh(g,_,F,N,J);if(oe)return oe;throw J}}async function Xh(g,_,F,N,q){let P=g.scenarioType||"default",V=g.familyFallback,J=g.modelFamily,oe=F.configService.get("fallback"),Z=S();if(!F.configService.get("Router")?.enableFallback)return g.log.info("Fallback disabled by configuration, skipping fallback attempts"),null;let ae=De=>{let[Ce,...xe]=De.split(","),Be=Ce?.trim(),me=xe.join(",").trim();return!Be||!me?null:{provider:Be,model:me,key:`${Be},${me}`}},le=[];if(J){let De=V?.[P];Array.isArray(De)&&De.length>0?le.push({name:`${J}/${P}`,models:De}):g.log.warn(`No ${J} fallback configured for ${P}; will try global ${P} fallback`)}if(Array.isArray(oe?.[P])&&oe[P].length>0&&le.push({name:`global/${P}`,models:oe[P]}),le.length===0)return null;let Ae=g.provider||"",te=g.body.model||"",he=new Set;Ae&&te&&(Z.recordFailure(Ae,te,q?.message),he.add(`${Ae},${te}`),F.recordUsage?.({provider:Ae,model:te,originalModel:g.originalModel||te,scenarioType:P,modelFamily:g.modelFamily,errorMessage:q?.message||String(q),sessionId:g.usageSessionId||g.id,stream:g.body.stream,inputTokens:g.tokenCount||0}));let ye=le.reduce((De,Ce)=>De+Ce.models.length,0);g.log.warn(`Request failed for ${P}, trying ${ye} fallback models across ${le.length} fallback stage(s)`);for(let De of le){g.log.info(`Trying ${De.name} fallback stage with ${De.models.length} models`);for(let Ce of De.models){let xe=ae(Ce);if(!xe){g.log.warn(`Fallback model '${Ce}' is invalid, skipping`);continue}if(he.has(xe.key))continue;he.add(xe.key);let Be=xe.provider,me=xe.model;try{if(!Z.isAvailable(Be,me)){g.log.warn(`Fallback model ${Ce} unavailable (fail pool), skipping`);continue}g.log.info(`Trying fallback model: ${Ce}`);let Te={...g.body};Te.model=me;let Pe={...g,provider:Be,body:Te},et=F.providerService.getProvider(Be);if(!et){g.log.warn(`Fallback provider '${Be}' not found, skipping`);continue}let{requestBody:dt,config:ft,bypass:kt}=await Ec(Te,et,N,g.headers,{req:Pe}),Dt=await _o(dt,ft,et,F,kt,N,{req:Pe});try{et?.baseUrl&&Dt?.headers&&Kh(Be,et.baseUrl,Dt.headers)}catch{}let Ar=await El(dt,Dt,et,N,kt,{req:Pe});return g.log.info(`Fallback model ${Ce} succeeded`),Z.recordSuccess(Be,me),Ae&&te&&(D().promote(Ae,te,P,Be,me),g.log.info(`Promoted fallback model ${Be},${me} for ${Ae},${te}:${P}`),Z.forceOpen(Ae,te,q?.message),g.log.info(`Marked original model ${Ae},${te} as unavailable`)),g.provider=Be,g.body=Te,mf(Ar,_,Te,F)}catch(Te){Z.recordFailure(Be,me,Te.message),g.log.warn(`Fallback model ${xe.key} failed: ${Te.message}`),F.recordUsage?.({provider:Be,model:me,originalModel:g.body.model,scenarioType:P,modelFamily:g.modelFamily,errorMessage:Te.message,sessionId:g.usageSessionId||g.id,stream:g.body.stream});continue}}}return g.log.error(`All fallback models failed for ${P}`),null}async function Ec(g,_,F,N,q){let P=JSON.parse(JSON.stringify(g)),V={},J=!1;if(J=yc(_,F,g),J&&(N instanceof Headers?N.delete("content-length"):delete N["content-length"],V.headers=N),!J&&typeof F.transformRequestOut=="function"){let oe=await F.transformRequestOut(P);oe.body?(P=oe.body,V=oe.config||{}):P=oe}if(!J&&_.transformer?.use?.length)for(let oe of _.transformer.use){if(!oe||typeof oe.transformRequestIn!="function")continue;let Z=await oe.transformRequestIn(P,_,q);Z.body?(P=Z.body,V={...V,...Z.config}):P=Z}if(!J&&_.transformer?.[g.model]?.use?.length)for(let oe of _.transformer[g.model].use)!oe||typeof oe.transformRequestIn!="function"||(P=await oe.transformRequestIn(P,_,q));return{requestBody:P,config:V,bypass:J}}function yc(g,_,F){return g.transformer?.use?.length===1&&g.transformer.use[0].name===_.name&&(!g.transformer?.[F.model]?.use.length||g.transformer?.[F.model]?.use.length===1&&g.transformer?.[F.model]?.use[0].name===_.name)}async function _o(g,_,F,N,q,P,V){let J=_.url||new URL(F.baseUrl);if(!_.TIMEOUT){let ae=N.configService.get("API_TIMEOUT_MS");ae&&(_.TIMEOUT=typeof ae=="string"?parseInt(ae,10):ae)}if(q&&typeof P.auth=="function"){let ae=await P.auth(g,F);if(ae.body){g=ae.body;let le=_.headers||{};ae.config?.headers&&(le={...le,...ae.config.headers},delete le.host,delete ae.config.headers),_={..._,...ae.config,headers:le}}else g=ae}let oe={Authorization:`Bearer ${F.apiKey}`,..._?.headers||{}};for(let ae in oe)(oe[ae]==="undefined"||["authorization","Authorization"].includes(ae)&&oe[ae]?.includes("undefined"))&&delete oe[ae];As(N.configService)&&lf(N.log,V.req.id,{url:String(J),headers:oe,body:g});let Z=await Ni(J,g,{httpsProxy:N.configService.getHttpsProxy(),..._,headers:JSON.parse(JSON.stringify(oe))},V,N.log);if(!Z.ok){let ae=await Z.text();N.log.error(`[provider_response_error] Error from provider(${F.name},${g.model}: ${Z.status}): ${ae}`);let le=ds(`Error from provider(${F.name},${g.model}: ${Z.status}): ${ae}`,Z.status,"provider_response_error");throw le.rawBody=ae,le}if(!g.stream&&As(N.configService)){let ae=await Z.clone().text();cf(N.log,V.req.id,{status:Z.status,headers:Object.fromEntries(Z.headers.entries()),body:ae})}return Z}async function El(g,_,F,N,q,P){let V=_;if(!q&&F.transformer?.use?.length)for(let J of Array.from(F.transformer.use).reverse())!J||typeof J.transformResponseOut!="function"||(V=await J.transformResponseOut(V,P));if(!q&&F.transformer?.[g.model]?.use?.length)for(let J of Array.from(F.transformer[g.model].use).reverse())!J||typeof J.transformResponseOut!="function"||(V=await J.transformResponseOut(V,P));return!q&&N.transformResponseIn&&(V=await N.transformResponseIn(V,P)),V}function mf(g,_,F,N){if(g.ok||_.code(g.status),F.stream===!0){if(_.header("Content-Type","text/event-stream"),_.header("Cache-Control","no-cache"),_.header("Connection","keep-alive"),N&&As(N.configService)){let[q,P]=g.body.tee(),V=pl(N.configService);return hf(q,N.log,_.request.id,V),_.send(P)}return _.send(g.body)}else return g.json()}var Ef=async g=>{g.get("/",async()=>({message:"LLMs API",version:df})),g.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()})),g.get("/providers/health",async()=>({states:S().getAllStates().map(F=>({provider:F.provider,model:F.model,status:F.status,failureCount:F.failureCount,successCount:F.successCount,lastFailureTime:F.lastFailureTime,lastError:F.lastError})),timestamp:new Date().toISOString()}));let _=g.transformerService.getTransformersWithEndpoint();for(let{transformer:F}of _)F.endPoint&&g.post(F.endPoint,async(N,q)=>gf(N,q,g,F));g.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(F,N)=>{let{name:q,baseUrl:P,apiKey:V,models:J}=F.body;if(!q?.trim())throw ds("Provider name is required",400,"invalid_request");if(!P||!Dc(P))throw ds("Valid base URL is required",400,"invalid_request");if(!V?.trim())throw ds("API key is required",400,"invalid_request");if(!J||!Array.isArray(J)||J.length===0)throw ds("At least one model is required",400,"invalid_request");if(g.providerService.getProvider(F.body.name))throw ds(`Provider with name '${F.body.name}' already exists`,400,"provider_exists");return g.providerService.registerProvider(F.body)}),g.get("/providers",async()=>g.providerService.getProviders()),g.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async F=>{let N=g.providerService.getProvider(F.params.id);if(!N)throw ds("Provider not found",404,"provider_not_found");return N}),g.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(F,N)=>{let q=g.providerService.updateProvider(F.params.id,F.body);if(!q)throw ds("Provider not found",404,"provider_not_found");return q}),g.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async F=>{if(!g.providerService.deleteProvider(F.params.id))throw ds("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),g.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(F,N)=>{if(!g.providerService.toggleProvider(F.params.id,F.body.enabled))throw ds("Provider not found",404,"provider_not_found");return{message:`Provider ${F.body.enabled?"enabled":"disabled"} successfully`}})};function Dc(g){try{return new URL(g),!0}catch{return!1}}var Cc=class{constructor(g,_,F){this.configService=g,this.transformerService=_,this.logger=F,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let g=this.configService.get("providers");if(g&&Array.isArray(g)){this.initializeFromProvidersArray(g);return}}initializeFromProvidersArray(g){g.forEach(_=>{try{if(!_.name||!_.api_base_url||!_.api_key)return;let F={};_.transformer&&Object.keys(_.transformer).forEach(N=>{N==="use"?Array.isArray(_.transformer.use)&&(F.use=_.transformer.use.map(q=>{if(Array.isArray(q)&&typeof q[0]=="string"){let P=this.transformerService.getTransformer(q[0]);if(P)return new P(q[1])}if(typeof q=="string"){let P=this.transformerService.getTransformer(q);return typeof P=="function"?new P:P}}).filter(q=>typeof q<"u")):Array.isArray(_.transformer[N]?.use)&&(F[N]={use:_.transformer[N].use.map(q=>{if(Array.isArray(q)&&typeof q[0]=="string"){let P=this.transformerService.getTransformer(q[0]);if(P)return new P(q[1])}if(typeof q=="string"){let P=this.transformerService.getTransformer(q);return typeof P=="function"?new P:P}}).filter(q=>typeof q<"u")})}),this.registerProvider({name:_.name,baseUrl:_.api_base_url,apiKey:_.api_key,models:_.models||[],quotaToken:_.quota_token,transformer:_.transformer?F:void 0}),this.logger.info(`${_.name} provider registered`)}catch(F){this.logger.error(`${_.name} provider registered error: ${F}`)}})}registerProvider(g){let _={...g};return this.providers.set(_.name,_),g.models.forEach(F=>{let N=`${_.name},${F}`,q={provider:_.name,model:F,fullModel:N};this.modelRoutes.set(N,q),this.modelRoutes.has(F)||this.modelRoutes.set(F,q)}),_}getProviders(){return Array.from(this.providers.values())}getProvider(g){return this.providers.get(g)}updateProvider(g,_){let F=this.providers.get(g);if(!F)return null;let N={...F,..._,updatedAt:new Date};return this.providers.set(g,N),_.models&&(F.models.forEach(q=>{let P=`${F.name},${q}`;this.modelRoutes.delete(P),this.modelRoutes.delete(q)}),_.models.forEach(q=>{let P=`${F.name},${q}`,V={provider:F.name,model:q,fullModel:P};this.modelRoutes.set(P,V),this.modelRoutes.has(q)||this.modelRoutes.set(q,V)})),N}deleteProvider(g){let _=this.providers.get(g);return _?(_.models.forEach(F=>{let N=`${_.name},${F}`;this.modelRoutes.delete(N),this.modelRoutes.delete(F)}),this.providers.delete(g),!0):!1}toggleProvider(g,_){return!!this.providers.get(g)}resolveModelRoute(g){let _=this.modelRoutes.get(g);if(!_)return null;let F=this.providers.get(_.provider);return F?{provider:F,originalModel:g,targetModel:_.model}:null}getAvailableModelNames(){let g=[];return this.providers.forEach(_=>{_.models.forEach(F=>{g.push(F),g.push(`${_.name},${F}`)})}),g}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(g){return g?Array.isArray(g)?g.reduce((_,F)=>{if(Array.isArray(F)){let[N,q={}]=F;_[N]=q}else _[F]={};return _},{}):g:{}}async getAvailableModels(){let g=[];return this.providers.forEach(_=>{_.models.forEach(F=>{g.push({id:F,object:"model",owned_by:_.name,provider:_.name}),g.push({id:`${_.name},${F}`,object:"model",owned_by:_.name,provider:_.name})})}),{object:"list",data:g}}},xi=[];for(let g=0;g<256;++g)xi.push((g+256).toString(16).slice(1));function yf(g,_=0){return(xi[g[_+0]]+xi[g[_+1]]+xi[g[_+2]]+xi[g[_+3]]+"-"+xi[g[_+4]]+xi[g[_+5]]+"-"+xi[g[_+6]]+xi[g[_+7]]+"-"+xi[g[_+8]]+xi[g[_+9]]+"-"+xi[g[_+10]]+xi[g[_+11]]+xi[g[_+12]]+xi[g[_+13]]+xi[g[_+14]]+xi[g[_+15]]).toLowerCase()}var Gg=require("crypto"),bc=new Uint8Array(256),wc=bc.length;function Vg(){return wc>bc.length-16&&((0,Gg.randomFillSync)(bc),wc=0),bc.slice(wc,wc+=16)}var Yg=require("crypto"),Df={randomUUID:Yg.randomUUID};function Bc(g,_,F){if(Df.randomUUID&&!_&&!g)return Df.randomUUID();g=g||{};let N=g.random??g.rng?.()??Vg();if(N.length<16)throw new Error("Random bytes length must be >= 16");if(N[6]=N[6]&15|64,N[8]=N[8]&63|128,_){if(F=F||0,F<0||F+16>_.length)throw new RangeError(`UUID byte range ${F}:${F+15} is out of buffer bounds`);for(let q=0;q<16;++q)_[F+q]=N[q];return _}return yf(N)}var Ta=Bc,Eu=g=>g<=0?"none":g<=1024?"low":g<=8192?"medium":"high",Cf=(g,_)=>(g.includes("base64")&&(g=g.split("base64").pop(),g.startsWith(",")&&(g=g.slice(1))),`data:${_};base64,${g}`),$=class{constructor(g){this.options=g,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(g,_){let F={};return this.useBearer?(F.authorization=`Bearer ${_.apiKey}`,F["x-api-key"]=void 0):(F["x-api-key"]=_.apiKey,F.authorization=void 0),{body:g,config:{headers:F}}}async transformRequestOut(g){let _=[];if(g.system){if(typeof g.system=="string")_.push({role:"system",content:g.system});else if(Array.isArray(g.system)&&g.system.length){let N=g.system.filter(q=>q.type==="text"&&q.text).map(q=>({type:"text",text:q.text,cache_control:q.cache_control}));_.push({role:"system",content:N})}}JSON.parse(JSON.stringify(g.messages||[]))?.forEach(N=>{if(N.role==="user"||N.role==="assistant"){if(typeof N.content=="string"){_.push({role:N.role,content:N.content});return}if(Array.isArray(N.content)){if(N.role==="user"){let q=N.content.filter(V=>V.type==="tool_result"&&V.tool_use_id);q.length&&q.forEach(V=>{let J={role:"tool",content:typeof V.content=="string"?V.content:JSON.stringify(V.content),tool_call_id:V.tool_use_id,cache_control:V.cache_control};_.push(J)});let P=N.content.filter(V=>V.type==="text"&&V.text||V.type==="image"&&V.source);P.length&&_.push({role:"user",content:P.map(V=>V?.type==="image"?{type:"image_url",image_url:{url:V.source?.type==="base64"?Cf(V.source.data,V.source.media_type):V.source.url},media_type:V.source.media_type}:V)})}else if(N.role==="assistant"){let q={role:"assistant",content:""},P=N.content.filter(oe=>oe.type==="text"&&oe.text);P.length&&(q.content=P.map(oe=>oe.text).join(`
|
|
584
|
+
`);V=Z.pop()||"";for(let ae of Z)ae.trim()&&(P<N.maxStreamChunks?gl(_,F,P,ae):P===N.maxStreamChunks&&_.info({debug_log:!0,reqId:F,phase:"provider_stream_chunk_omitted",message:`[chunks after #${P} omitted, maxStreamChunks=${N.maxStreamChunks}]`}),P++)}V.trim()&&(P<N.maxStreamChunks&&gl(_,F,P,V.trim()),P++),Wh(_,F,P)}catch(V){console.error(`[debug_log] Error reading debug stream for reqId=${F}:`,V),Wh(_,F,P)}finally{q.releaseLock()}})()}var df="2.0.94";O();var mu=new Map,Af=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],ff=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],jg=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function Kh(g,_,F){let N=J=>{if(F instanceof Headers)return F.get(J);let oe=Object.keys(F).find(Z=>Z.toLowerCase()===J);return oe?F[oe]:null},q=Zh(N,Af),P=Zh(N,ff),V=Zh(N,jg);(q||P||V)&&mu.set(g,{provider:g,remaining:ml(q),limit:ml(P),reset:qg(V),capturedAt:Date.now()})}function $g(g){return mu.get(g)}function Hg(){return Array.from(mu.values())}function Zh(g,_){for(let F of _){let N=g(F);if(N)return N}return null}function ml(g){if(!g)return null;let _=Number(g.trim().replace(/,/g,""));return Number.isFinite(_)?_:null}function qg(g){if(!g)return null;let _=g.trim();if(!_)return null;let F=Number(_);if(Number.isFinite(F))return F>1e12?Math.floor(F/1e3):F>1e9?Math.floor(F):Math.floor(Date.now()/1e3+F);let N=Date.parse(_);if(Number.isFinite(N))return Math.floor(N/1e3);let q=pf(_);return q===null?null:Math.floor((Date.now()+q)/1e3)}function pf(g){let _=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,F=0,N=!1;for(let q of g.matchAll(_)){N=!0;let P=Number(q[1]),V=q[2].toLowerCase();if(Number.isFinite(P))switch(V){case"ms":F+=P;break;case"s":F+=P*1e3;break;case"m":F+=P*60*1e3;break;case"h":F+=P*60*60*1e3;break;case"d":F+=P*24*60*60*1e3;break}}return N?F:null}B();async function gf(g,_,F,N){let q=g.body,P=g.provider,V=F.providerService.getProvider(P);if(!V)throw ds(`Provider '${P}' not found`,404,"provider_not_found");try{let{requestBody:J,config:oe,bypass:Z}=await Ec(q,V,N,g.headers,{req:g}),ae=await _o(J,oe,V,F,Z,N,{req:g});try{V?.baseUrl&&ae?.headers&&Kh(P,V.baseUrl,ae.headers)}catch{}let le=await El(J,ae,V,N,Z,{req:g});return mf(le,_,q,F)}catch(J){let oe=await Xh(g,_,F,N,J);if(oe)return oe;throw J}}async function Xh(g,_,F,N,q){let P=g.scenarioType||"default",V=g.familyFallback,J=g.modelFamily,oe=F.configService.get("fallback"),Z=S();if(!F.configService.get("Router")?.enableFallback)return g.log.info("Fallback disabled by configuration, skipping fallback attempts"),null;let ae=De=>{let[Ce,...xe]=De.split(","),Be=Ce?.trim(),me=xe.join(",").trim();return!Be||!me?null:{provider:Be,model:me,key:`${Be},${me}`}},le=[];if(J){let De=V?.[P];Array.isArray(De)&&De.length>0?le.push({name:`${J}/${P}`,models:De}):g.log.warn(`No ${J} fallback configured for ${P}; will try global ${P} fallback`)}if(Array.isArray(oe?.[P])&&oe[P].length>0&&le.push({name:`global/${P}`,models:oe[P]}),le.length===0)return null;let Ae=g.provider||"",te=g.body.model||"",he=new Set;Ae&&te&&(Z.recordFailure(Ae,te,q?.message),he.add(`${Ae},${te}`),F.recordUsage?.({provider:Ae,model:te,originalModel:g.originalModel||te,scenarioType:P,modelFamily:g.modelFamily,errorMessage:q?.message||String(q),sessionId:g.usageSessionId||g.id,stream:g.body.stream,inputTokens:g.tokenCount||0}));let ye=le.reduce((De,Ce)=>De+Ce.models.length,0);g.log.warn(`Request failed for ${P}, trying ${ye} fallback models across ${le.length} fallback stage(s)`);for(let De of le){g.log.info(`Trying ${De.name} fallback stage with ${De.models.length} models`);for(let Ce of De.models){let xe=ae(Ce);if(!xe){g.log.warn(`Fallback model '${Ce}' is invalid, skipping`);continue}if(he.has(xe.key))continue;he.add(xe.key);let Be=xe.provider,me=xe.model;try{if(!Z.isAvailable(Be,me)){g.log.warn(`Fallback model ${Ce} unavailable (fail pool), skipping`);continue}g.log.info(`Trying fallback model: ${Ce}`);let Te={...g.body};Te.model=me;let Pe={...g,provider:Be,body:Te},et=F.providerService.getProvider(Be);if(!et){g.log.warn(`Fallback provider '${Be}' not found, skipping`);continue}let{requestBody:dt,config:ft,bypass:kt}=await Ec(Te,et,N,g.headers,{req:Pe}),Dt=await _o(dt,ft,et,F,kt,N,{req:Pe});try{et?.baseUrl&&Dt?.headers&&Kh(Be,et.baseUrl,Dt.headers)}catch{}let Ar=await El(dt,Dt,et,N,kt,{req:Pe});return g.log.info(`Fallback model ${Ce} succeeded`),Z.recordSuccess(Be,me),Ae&&te&&(D().promote(Ae,te,P,Be,me),g.log.info(`Promoted fallback model ${Be},${me} for ${Ae},${te}:${P}`),Z.forceOpen(Ae,te,q?.message),g.log.info(`Marked original model ${Ae},${te} as unavailable`)),g.provider=Be,g.body=Te,mf(Ar,_,Te,F)}catch(Te){Z.recordFailure(Be,me,Te.message),g.log.warn(`Fallback model ${xe.key} failed: ${Te.message}`),F.recordUsage?.({provider:Be,model:me,originalModel:g.body.model,scenarioType:P,modelFamily:g.modelFamily,errorMessage:Te.message,sessionId:g.usageSessionId||g.id,stream:g.body.stream});continue}}}return g.log.error(`All fallback models failed for ${P}`),null}async function Ec(g,_,F,N,q){let P=JSON.parse(JSON.stringify(g)),V={},J=!1;if(J=yc(_,F,g),J&&(N instanceof Headers?N.delete("content-length"):delete N["content-length"],V.headers=N),!J&&typeof F.transformRequestOut=="function"){let oe=await F.transformRequestOut(P);oe.body?(P=oe.body,V=oe.config||{}):P=oe}if(!J&&_.transformer?.use?.length)for(let oe of _.transformer.use){if(!oe||typeof oe.transformRequestIn!="function")continue;let Z=await oe.transformRequestIn(P,_,q);Z.body?(P=Z.body,V={...V,...Z.config}):P=Z}if(!J&&_.transformer?.[g.model]?.use?.length)for(let oe of _.transformer[g.model].use)!oe||typeof oe.transformRequestIn!="function"||(P=await oe.transformRequestIn(P,_,q));return{requestBody:P,config:V,bypass:J}}function yc(g,_,F){return g.transformer?.use?.length===1&&g.transformer.use[0].name===_.name&&(!g.transformer?.[F.model]?.use.length||g.transformer?.[F.model]?.use.length===1&&g.transformer?.[F.model]?.use[0].name===_.name)}async function _o(g,_,F,N,q,P,V){let J=_.url||new URL(F.baseUrl);if(!_.TIMEOUT){let ae=N.configService.get("API_TIMEOUT_MS");ae&&(_.TIMEOUT=typeof ae=="string"?parseInt(ae,10):ae)}if(q&&typeof P.auth=="function"){let ae=await P.auth(g,F);if(ae.body){g=ae.body;let le=_.headers||{};ae.config?.headers&&(le={...le,...ae.config.headers},delete le.host,delete ae.config.headers),_={..._,...ae.config,headers:le}}else g=ae}let oe={Authorization:`Bearer ${F.apiKey}`,..._?.headers||{}};for(let ae in oe)(oe[ae]==="undefined"||["authorization","Authorization"].includes(ae)&&oe[ae]?.includes("undefined"))&&delete oe[ae];As(N.configService)&&lf(N.log,V.req.id,{url:String(J),headers:oe,body:g});let Z=await Ni(J,g,{httpsProxy:N.configService.getHttpsProxy(),..._,headers:JSON.parse(JSON.stringify(oe))},V,N.log);if(!Z.ok){let ae=await Z.text();N.log.error(`[provider_response_error] Error from provider(${F.name},${g.model}: ${Z.status}): ${ae}`);let le=ds(`Error from provider(${F.name},${g.model}: ${Z.status}): ${ae}`,Z.status,"provider_response_error");throw le.rawBody=ae,le}if(!g.stream&&As(N.configService)){let ae=await Z.clone().text();cf(N.log,V.req.id,{status:Z.status,headers:Object.fromEntries(Z.headers.entries()),body:ae})}return Z}async function El(g,_,F,N,q,P){let V=_;if(!q&&F.transformer?.use?.length)for(let J of Array.from(F.transformer.use).reverse())!J||typeof J.transformResponseOut!="function"||(V=await J.transformResponseOut(V,P));if(!q&&F.transformer?.[g.model]?.use?.length)for(let J of Array.from(F.transformer[g.model].use).reverse())!J||typeof J.transformResponseOut!="function"||(V=await J.transformResponseOut(V,P));return!q&&N.transformResponseIn&&(V=await N.transformResponseIn(V,P)),V}function mf(g,_,F,N){if(g.ok||_.code(g.status),F.stream===!0){if(_.header("Content-Type","text/event-stream"),_.header("Cache-Control","no-cache"),_.header("Connection","keep-alive"),N&&As(N.configService)){let[q,P]=g.body.tee(),V=pl(N.configService);return hf(q,N.log,_.request.id,V),_.send(P)}return _.send(g.body)}else return g.json()}var Ef=async g=>{g.get("/",async()=>({message:"LLMs API",version:df})),g.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()})),g.get("/providers/health",async()=>({states:S().getAllStates().map(F=>({provider:F.provider,model:F.model,status:F.status,failureCount:F.failureCount,successCount:F.successCount,lastFailureTime:F.lastFailureTime,lastError:F.lastError})),timestamp:new Date().toISOString()}));let _=g.transformerService.getTransformersWithEndpoint();for(let{transformer:F}of _)F.endPoint&&g.post(F.endPoint,async(N,q)=>gf(N,q,g,F));g.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(F,N)=>{let{name:q,baseUrl:P,apiKey:V,models:J}=F.body;if(!q?.trim())throw ds("Provider name is required",400,"invalid_request");if(!P||!Dc(P))throw ds("Valid base URL is required",400,"invalid_request");if(!V?.trim())throw ds("API key is required",400,"invalid_request");if(!J||!Array.isArray(J)||J.length===0)throw ds("At least one model is required",400,"invalid_request");if(g.providerService.getProvider(F.body.name))throw ds(`Provider with name '${F.body.name}' already exists`,400,"provider_exists");return g.providerService.registerProvider(F.body)}),g.get("/providers",async()=>g.providerService.getProviders()),g.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async F=>{let N=g.providerService.getProvider(F.params.id);if(!N)throw ds("Provider not found",404,"provider_not_found");return N}),g.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(F,N)=>{let q=g.providerService.updateProvider(F.params.id,F.body);if(!q)throw ds("Provider not found",404,"provider_not_found");return q}),g.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async F=>{if(!g.providerService.deleteProvider(F.params.id))throw ds("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),g.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(F,N)=>{if(!g.providerService.toggleProvider(F.params.id,F.body.enabled))throw ds("Provider not found",404,"provider_not_found");return{message:`Provider ${F.body.enabled?"enabled":"disabled"} successfully`}})};function Dc(g){try{return new URL(g),!0}catch{return!1}}var Cc=class{constructor(g,_,F){this.configService=g,this.transformerService=_,this.logger=F,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let g=this.configService.get("providers");if(g&&Array.isArray(g)){this.initializeFromProvidersArray(g);return}}initializeFromProvidersArray(g){g.forEach(_=>{try{if(!_.name||!_.api_base_url||!_.api_key)return;let F={};_.transformer&&Object.keys(_.transformer).forEach(N=>{N==="use"?Array.isArray(_.transformer.use)&&(F.use=_.transformer.use.map(q=>{if(Array.isArray(q)&&typeof q[0]=="string"){let P=this.transformerService.getTransformer(q[0]);if(P)return new P(q[1])}if(typeof q=="string"){let P=this.transformerService.getTransformer(q);return typeof P=="function"?new P:P}}).filter(q=>typeof q<"u")):Array.isArray(_.transformer[N]?.use)&&(F[N]={use:_.transformer[N].use.map(q=>{if(Array.isArray(q)&&typeof q[0]=="string"){let P=this.transformerService.getTransformer(q[0]);if(P)return new P(q[1])}if(typeof q=="string"){let P=this.transformerService.getTransformer(q);return typeof P=="function"?new P:P}}).filter(q=>typeof q<"u")})}),this.registerProvider({name:_.name,baseUrl:_.api_base_url,apiKey:_.api_key,models:_.models||[],quotaToken:_.quota_token,transformer:_.transformer?F:void 0}),this.logger.info(`${_.name} provider registered`)}catch(F){this.logger.error(`${_.name} provider registered error: ${F}`)}})}registerProvider(g){let _={...g};return this.providers.set(_.name,_),g.models.forEach(F=>{let N=`${_.name},${F}`,q={provider:_.name,model:F,fullModel:N};this.modelRoutes.set(N,q),this.modelRoutes.has(F)||this.modelRoutes.set(F,q)}),_}getProviders(){return Array.from(this.providers.values())}getProvider(g){return this.providers.get(g)}updateProvider(g,_){let F=this.providers.get(g);if(!F)return null;let N={...F,..._,updatedAt:new Date};return this.providers.set(g,N),_.models&&(F.models.forEach(q=>{let P=`${F.name},${q}`;this.modelRoutes.delete(P),this.modelRoutes.delete(q)}),_.models.forEach(q=>{let P=`${F.name},${q}`,V={provider:F.name,model:q,fullModel:P};this.modelRoutes.set(P,V),this.modelRoutes.has(q)||this.modelRoutes.set(q,V)})),N}deleteProvider(g){let _=this.providers.get(g);return _?(_.models.forEach(F=>{let N=`${_.name},${F}`;this.modelRoutes.delete(N),this.modelRoutes.delete(F)}),this.providers.delete(g),!0):!1}toggleProvider(g,_){return!!this.providers.get(g)}resolveModelRoute(g){let _=this.modelRoutes.get(g);if(!_)return null;let F=this.providers.get(_.provider);return F?{provider:F,originalModel:g,targetModel:_.model}:null}getAvailableModelNames(){let g=[];return this.providers.forEach(_=>{_.models.forEach(F=>{g.push(F),g.push(`${_.name},${F}`)})}),g}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(g){return g?Array.isArray(g)?g.reduce((_,F)=>{if(Array.isArray(F)){let[N,q={}]=F;_[N]=q}else _[F]={};return _},{}):g:{}}async getAvailableModels(){let g=[];return this.providers.forEach(_=>{_.models.forEach(F=>{g.push({id:F,object:"model",owned_by:_.name,provider:_.name}),g.push({id:`${_.name},${F}`,object:"model",owned_by:_.name,provider:_.name})})}),{object:"list",data:g}}},xi=[];for(let g=0;g<256;++g)xi.push((g+256).toString(16).slice(1));function yf(g,_=0){return(xi[g[_+0]]+xi[g[_+1]]+xi[g[_+2]]+xi[g[_+3]]+"-"+xi[g[_+4]]+xi[g[_+5]]+"-"+xi[g[_+6]]+xi[g[_+7]]+"-"+xi[g[_+8]]+xi[g[_+9]]+"-"+xi[g[_+10]]+xi[g[_+11]]+xi[g[_+12]]+xi[g[_+13]]+xi[g[_+14]]+xi[g[_+15]]).toLowerCase()}var Gg=require("crypto"),bc=new Uint8Array(256),wc=bc.length;function Vg(){return wc>bc.length-16&&((0,Gg.randomFillSync)(bc),wc=0),bc.slice(wc,wc+=16)}var Yg=require("crypto"),Df={randomUUID:Yg.randomUUID};function Bc(g,_,F){if(Df.randomUUID&&!_&&!g)return Df.randomUUID();g=g||{};let N=g.random??g.rng?.()??Vg();if(N.length<16)throw new Error("Random bytes length must be >= 16");if(N[6]=N[6]&15|64,N[8]=N[8]&63|128,_){if(F=F||0,F<0||F+16>_.length)throw new RangeError(`UUID byte range ${F}:${F+15} is out of buffer bounds`);for(let q=0;q<16;++q)_[F+q]=N[q];return _}return yf(N)}var Ta=Bc,Eu=g=>g<=0?"none":g<=1024?"low":g<=8192?"medium":"high",Cf=(g,_)=>(g.includes("base64")&&(g=g.split("base64").pop(),g.startsWith(",")&&(g=g.slice(1))),`data:${_};base64,${g}`),$=class{constructor(g){this.options=g,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(g,_){let F={};return this.useBearer?(F.authorization=`Bearer ${_.apiKey}`,F["x-api-key"]=void 0):(F["x-api-key"]=_.apiKey,F.authorization=void 0),{body:g,config:{headers:F}}}async transformRequestOut(g){let _=[];if(g.system){if(typeof g.system=="string")_.push({role:"system",content:g.system});else if(Array.isArray(g.system)&&g.system.length){let N=g.system.filter(q=>q.type==="text"&&q.text).map(q=>({type:"text",text:q.text,cache_control:q.cache_control}));_.push({role:"system",content:N})}}JSON.parse(JSON.stringify(g.messages||[]))?.forEach(N=>{if(N.role==="user"||N.role==="assistant"){if(typeof N.content=="string"){_.push({role:N.role,content:N.content});return}if(Array.isArray(N.content)){if(N.role==="user"){let q=N.content.filter(V=>V.type==="tool_result"&&V.tool_use_id);q.length&&q.forEach(V=>{let J={role:"tool",content:typeof V.content=="string"?V.content:JSON.stringify(V.content),tool_call_id:V.tool_use_id,cache_control:V.cache_control};_.push(J)});let P=N.content.filter(V=>V.type==="text"&&V.text||V.type==="image"&&V.source);P.length&&_.push({role:"user",content:P.map(V=>V?.type==="image"?{type:"image_url",image_url:{url:V.source?.type==="base64"?Cf(V.source.data,V.source.media_type):V.source.url},media_type:V.source.media_type}:V)})}else if(N.role==="assistant"){let q={role:"assistant",content:""},P=N.content.filter(oe=>oe.type==="text"&&oe.text);P.length&&(q.content=P.map(oe=>oe.text).join(`
|
|
585
585
|
`));let V=N.content.filter(oe=>oe.type==="tool_use"&&oe.id);V.length&&(q.tool_calls=V.map(oe=>({id:oe.id,type:"function",function:{name:oe.name,arguments:JSON.stringify(oe.input||{})}})));let J=N.content.find(oe=>oe.type==="thinking");J&&(q.thinking={content:J.thinking,signature:J.signature}),_.push(q)}return}}});let F={messages:_,model:g.model,max_tokens:g.max_tokens,temperature:g.temperature,stream:g.stream,tools:g.tools?.length?this.convertAnthropicToolsToUnified(g.tools):void 0,tool_choice:g.tool_choice};return g.thinking&&(F.reasoning={effort:Eu(g.thinking.budget_tokens),enabled:g.thinking.type==="enabled"}),g.tool_choice&&(g.tool_choice.type==="tool"?F.tool_choice={type:"function",function:{name:g.tool_choice.name}}:F.tool_choice=g.tool_choice.type),F}async transformResponseIn(g,_){if(g.headers.get("Content-Type")?.includes("text/event-stream")){if(!g.body)throw new Error("Stream response body is null");let F=await this.convertOpenAIStreamToAnthropic(g.body,_);return new Response(F,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let F=await g.json(),N=this.convertOpenAIResponseToAnthropic(F,_);return new Response(JSON.stringify(N),{headers:{"Content-Type":"application/json"}})}}convertAnthropicToolsToUnified(g){return g.map(_=>({type:"function",function:{name:_.name,description:_.description||"",parameters:_.input_schema}}))}async convertOpenAIStreamToAnthropic(g,_){return new ReadableStream({start:async F=>{let N=new TextEncoder,q=`msg_${Date.now()}`,P=null,V="unknown",J=!1,oe=!1,Z=!1,ae=new Map,le=new Map,Ae=0,te=0,he=0,ye=!1,De=!1,Ce=0,xe=-1,Be=()=>{let et=Ce;return Ce++,et},me=et=>{if(!ye)try{F.enqueue(et);let dt=new TextDecoder().decode(et);this.logger.debug({reqId:_.req.id,data:dt,type:"send data"})}catch(dt){if(dt instanceof TypeError&&dt.message.includes("Controller is already closed"))ye=!0;else throw this.logger.debug({reqId:_.req.id,error:dt instanceof Error?dt.message:String(dt),type:"send data error"}),dt}},Te=()=>{if(!ye)try{if(xe>=0){let dt={type:"content_block_stop",index:xe};me(N.encode(`event: content_block_stop
|
|
586
586
|
data: ${JSON.stringify(dt)}
|
|
587
587
|
|
|
@@ -933,7 +933,7 @@ ${this.toMarkdown(n,t+1)}`:`${r}- ${n}`).join(`
|
|
|
933
933
|
${this.toMarkdown(i,t+1)}`:`${r}${n}: ${i}`).join(`
|
|
934
934
|
`):`${r}${e}`}async output(e,t={}){try{let r=this.formatData(e,t);switch(this.config.level||"log"){case"info":console.info(r);break;case"warn":console.warn(r);break;case"error":console.error(r);break;case"debug":console.debug(r);break;case"log":default:console.log(r);break}return!0}catch(r){return console.error("[ConsoleOutputHandler] Output failed:",r),!1}}}}),qx,Gx=ai(()=>{"use strict";qx=class{type="webhook";config;defaultTimeout=3e4;constructor(e){if(!e.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...e}}buildHeaders(){let e={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(e.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let t=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");e.Authorization=`Basic ${t}`}break;case"custom":this.config.auth.custom&&(e[this.config.auth.custom.header]=this.config.auth.custom.value);break}return e}buildBody(e,t){let{format:r="json",timestamp:n=!0,prefix:i,metadata:o}=t||{},s={data:e};return n&&(s.timestamp=new Date().toISOString()),i&&(s.prefix=i),o&&Object.keys(o).length>0&&(s.metadata=o),s}async sendRequest(e,t,r,n,i){let o=new AbortController,s=setTimeout(()=>o.abort(),i);try{let a=await fetch(e,{method:t,headers:r,body:JSON.stringify(n),signal:o.signal});if(clearTimeout(s),!a.ok)throw new Error(`HTTP ${a.status}: ${a.statusText}`);return a}catch(a){throw clearTimeout(s),a}}delay(e){return new Promise(t=>setTimeout(t,e))}async sendWithRetry(e,t,r,n,i,o){let s=null;for(let a=1;a<=o.maxAttempts;a++)try{return await this.sendRequest(e,t,r,n,i)}catch(u){if(s=u,a===o.maxAttempts)break;let l=o.backoffMs*Math.pow(2,a-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${a}/${o.maxAttempts}), retrying in ${l}ms...`,u.message),await this.delay(l)}throw s}async output(e,t={}){let r=t.timeout||this.defaultTimeout;try{let n=this.buildHeaders(),i=this.buildBody(e,t),o=await this.sendWithRetry(this.config.url,this.config.method,n,i,r,this.config.retry);return!0}catch(n){let i=n instanceof Error?n.message:String(n);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${i}`),!1;throw new Error(`Webhook output failed: ${i}`)}}}}),Vx,Yx=ai(()=>{"use strict";Vx=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,XM.tmpdir)();this.baseDir=(0,hw.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,Zm.existsSync)(this.baseDir)||(0,Zm.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(e){try{let t=e.match(/_session_([a-f0-9-]+)/i);return t?t[1]:null}catch{return null}}getFilePath(e){let t=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",n;if(this.config.includeTimestamp){let i=Date.now();n=`${t}-${e}-${i}${r}`}else n=`${t}-${e}${r}`;return(0,hw.join)(this.baseDir,n)}async output(e,t={}){try{let r=t.metadata?.sessionId;if(!r)return!1;let n={...e,timestamp:Date.now(),sessionId:r},i=this.getFilePath(r);return(0,Zm.writeFileSync)(i,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),Nw,Td,I5=ai(()=>{"use strict";Hx(),Gx(),Yx(),Nw=class{handlers=new Map;defaultOptions={};registerHandler(e,t){this.handlers.set(e,t)}registerHandlers(e){for(let t of e)if(t.enabled!==!1)try{let r=this.createHandler(t),n=t.type+"_"+Date.now();this.registerHandler(n,r)}catch(r){console.error(`[OutputManager] Failed to register ${t.type} handler:`,r)}}createHandler(e){switch(e.type){case"console":return new $x(e.config);case"webhook":return new qx(e.config);case"temp-file":return new Vx(e.config);default:throw new Error(`Unknown output handler type: ${e.type}`)}}unregisterHandler(e){return this.handlers.delete(e)}getHandler(e){return this.handlers.get(e)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(e){this.defaultOptions={...this.defaultOptions,...e}}getDefaultOptions(){return{...this.defaultOptions}}async output(e,t){let r={...this.defaultOptions,...t},n={success:[],failed:[]},i=Array.from(this.handlers.entries()).map(async([o,s])=>{try{await s.output(e,r)?n.success.push(o):n.failed.push(o)}catch(a){console.error(`[OutputManager] Handler ${o} failed:`,a),n.failed.push(o)}});return await Promise.all(i),n}async outputTo(e,t,r){let n={...this.defaultOptions,...r},i={success:[],failed:[]},o=e.map(async s=>{let a=this.handlers.get(s);if(!a){console.warn(`[OutputManager] Handler ${s} not found`),i.failed.push(s);return}try{await a.output(t,n)?i.success.push(s):i.failed.push(s)}catch(u){console.error(`[OutputManager] Handler ${s} failed:`,u),i.failed.push(s)}});return await Promise.all(o),i}async outputToType(e,t,r){let n=Array.from(this.handlers.entries()).filter(([i,o])=>o.type===e).map(([i])=>i);return this.outputTo(n,t,r)}},Td=new Nw}),v5=$u(Sv(),1),Ow=class{config={};options;constructor(e={jsonPath:"./config.json"}){this.options={envPath:e.envPath||".env",jsonPath:e.jsonPath,useEnvFile:!1,useJsonFile:e.useJsonFile!==!1,useEnvironmentVariables:e.useEnvironmentVariables!==!1,...e},this.loadConfig()}loadConfig(){this.options.useJsonFile&&this.options.jsonPath&&this.loadJsonConfig(),this.options.initialConfig&&(this.config={...this.config,...this.options.initialConfig}),this.options.useEnvFile&&this.loadEnvConfig(),this.config.LOG_FILE&&(process.env.LOG_FILE=this.config.LOG_FILE),this.config.LOG&&(process.env.LOG=this.config.LOG)}loadJsonConfig(){if(!this.options.jsonPath)return;let e=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,dw.join)(process.cwd(),this.options.jsonPath);if((0,Xm.existsSync)(e))try{let t=(0,Xm.readFileSync)(e,"utf-8"),r=v5.default.parse(t);this.config={...this.config,...r},console.log(`Loaded JSON config from: ${e}`)}catch(t){console.warn(`Failed to load JSON config from ${e}:`,t)}else console.warn(`JSON config file not found: ${e}`)}loadEnvConfig(){let e=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,dw.join)(process.cwd(),this.options.envPath);if((0,Xm.existsSync)(e))try{let t=(0,rU.config)({path:e});t.parsed&&(this.config={...this.config,...this.parseEnvConfig(t.parsed)})}catch(t){console.warn(`Failed to load .env config from ${e}:`,t)}}loadEnvironmentVariables(){let e=this.parseEnvConfig(process.env);this.config={...this.config,...e}}parseEnvConfig(e){let t={};return Object.assign(t,e),t}isAbsolutePath(e){return e.startsWith("/")||e.includes(":")}get(e,t){let r=this.config[e];return r!==void 0?r:t}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(e){return this.config[e]!==void 0}set(e,t){this.config[e]=t}reload(){this.config={},this.loadConfig()}getConfigSummary(){let e=[];return this.options.initialConfig&&e.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&e.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&e.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&e.push("Environment Variables"),`Config sources: ${e.join(", ")}`}};function uo(e,t=500,r="internal_error",n="api_error"){let i=new Error(e);return i.statusCode=t,i.code=r,i.type=n,i}async function x5(e,t,r){t.log.error(e);let n=e.statusCode||500;if(e.rawBody)try{let o=JSON.parse(e.rawBody);return r.code(n).send(o)}catch{return r.code(n).send(e.rawBody)}let i={error:{message:e.message+(e.stack||"Internal Server Error"),type:e.type||"api_error",code:e.code||"internal_error"}};return r.code(n).send(i)}function _5(e,t,r,n,i){let o=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([l,c])=>{c&&o.set(l,c)});let s,a=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let l=new AbortController,c=()=>l.abort();r.signal.addEventListener("abort",c),a.addEventListener("abort",c),s=l.signal}else s=a;let u={method:"POST",headers:o,body:JSON.stringify(t),signal:s};return r.httpsProxy&&(u.dispatcher=new nU.ProxyAgent(new URL(r.httpsProxy).toString())),i?.debug({reqId:n.req.id,request:u,headers:Object.fromEntries(o.entries()),requestUrl:typeof e=="string"?e:e.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof e=="string"?e:e.toString(),u)}var S5=new Set(["authorization","x-api-key","cookie","set-cookie"]),Kc={maxBodyLength:4096,maxStreamChunks:100},$y=!1;function F5(e){$y=e}function Lw(){return $y}function $E(e){return $y||e.get("DEBUG_LOG")===!0}function k5(e){let t=e.get("DEBUG_LOG_OPTIONS");return!t||typeof t!="object"?Kc:{maxBodyLength:t.maxBodyLength??Kc.maxBodyLength,maxStreamChunks:t.maxStreamChunks??Kc.maxStreamChunks}}function Jx(e){let t={};for(let[r,n]of Object.entries(e))S5.has(r.toLowerCase())?t[r]="***MASKED***":t[r]=n;return t}function Hy(e,t){return e.length<=t?e:e.slice(0,t)+`...[truncated, total ${e.length} bytes]`}function T5(e,t,r){let n=typeof r.body=="string"?r.body:JSON.stringify(r.body);e.info({debug_log:!0,reqId:t,phase:"provider_request",url:r.url,headers:Jx(r.headers),body:Hy(n,Kc.maxBodyLength)})}function R5(e,t,r){e.info({debug_log:!0,reqId:t,phase:"provider_response",status:r.status,headers:Jx(r.headers),...r.body!==void 0?{body:Hy(r.body,Kc.maxBodyLength)}:{}})}function Pw(e,t,r,n){e.info({debug_log:!0,reqId:t,phase:"provider_stream_chunk",chunkIndex:r,data:Hy(n,Kc.maxBodyLength)})}function Mw(e,t,r){e.info({debug_log:!0,reqId:t,phase:"provider_stream_end",totalChunks:r})}function Q5(e,t,r,n){(async()=>{let i=e.pipeThrough(new TextDecoderStream).getReader(),o=0;try{let s="";for(;;){let{done:a,value:u}=await i.read();if(a)break;s+=u;let l=s.split(`
|
|
935
935
|
|
|
936
|
-
`);s=l.pop()||"";for(let c of l)c.trim()&&(o<n.maxStreamChunks?Pw(t,r,o,c):o===n.maxStreamChunks&&t.info({debug_log:!0,reqId:r,phase:"provider_stream_chunk_omitted",message:`[chunks after #${o} omitted, maxStreamChunks=${n.maxStreamChunks}]`}),o++)}s.trim()&&(o<n.maxStreamChunks&&Pw(t,r,o,s.trim()),o++),Mw(t,r,o)}catch(s){console.error(`[debug_log] Error reading debug stream for reqId=${r}:`,s),Mw(t,r,o)}finally{i.releaseLock()}})()}var N5="2.0.93";eA();var zx=new Map,O5=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],L5=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],P5=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function qy(e,t,r){let n=a=>{if(r instanceof Headers)return r.get(a);let u=Object.keys(r).find(l=>l.toLowerCase()===a);return u?r[u]:null},i=uE(n,O5),o=uE(n,L5),s=uE(n,P5);(i||o||s)&&zx.set(e,{provider:e,remaining:Uw(i),limit:Uw(o),reset:U5(s),capturedAt:Date.now()})}function M5(){return Array.from(zx.values())}function uE(e,t){for(let r of t){let n=e(r);if(n)return n}return null}function Uw(e){if(!e)return null;let t=Number(e.trim().replace(/,/g,""));return Number.isFinite(t)?t:null}function U5(e){if(!e)return null;let t=e.trim();if(!t)return null;let r=Number(t);if(Number.isFinite(r))return r>1e12?Math.floor(r/1e3):r>1e9?Math.floor(r):Math.floor(Date.now()/1e3+r);let n=Date.parse(t);if(Number.isFinite(n))return Math.floor(n/1e3);let i=j5(t);return i===null?null:Math.floor((Date.now()+i)/1e3)}function j5(e){let t=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,r=0,n=!1;for(let i of e.matchAll(t)){n=!0;let o=Number(i[1]),s=i[2].toLowerCase();if(Number.isFinite(o))switch(s){case"ms":r+=o;break;case"s":r+=o*1e3;break;case"m":r+=o*60*1e3;break;case"h":r+=o*60*60*1e3;break;case"d":r+=o*24*60*60*1e3;break}}return n?r:null}Ty();async function $5(e,t,r,n){let i=e.body,o=e.provider,s=r.providerService.getProvider(o);if(!s)throw uo(`Provider '${o}' not found`,404,"provider_not_found");try{let{requestBody:a,config:u,bypass:l}=await Wx(i,s,n,e.headers,{req:e}),c=await Kx(a,u,s,r,l,n,{req:e});try{s?.baseUrl&&c?.headers&&qy(o,s.baseUrl,c.headers)}catch{}let h=await Zx(a,c,s,n,l,{req:e});return Xx(h,t,i,r)}catch(a){let u=await H5(e,t,r,n,a);if(u)return u;throw a}}async function H5(e,t,r,n,i){let o=e.scenarioType||"default",s=e.familyFallback,a=e.modelFamily,u=r.configService.get("fallback"),l=Za();if(!r.configService.get("Router")?.enableFallback)return e.log.info("Fallback disabled by configuration, skipping fallback attempts"),null;let c=m=>{let[E,...C]=m.split(","),y=E?.trim(),D=C.join(",").trim();return!y||!D?null:{provider:y,model:D,key:`${y},${D}`}},h=[];if(a){let m=s?.[o];Array.isArray(m)&&m.length>0?h.push({name:`${a}/${o}`,models:m}):e.log.warn(`No ${a} fallback configured for ${o}; will try global ${o} fallback`)}if(Array.isArray(u?.[o])&&u[o].length>0&&h.push({name:`global/${o}`,models:u[o]}),h.length===0)return null;let A=e.provider||"",d=e.body.model||"",f=new Set;A&&d&&(l.recordFailure(A,d,i?.message),f.add(`${A},${d}`),r.recordUsage?.({provider:A,model:d,originalModel:e.originalModel||d,scenarioType:o,modelFamily:e.modelFamily,errorMessage:i?.message||String(i),sessionId:e.usageSessionId||e.id,stream:e.body.stream,inputTokens:e.tokenCount||0}));let p=h.reduce((m,E)=>m+E.models.length,0);e.log.warn(`Request failed for ${o}, trying ${p} fallback models across ${h.length} fallback stage(s)`);for(let m of h){e.log.info(`Trying ${m.name} fallback stage with ${m.models.length} models`);for(let E of m.models){let C=c(E);if(!C){e.log.warn(`Fallback model '${E}' is invalid, skipping`);continue}if(f.has(C.key))continue;f.add(C.key);let y=C.provider,D=C.model;try{if(!l.isAvailable(y,D)){e.log.warn(`Fallback model ${E} unavailable (fail pool), skipping`);continue}e.log.info(`Trying fallback model: ${E}`);let w={...e.body};w.model=D;let v={...e,provider:y,body:w},b=r.providerService.getProvider(y);if(!b){e.log.warn(`Fallback provider '${y}' not found, skipping`);continue}let{requestBody:I,config:B,bypass:S}=await Wx(w,b,n,e.headers,{req:v}),x=await Kx(I,B,b,r,S,n,{req:v});try{b?.baseUrl&&x?.headers&&qy(y,b.baseUrl,x.headers)}catch{}let k=await Zx(I,x,b,n,S,{req:v});return e.log.info(`Fallback model ${E} succeeded`),l.recordSuccess(y,D),A&&d&&(ky().promote(A,d,o,y,D),e.log.info(`Promoted fallback model ${y},${D} for ${A},${d}:${o}`),l.forceOpen(A,d,i?.message),e.log.info(`Marked original model ${A},${d} as unavailable`)),e.provider=y,e.body=w,Xx(k,t,w,r)}catch(w){l.recordFailure(y,D,w.message),e.log.warn(`Fallback model ${C.key} failed: ${w.message}`),r.recordUsage?.({provider:y,model:D,originalModel:e.body.model,scenarioType:o,modelFamily:e.modelFamily,errorMessage:w.message,sessionId:e.usageSessionId||e.id,stream:e.body.stream});continue}}}return e.log.error(`All fallback models failed for ${o}`),null}async function Wx(e,t,r,n,i){let o=JSON.parse(JSON.stringify(e)),s={},a=!1;if(a=q5(t,r,e),a&&(n instanceof Headers?n.delete("content-length"):delete n["content-length"],s.headers=n),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(o);u.body?(o=u.body,s=u.config||{}):o=u}if(!a&&t.transformer?.use?.length)for(let u of t.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(o,t,i);l.body?(o=l.body,s={...s,...l.config}):o=l}if(!a&&t.transformer?.[e.model]?.use?.length)for(let u of t.transformer[e.model].use)!u||typeof u.transformRequestIn!="function"||(o=await u.transformRequestIn(o,t,i));return{requestBody:o,config:s,bypass:a}}function q5(e,t,r){return e.transformer?.use?.length===1&&e.transformer.use[0].name===t.name&&(!e.transformer?.[r.model]?.use.length||e.transformer?.[r.model]?.use.length===1&&e.transformer?.[r.model]?.use[0].name===t.name)}async function Kx(e,t,r,n,i,o,s){let a=t.url||new URL(r.baseUrl);if(!t.TIMEOUT){let c=n.configService.get("API_TIMEOUT_MS");c&&(t.TIMEOUT=typeof c=="string"?parseInt(c,10):c)}if(i&&typeof o.auth=="function"){let c=await o.auth(e,r);if(c.body){e=c.body;let h=t.headers||{};c.config?.headers&&(h={...h,...c.config.headers},delete h.host,delete c.config.headers),t={...t,...c.config,headers:h}}else e=c}let u={Authorization:`Bearer ${r.apiKey}`,...t?.headers||{}};for(let c in u)(u[c]==="undefined"||["authorization","Authorization"].includes(c)&&u[c]?.includes("undefined"))&&delete u[c];$E(n.configService)&&T5(n.log,s.req.id,{url:String(a),headers:u,body:e});let l=await _5(a,e,{httpsProxy:n.configService.getHttpsProxy(),...t,headers:JSON.parse(JSON.stringify(u))},s,n.log);if(!l.ok){let c=await l.text();n.log.error(`[provider_response_error] Error from provider(${r.name},${e.model}: ${l.status}): ${c}`);let h=uo(`Error from provider(${r.name},${e.model}: ${l.status}): ${c}`,l.status,"provider_response_error");throw h.rawBody=c,h}if(!e.stream&&$E(n.configService)){let c=await l.clone().text();R5(n.log,s.req.id,{status:l.status,headers:Object.fromEntries(l.headers.entries()),body:c})}return l}async function Zx(e,t,r,n,i,o){let s=t;if(!i&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,o));if(!i&&r.transformer?.[e.model]?.use?.length)for(let a of Array.from(r.transformer[e.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,o));return!i&&n.transformResponseIn&&(s=await n.transformResponseIn(s,o)),s}function Xx(e,t,r,n){if(e.ok||t.code(e.status),r.stream===!0){if(t.header("Content-Type","text/event-stream"),t.header("Cache-Control","no-cache"),t.header("Connection","keep-alive"),n&&$E(n.configService)){let[i,o]=e.body.tee(),s=k5(n.configService);return Q5(i,n.log,t.request.id,s),t.send(o)}return t.send(e.body)}else return e.json()}var jw=async e=>{e.get("/",async()=>({message:"LLMs API",version:N5})),e.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()})),e.get("/providers/health",async()=>({states:Za().getAllStates().map(r=>({provider:r.provider,model:r.model,status:r.status,failureCount:r.failureCount,successCount:r.successCount,lastFailureTime:r.lastFailureTime,lastError:r.lastError})),timestamp:new Date().toISOString()}));let t=e.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of t)r.endPoint&&e.post(r.endPoint,async(n,i)=>$5(n,i,e,r));e.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(r,n)=>{let{name:i,baseUrl:o,apiKey:s,models:a}=r.body;if(!i?.trim())throw uo("Provider name is required",400,"invalid_request");if(!o||!G5(o))throw uo("Valid base URL is required",400,"invalid_request");if(!s?.trim())throw uo("API key is required",400,"invalid_request");if(!a||!Array.isArray(a)||a.length===0)throw uo("At least one model is required",400,"invalid_request");if(e.providerService.getProvider(r.body.name))throw uo(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return e.providerService.registerProvider(r.body)}),e.get("/providers",async()=>e.providerService.getProviders()),e.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let n=e.providerService.getProvider(r.params.id);if(!n)throw uo("Provider not found",404,"provider_not_found");return n}),e.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(r,n)=>{let i=e.providerService.updateProvider(r.params.id,r.body);if(!i)throw uo("Provider not found",404,"provider_not_found");return i}),e.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!e.providerService.deleteProvider(r.params.id))throw uo("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),e.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(r,n)=>{if(!e.providerService.toggleProvider(r.params.id,r.body.enabled))throw uo("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function G5(e){try{return new URL(e),!0}catch{return!1}}var $w=class{constructor(e,t,r){this.configService=e,this.transformerService=t,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let e=this.configService.get("providers");if(e&&Array.isArray(e)){this.initializeFromProvidersArray(e);return}}initializeFromProvidersArray(e){e.forEach(t=>{try{if(!t.name||!t.api_base_url||!t.api_key)return;let r={};t.transformer&&Object.keys(t.transformer).forEach(n=>{n==="use"?Array.isArray(t.transformer.use)&&(r.use=t.transformer.use.map(i=>{if(Array.isArray(i)&&typeof i[0]=="string"){let o=this.transformerService.getTransformer(i[0]);if(o)return new o(i[1])}if(typeof i=="string"){let o=this.transformerService.getTransformer(i);return typeof o=="function"?new o:o}}).filter(i=>typeof i<"u")):Array.isArray(t.transformer[n]?.use)&&(r[n]={use:t.transformer[n].use.map(i=>{if(Array.isArray(i)&&typeof i[0]=="string"){let o=this.transformerService.getTransformer(i[0]);if(o)return new o(i[1])}if(typeof i=="string"){let o=this.transformerService.getTransformer(i);return typeof o=="function"?new o:o}}).filter(i=>typeof i<"u")})}),this.registerProvider({name:t.name,baseUrl:t.api_base_url,apiKey:t.api_key,models:t.models||[],quotaToken:t.quota_token,transformer:t.transformer?r:void 0}),this.logger.info(`${t.name} provider registered`)}catch(r){this.logger.error(`${t.name} provider registered error: ${r}`)}})}registerProvider(e){let t={...e};return this.providers.set(t.name,t),e.models.forEach(r=>{let n=`${t.name},${r}`,i={provider:t.name,model:r,fullModel:n};this.modelRoutes.set(n,i),this.modelRoutes.has(r)||this.modelRoutes.set(r,i)}),t}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}updateProvider(e,t){let r=this.providers.get(e);if(!r)return null;let n={...r,...t,updatedAt:new Date};return this.providers.set(e,n),t.models&&(r.models.forEach(i=>{let o=`${r.name},${i}`;this.modelRoutes.delete(o),this.modelRoutes.delete(i)}),t.models.forEach(i=>{let o=`${r.name},${i}`,s={provider:r.name,model:i,fullModel:o};this.modelRoutes.set(o,s),this.modelRoutes.has(i)||this.modelRoutes.set(i,s)})),n}deleteProvider(e){let t=this.providers.get(e);return t?(t.models.forEach(r=>{let n=`${t.name},${r}`;this.modelRoutes.delete(n),this.modelRoutes.delete(r)}),this.providers.delete(e),!0):!1}toggleProvider(e,t){return!!this.providers.get(e)}resolveModelRoute(e){let t=this.modelRoutes.get(e);if(!t)return null;let r=this.providers.get(t.provider);return r?{provider:r,originalModel:e,targetModel:t.model}:null}getAvailableModelNames(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push(r),e.push(`${t.name},${r}`)})}),e}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(e){return e?Array.isArray(e)?e.reduce((t,r)=>{if(Array.isArray(r)){let[n,i={}]=r;t[n]=i}else t[r]={};return t},{}):e:{}}async getAvailableModels(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push({id:r,object:"model",owned_by:t.name,provider:t.name}),e.push({id:`${t.name},${r}`,object:"model",owned_by:t.name,provider:t.name})})}),{object:"list",data:e}}},Vi=[];for(let e=0;e<256;++e)Vi.push((e+256).toString(16).slice(1));function V5(e,t=0){return(Vi[e[t+0]]+Vi[e[t+1]]+Vi[e[t+2]]+Vi[e[t+3]]+"-"+Vi[e[t+4]]+Vi[e[t+5]]+"-"+Vi[e[t+6]]+Vi[e[t+7]]+"-"+Vi[e[t+8]]+Vi[e[t+9]]+"-"+Vi[e[t+10]]+Vi[e[t+11]]+Vi[e[t+12]]+Vi[e[t+13]]+Vi[e[t+14]]+Vi[e[t+15]]).toLowerCase()}var R0=new Uint8Array(256),y0=R0.length;function Y5(){return y0>R0.length-16&&((0,iU.randomFillSync)(R0),y0=0),R0.slice(y0,y0+=16)}var Hw={randomUUID:sU.randomUUID};function J5(e,t,r){if(Hw.randomUUID&&!t&&!e)return Hw.randomUUID();e=e||{};let n=e.random??e.rng?.()??Y5();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)t[r+i]=n[i];return t}return V5(n)}var Pd=J5,z5=e=>e<=0?"none":e<=1024?"low":e<=8192?"medium":"high",W5=(e,t)=>(e.includes("base64")&&(e=e.split("base64").pop(),e.startsWith(",")&&(e=e.slice(1))),`data:${t};base64,${e}`),K5=class{constructor(e){this.options=e,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(e,t){let r={};return this.useBearer?(r.authorization=`Bearer ${t.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=t.apiKey,r.authorization=void 0),{body:e,config:{headers:r}}}async transformRequestOut(e){let t=[];if(e.system){if(typeof e.system=="string")t.push({role:"system",content:e.system});else if(Array.isArray(e.system)&&e.system.length){let n=e.system.filter(i=>i.type==="text"&&i.text).map(i=>({type:"text",text:i.text,cache_control:i.cache_control}));t.push({role:"system",content:n})}}JSON.parse(JSON.stringify(e.messages||[]))?.forEach(n=>{if(n.role==="user"||n.role==="assistant"){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});return}if(Array.isArray(n.content)){if(n.role==="user"){let i=n.content.filter(s=>s.type==="tool_result"&&s.tool_use_id);i.length&&i.forEach(s=>{let a={role:"tool",content:typeof s.content=="string"?s.content:JSON.stringify(s.content),tool_call_id:s.tool_use_id,cache_control:s.cache_control};t.push(a)});let o=n.content.filter(s=>s.type==="text"&&s.text||s.type==="image"&&s.source);o.length&&t.push({role:"user",content:o.map(s=>s?.type==="image"?{type:"image_url",image_url:{url:s.source?.type==="base64"?W5(s.source.data,s.source.media_type):s.source.url},media_type:s.source.media_type}:s)})}else if(n.role==="assistant"){let i={role:"assistant",content:""},o=n.content.filter(u=>u.type==="text"&&u.text);o.length&&(i.content=o.map(u=>u.text).join(`
|
|
936
|
+
`);s=l.pop()||"";for(let c of l)c.trim()&&(o<n.maxStreamChunks?Pw(t,r,o,c):o===n.maxStreamChunks&&t.info({debug_log:!0,reqId:r,phase:"provider_stream_chunk_omitted",message:`[chunks after #${o} omitted, maxStreamChunks=${n.maxStreamChunks}]`}),o++)}s.trim()&&(o<n.maxStreamChunks&&Pw(t,r,o,s.trim()),o++),Mw(t,r,o)}catch(s){console.error(`[debug_log] Error reading debug stream for reqId=${r}:`,s),Mw(t,r,o)}finally{i.releaseLock()}})()}var N5="2.0.94";eA();var zx=new Map,O5=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],L5=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],P5=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function qy(e,t,r){let n=a=>{if(r instanceof Headers)return r.get(a);let u=Object.keys(r).find(l=>l.toLowerCase()===a);return u?r[u]:null},i=uE(n,O5),o=uE(n,L5),s=uE(n,P5);(i||o||s)&&zx.set(e,{provider:e,remaining:Uw(i),limit:Uw(o),reset:U5(s),capturedAt:Date.now()})}function M5(){return Array.from(zx.values())}function uE(e,t){for(let r of t){let n=e(r);if(n)return n}return null}function Uw(e){if(!e)return null;let t=Number(e.trim().replace(/,/g,""));return Number.isFinite(t)?t:null}function U5(e){if(!e)return null;let t=e.trim();if(!t)return null;let r=Number(t);if(Number.isFinite(r))return r>1e12?Math.floor(r/1e3):r>1e9?Math.floor(r):Math.floor(Date.now()/1e3+r);let n=Date.parse(t);if(Number.isFinite(n))return Math.floor(n/1e3);let i=j5(t);return i===null?null:Math.floor((Date.now()+i)/1e3)}function j5(e){let t=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,r=0,n=!1;for(let i of e.matchAll(t)){n=!0;let o=Number(i[1]),s=i[2].toLowerCase();if(Number.isFinite(o))switch(s){case"ms":r+=o;break;case"s":r+=o*1e3;break;case"m":r+=o*60*1e3;break;case"h":r+=o*60*60*1e3;break;case"d":r+=o*24*60*60*1e3;break}}return n?r:null}Ty();async function $5(e,t,r,n){let i=e.body,o=e.provider,s=r.providerService.getProvider(o);if(!s)throw uo(`Provider '${o}' not found`,404,"provider_not_found");try{let{requestBody:a,config:u,bypass:l}=await Wx(i,s,n,e.headers,{req:e}),c=await Kx(a,u,s,r,l,n,{req:e});try{s?.baseUrl&&c?.headers&&qy(o,s.baseUrl,c.headers)}catch{}let h=await Zx(a,c,s,n,l,{req:e});return Xx(h,t,i,r)}catch(a){let u=await H5(e,t,r,n,a);if(u)return u;throw a}}async function H5(e,t,r,n,i){let o=e.scenarioType||"default",s=e.familyFallback,a=e.modelFamily,u=r.configService.get("fallback"),l=Za();if(!r.configService.get("Router")?.enableFallback)return e.log.info("Fallback disabled by configuration, skipping fallback attempts"),null;let c=m=>{let[E,...C]=m.split(","),y=E?.trim(),D=C.join(",").trim();return!y||!D?null:{provider:y,model:D,key:`${y},${D}`}},h=[];if(a){let m=s?.[o];Array.isArray(m)&&m.length>0?h.push({name:`${a}/${o}`,models:m}):e.log.warn(`No ${a} fallback configured for ${o}; will try global ${o} fallback`)}if(Array.isArray(u?.[o])&&u[o].length>0&&h.push({name:`global/${o}`,models:u[o]}),h.length===0)return null;let A=e.provider||"",d=e.body.model||"",f=new Set;A&&d&&(l.recordFailure(A,d,i?.message),f.add(`${A},${d}`),r.recordUsage?.({provider:A,model:d,originalModel:e.originalModel||d,scenarioType:o,modelFamily:e.modelFamily,errorMessage:i?.message||String(i),sessionId:e.usageSessionId||e.id,stream:e.body.stream,inputTokens:e.tokenCount||0}));let p=h.reduce((m,E)=>m+E.models.length,0);e.log.warn(`Request failed for ${o}, trying ${p} fallback models across ${h.length} fallback stage(s)`);for(let m of h){e.log.info(`Trying ${m.name} fallback stage with ${m.models.length} models`);for(let E of m.models){let C=c(E);if(!C){e.log.warn(`Fallback model '${E}' is invalid, skipping`);continue}if(f.has(C.key))continue;f.add(C.key);let y=C.provider,D=C.model;try{if(!l.isAvailable(y,D)){e.log.warn(`Fallback model ${E} unavailable (fail pool), skipping`);continue}e.log.info(`Trying fallback model: ${E}`);let w={...e.body};w.model=D;let v={...e,provider:y,body:w},b=r.providerService.getProvider(y);if(!b){e.log.warn(`Fallback provider '${y}' not found, skipping`);continue}let{requestBody:I,config:B,bypass:S}=await Wx(w,b,n,e.headers,{req:v}),x=await Kx(I,B,b,r,S,n,{req:v});try{b?.baseUrl&&x?.headers&&qy(y,b.baseUrl,x.headers)}catch{}let k=await Zx(I,x,b,n,S,{req:v});return e.log.info(`Fallback model ${E} succeeded`),l.recordSuccess(y,D),A&&d&&(ky().promote(A,d,o,y,D),e.log.info(`Promoted fallback model ${y},${D} for ${A},${d}:${o}`),l.forceOpen(A,d,i?.message),e.log.info(`Marked original model ${A},${d} as unavailable`)),e.provider=y,e.body=w,Xx(k,t,w,r)}catch(w){l.recordFailure(y,D,w.message),e.log.warn(`Fallback model ${C.key} failed: ${w.message}`),r.recordUsage?.({provider:y,model:D,originalModel:e.body.model,scenarioType:o,modelFamily:e.modelFamily,errorMessage:w.message,sessionId:e.usageSessionId||e.id,stream:e.body.stream});continue}}}return e.log.error(`All fallback models failed for ${o}`),null}async function Wx(e,t,r,n,i){let o=JSON.parse(JSON.stringify(e)),s={},a=!1;if(a=q5(t,r,e),a&&(n instanceof Headers?n.delete("content-length"):delete n["content-length"],s.headers=n),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(o);u.body?(o=u.body,s=u.config||{}):o=u}if(!a&&t.transformer?.use?.length)for(let u of t.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(o,t,i);l.body?(o=l.body,s={...s,...l.config}):o=l}if(!a&&t.transformer?.[e.model]?.use?.length)for(let u of t.transformer[e.model].use)!u||typeof u.transformRequestIn!="function"||(o=await u.transformRequestIn(o,t,i));return{requestBody:o,config:s,bypass:a}}function q5(e,t,r){return e.transformer?.use?.length===1&&e.transformer.use[0].name===t.name&&(!e.transformer?.[r.model]?.use.length||e.transformer?.[r.model]?.use.length===1&&e.transformer?.[r.model]?.use[0].name===t.name)}async function Kx(e,t,r,n,i,o,s){let a=t.url||new URL(r.baseUrl);if(!t.TIMEOUT){let c=n.configService.get("API_TIMEOUT_MS");c&&(t.TIMEOUT=typeof c=="string"?parseInt(c,10):c)}if(i&&typeof o.auth=="function"){let c=await o.auth(e,r);if(c.body){e=c.body;let h=t.headers||{};c.config?.headers&&(h={...h,...c.config.headers},delete h.host,delete c.config.headers),t={...t,...c.config,headers:h}}else e=c}let u={Authorization:`Bearer ${r.apiKey}`,...t?.headers||{}};for(let c in u)(u[c]==="undefined"||["authorization","Authorization"].includes(c)&&u[c]?.includes("undefined"))&&delete u[c];$E(n.configService)&&T5(n.log,s.req.id,{url:String(a),headers:u,body:e});let l=await _5(a,e,{httpsProxy:n.configService.getHttpsProxy(),...t,headers:JSON.parse(JSON.stringify(u))},s,n.log);if(!l.ok){let c=await l.text();n.log.error(`[provider_response_error] Error from provider(${r.name},${e.model}: ${l.status}): ${c}`);let h=uo(`Error from provider(${r.name},${e.model}: ${l.status}): ${c}`,l.status,"provider_response_error");throw h.rawBody=c,h}if(!e.stream&&$E(n.configService)){let c=await l.clone().text();R5(n.log,s.req.id,{status:l.status,headers:Object.fromEntries(l.headers.entries()),body:c})}return l}async function Zx(e,t,r,n,i,o){let s=t;if(!i&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,o));if(!i&&r.transformer?.[e.model]?.use?.length)for(let a of Array.from(r.transformer[e.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,o));return!i&&n.transformResponseIn&&(s=await n.transformResponseIn(s,o)),s}function Xx(e,t,r,n){if(e.ok||t.code(e.status),r.stream===!0){if(t.header("Content-Type","text/event-stream"),t.header("Cache-Control","no-cache"),t.header("Connection","keep-alive"),n&&$E(n.configService)){let[i,o]=e.body.tee(),s=k5(n.configService);return Q5(i,n.log,t.request.id,s),t.send(o)}return t.send(e.body)}else return e.json()}var jw=async e=>{e.get("/",async()=>({message:"LLMs API",version:N5})),e.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()})),e.get("/providers/health",async()=>({states:Za().getAllStates().map(r=>({provider:r.provider,model:r.model,status:r.status,failureCount:r.failureCount,successCount:r.successCount,lastFailureTime:r.lastFailureTime,lastError:r.lastError})),timestamp:new Date().toISOString()}));let t=e.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of t)r.endPoint&&e.post(r.endPoint,async(n,i)=>$5(n,i,e,r));e.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(r,n)=>{let{name:i,baseUrl:o,apiKey:s,models:a}=r.body;if(!i?.trim())throw uo("Provider name is required",400,"invalid_request");if(!o||!G5(o))throw uo("Valid base URL is required",400,"invalid_request");if(!s?.trim())throw uo("API key is required",400,"invalid_request");if(!a||!Array.isArray(a)||a.length===0)throw uo("At least one model is required",400,"invalid_request");if(e.providerService.getProvider(r.body.name))throw uo(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return e.providerService.registerProvider(r.body)}),e.get("/providers",async()=>e.providerService.getProviders()),e.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let n=e.providerService.getProvider(r.params.id);if(!n)throw uo("Provider not found",404,"provider_not_found");return n}),e.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(r,n)=>{let i=e.providerService.updateProvider(r.params.id,r.body);if(!i)throw uo("Provider not found",404,"provider_not_found");return i}),e.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!e.providerService.deleteProvider(r.params.id))throw uo("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),e.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(r,n)=>{if(!e.providerService.toggleProvider(r.params.id,r.body.enabled))throw uo("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function G5(e){try{return new URL(e),!0}catch{return!1}}var $w=class{constructor(e,t,r){this.configService=e,this.transformerService=t,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let e=this.configService.get("providers");if(e&&Array.isArray(e)){this.initializeFromProvidersArray(e);return}}initializeFromProvidersArray(e){e.forEach(t=>{try{if(!t.name||!t.api_base_url||!t.api_key)return;let r={};t.transformer&&Object.keys(t.transformer).forEach(n=>{n==="use"?Array.isArray(t.transformer.use)&&(r.use=t.transformer.use.map(i=>{if(Array.isArray(i)&&typeof i[0]=="string"){let o=this.transformerService.getTransformer(i[0]);if(o)return new o(i[1])}if(typeof i=="string"){let o=this.transformerService.getTransformer(i);return typeof o=="function"?new o:o}}).filter(i=>typeof i<"u")):Array.isArray(t.transformer[n]?.use)&&(r[n]={use:t.transformer[n].use.map(i=>{if(Array.isArray(i)&&typeof i[0]=="string"){let o=this.transformerService.getTransformer(i[0]);if(o)return new o(i[1])}if(typeof i=="string"){let o=this.transformerService.getTransformer(i);return typeof o=="function"?new o:o}}).filter(i=>typeof i<"u")})}),this.registerProvider({name:t.name,baseUrl:t.api_base_url,apiKey:t.api_key,models:t.models||[],quotaToken:t.quota_token,transformer:t.transformer?r:void 0}),this.logger.info(`${t.name} provider registered`)}catch(r){this.logger.error(`${t.name} provider registered error: ${r}`)}})}registerProvider(e){let t={...e};return this.providers.set(t.name,t),e.models.forEach(r=>{let n=`${t.name},${r}`,i={provider:t.name,model:r,fullModel:n};this.modelRoutes.set(n,i),this.modelRoutes.has(r)||this.modelRoutes.set(r,i)}),t}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}updateProvider(e,t){let r=this.providers.get(e);if(!r)return null;let n={...r,...t,updatedAt:new Date};return this.providers.set(e,n),t.models&&(r.models.forEach(i=>{let o=`${r.name},${i}`;this.modelRoutes.delete(o),this.modelRoutes.delete(i)}),t.models.forEach(i=>{let o=`${r.name},${i}`,s={provider:r.name,model:i,fullModel:o};this.modelRoutes.set(o,s),this.modelRoutes.has(i)||this.modelRoutes.set(i,s)})),n}deleteProvider(e){let t=this.providers.get(e);return t?(t.models.forEach(r=>{let n=`${t.name},${r}`;this.modelRoutes.delete(n),this.modelRoutes.delete(r)}),this.providers.delete(e),!0):!1}toggleProvider(e,t){return!!this.providers.get(e)}resolveModelRoute(e){let t=this.modelRoutes.get(e);if(!t)return null;let r=this.providers.get(t.provider);return r?{provider:r,originalModel:e,targetModel:t.model}:null}getAvailableModelNames(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push(r),e.push(`${t.name},${r}`)})}),e}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(e){return e?Array.isArray(e)?e.reduce((t,r)=>{if(Array.isArray(r)){let[n,i={}]=r;t[n]=i}else t[r]={};return t},{}):e:{}}async getAvailableModels(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push({id:r,object:"model",owned_by:t.name,provider:t.name}),e.push({id:`${t.name},${r}`,object:"model",owned_by:t.name,provider:t.name})})}),{object:"list",data:e}}},Vi=[];for(let e=0;e<256;++e)Vi.push((e+256).toString(16).slice(1));function V5(e,t=0){return(Vi[e[t+0]]+Vi[e[t+1]]+Vi[e[t+2]]+Vi[e[t+3]]+"-"+Vi[e[t+4]]+Vi[e[t+5]]+"-"+Vi[e[t+6]]+Vi[e[t+7]]+"-"+Vi[e[t+8]]+Vi[e[t+9]]+"-"+Vi[e[t+10]]+Vi[e[t+11]]+Vi[e[t+12]]+Vi[e[t+13]]+Vi[e[t+14]]+Vi[e[t+15]]).toLowerCase()}var R0=new Uint8Array(256),y0=R0.length;function Y5(){return y0>R0.length-16&&((0,iU.randomFillSync)(R0),y0=0),R0.slice(y0,y0+=16)}var Hw={randomUUID:sU.randomUUID};function J5(e,t,r){if(Hw.randomUUID&&!t&&!e)return Hw.randomUUID();e=e||{};let n=e.random??e.rng?.()??Y5();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)t[r+i]=n[i];return t}return V5(n)}var Pd=J5,z5=e=>e<=0?"none":e<=1024?"low":e<=8192?"medium":"high",W5=(e,t)=>(e.includes("base64")&&(e=e.split("base64").pop(),e.startsWith(",")&&(e=e.slice(1))),`data:${t};base64,${e}`),K5=class{constructor(e){this.options=e,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(e,t){let r={};return this.useBearer?(r.authorization=`Bearer ${t.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=t.apiKey,r.authorization=void 0),{body:e,config:{headers:r}}}async transformRequestOut(e){let t=[];if(e.system){if(typeof e.system=="string")t.push({role:"system",content:e.system});else if(Array.isArray(e.system)&&e.system.length){let n=e.system.filter(i=>i.type==="text"&&i.text).map(i=>({type:"text",text:i.text,cache_control:i.cache_control}));t.push({role:"system",content:n})}}JSON.parse(JSON.stringify(e.messages||[]))?.forEach(n=>{if(n.role==="user"||n.role==="assistant"){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});return}if(Array.isArray(n.content)){if(n.role==="user"){let i=n.content.filter(s=>s.type==="tool_result"&&s.tool_use_id);i.length&&i.forEach(s=>{let a={role:"tool",content:typeof s.content=="string"?s.content:JSON.stringify(s.content),tool_call_id:s.tool_use_id,cache_control:s.cache_control};t.push(a)});let o=n.content.filter(s=>s.type==="text"&&s.text||s.type==="image"&&s.source);o.length&&t.push({role:"user",content:o.map(s=>s?.type==="image"?{type:"image_url",image_url:{url:s.source?.type==="base64"?W5(s.source.data,s.source.media_type):s.source.url},media_type:s.source.media_type}:s)})}else if(n.role==="assistant"){let i={role:"assistant",content:""},o=n.content.filter(u=>u.type==="text"&&u.text);o.length&&(i.content=o.map(u=>u.text).join(`
|
|
937
937
|
`));let s=n.content.filter(u=>u.type==="tool_use"&&u.id);s.length&&(i.tool_calls=s.map(u=>({id:u.id,type:"function",function:{name:u.name,arguments:JSON.stringify(u.input||{})}})));let a=n.content.find(u=>u.type==="thinking");a&&(i.thinking={content:a.thinking,signature:a.signature}),t.push(i)}return}}});let r={messages:t,model:e.model,max_tokens:e.max_tokens,temperature:e.temperature,stream:e.stream,tools:e.tools?.length?this.convertAnthropicToolsToUnified(e.tools):void 0,tool_choice:e.tool_choice};return e.thinking&&(r.reasoning={effort:z5(e.thinking.budget_tokens),enabled:e.thinking.type==="enabled"}),e.tool_choice&&(e.tool_choice.type==="tool"?r.tool_choice={type:"function",function:{name:e.tool_choice.name}}:r.tool_choice=e.tool_choice.type),r}async transformResponseIn(e,t){if(e.headers.get("Content-Type")?.includes("text/event-stream")){if(!e.body)throw new Error("Stream response body is null");let r=await this.convertOpenAIStreamToAnthropic(e.body,t);return new Response(r,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let r=await e.json(),n=this.convertOpenAIResponseToAnthropic(r,t);return new Response(JSON.stringify(n),{headers:{"Content-Type":"application/json"}})}}convertAnthropicToolsToUnified(e){return e.map(t=>({type:"function",function:{name:t.name,description:t.description||"",parameters:t.input_schema}}))}async convertOpenAIStreamToAnthropic(e,t){return new ReadableStream({start:async r=>{let n=new TextEncoder,i=`msg_${Date.now()}`,o=null,s="unknown",a=!1,u=!1,l=!1,c=new Map,h=new Map,A=0,d=0,f=0,p=!1,m=!1,E=0,C=-1,y=()=>{let b=E;return E++,b},D=b=>{if(!p)try{r.enqueue(b);let I=new TextDecoder().decode(b);this.logger.debug({reqId:t.req.id,data:I,type:"send data"})}catch(I){if(I instanceof TypeError&&I.message.includes("Controller is already closed"))p=!0;else throw this.logger.debug({reqId:t.req.id,error:I instanceof Error?I.message:String(I),type:"send data error"}),I}},w=()=>{if(!p)try{if(C>=0){let I={type:"content_block_stop",index:C};D(n.encode(`event: content_block_stop
|
|
938
938
|
data: ${JSON.stringify(I)}
|
|
939
939
|
|
|
@@ -1240,7 +1240,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
|
|
|
1240
1240
|
|
|
1241
1241
|
Do not attempt to describe or analyze the image directly yourself.
|
|
1242
1242
|
Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
|
|
1243
|
-
Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(i=>i.role==="user"&&Array.isArray(i.content)&&i.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(s=>s.type==="image"))),n=1;r.forEach(i=>{Array.isArray(i.content)&&i.content.forEach(o=>{o.type==="image"?(b0.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(s=>s.type==="image")&&(b0.storeImage(`${e.id}_Image#${n}`,o.content[0].source),o.content=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++)})})}},EH=new mH,yH=class{agents=new Map;registerAgent(e){this.agents.set(e.name,e)}getAgent(e){return this.agents.get(e)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let e=[];for(let t of this.agents.values())e.push(...t.tools.values());return e}},C_=new yH;C_.registerAgent(EH);var yE=C_,DH=require("node:events"),DB=require("node:perf_hooks"),CH=HM(),bH=CH.getHealthStore,CB=new DH.EventEmitter;function DE(e){if(e.usageSessionId)return e.usageSessionId;try{let n=e.body?.metadata?.user_id;if(n&&typeof n=="string")try{let i=JSON.parse(n);if(i.session_id)return e.usageSessionId=i.session_id,e.usageSessionId}catch{let i=n.match(/_session_([a-f0-9-]+)/i);if(i)return e.usageSessionId=i[1],e.usageSessionId}}catch{}let t=e.headers?.["x-request-id"],r=Array.isArray(t)?t[0]:t;return e.usageSessionId=e.sessionId||(typeof r=="string"?r:void 0)||e.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.usageSessionId}function CE(e){return e.body?.model?Array.isArray(e.body.model)?e.body.model.join(","):e.body.model:Array.isArray(e.model)?e.model.join(","):e.model||""}async function wH(){let e=(0,Bv.homedir)(),t=(0,Iv.join)(e,".claude.json");if(!(0,qM.existsSync)(t)){let r={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,GM.writeFile)(t,JSON.stringify(r,null,2))}}async function BH(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:i,enabled:o=!1,options:s={}}=n;switch(i){case"token-speed":qE.registerPlugin(g_,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:console.warn(`Unknown plugin: ${i}`);break}}await qE.enablePlugins(e)}async function b_(e={}){await wH(),await xy();let t=await vv(),r=t.Providers||t.providers||[],n=r&&r.length>0,i=t.HOST||"127.0.0.1";n?(i=t.HOST,t.APIKEY||(i="127.0.0.1")):(i="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,s=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=A=>(A>9?"":"0")+A,u=(A,d)=>{let f;A?typeof A=="number"?f=new Date(A):f=A:f=new Date;let p=f.getFullYear()+""+a(f.getMonth()+1),m=a(f.getDate()),E=a(f.getHours()),C=a(f.getMinutes());return`./logs/ccr-${p}${m}${E}${C}${a(f.getSeconds())}${d?`_${d}`:""}.log`},l;e.logger!==void 0?l=e.logger:t.LOG!==!1?(t.LOG===void 0&&(t.LOG=!0),l={level:t.LOG_LEVEL||"debug",stream:lH(u,{path:pE.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,pE.listPresets)(),h=await z7({jsonPath:pE.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:i,PORT:s,LOG_FILE:(0,Iv.join)((0,Bv.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return h.recordUsage=A=>{try{fB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:A.sessionId||"",provider:A.provider||"",originalModel:A.originalModel||"",model:A.model||"",modelFamily:A.modelFamily||"",scenarioType:A.scenarioType||"default",stream:A.stream??!1,inputTokens:A.inputTokens||0,outputTokens:0,cacheReadInputTokens:A.cacheReadInputTokens||0,cacheCreationInputTokens:A.cacheCreationInputTokens||0,ttft:null,tokensPerSecond:null,durationMs:0,status:"error",errorMessage:A.errorMessage,responseBody:void 0})}catch(d){console.error("Fallback usage tracking error:",d)}},await Promise.allSettled(c.map(async A=>await h.registerNamespace(`/preset/${A.name}`,A.config))),await BH(h,t),h.addHook("onRequest",async A=>{new URL(`http://127.0.0.1${A.url}`).pathname.endsWith("/v1/messages")&&!A.requestStartTime&&(A.requestStartTime=DB.performance.now())}),h.addHook("preHandler",async(A,d)=>{if(new URL(`http://127.0.0.1${A.url}`).pathname.endsWith("/v1/messages")){let f=DE(A);Yc.put(f,{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0})}}),h.addHook("preHandler",async(A,d)=>new Promise((f,p)=>{let m=E=>{E?p(E):f()};W7(t)(A,d,m).catch(p)})),h.addHook("preHandler",async(A,d)=>{let f=new URL(`http://127.0.0.1${A.url}`);A.pathname=f.pathname,A.pathname.endsWith("/v1/messages")&&A.pathname!=="/v1/messages"&&(A.preset=A.pathname.replace("/v1/messages","").replace("/",""))}),h.addHook("preHandler",async(A,d)=>{if(A.pathname.endsWith("/v1/messages")){let f=[];for(let p of yE.getAllAgents())p.shouldHandle(A,t)&&(f.push(p.name),p.reqHandler(A,t),p.tools.size&&(A.body?.tools?.length||(A.body.tools=[]),A.body.tools.unshift(...Array.from(p.tools.values()).map(m=>({name:m.name,description:m.description,input_schema:m.input_schema})))));f.length&&(A.agents=f)}}),h.addHook("onError",async(A,d,f)=>{A.errorMessage=f?.message||f?.toString?.()||"Unknown error",CB.emit("onError",A,d,f)}),h.addHook("onSend",(A,d,f,p)=>{if(A.pathname?.endsWith("/v1/messages")){let m=DE(A);if(f instanceof ReadableStream){if(A.agents){let y=new AbortController,D=f.pipeThrough(new EE),w,v=-1,b="",I="",B="",S=[],x=[];return p(null,hH(D,async(k,R)=>{try{if(k.event==="content_block_start"&&k?.data?.content_block?.name){let O=A.agents.find(T=>yE.getAgent(T)?.tools.get(k.data.content_block.name));if(O){w=yE.getAgent(O),v=k.data.index,b=k.data.content_block.name,B=k.data.content_block.id;return}}if(v>-1&&k.data.index===v&&k.data?.delta?.type==="input_json_delta"){I+=k.data?.delta?.partial_json;return}if(v>-1&&k.data.index===v&&k.data.type==="content_block_stop"){try{let O=dH.default.parse(I);x.push({type:"tool_use",id:B,name:b,input:O});let T=await w?.tools.get(b)?.handler(O,{req:A,config:t});S.push({tool_use_id:B,type:"tool_result",content:T}),w=void 0,v=-1,b="",I="",B=""}catch(O){console.log(O)}return}if(k.event==="message_delta"&&S.length){A.body.messages.push({role:"assistant",content:x}),A.body.messages.push({role:"user",content:S});let O=await fetch(`http://127.0.0.1:${t.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":t.APIKEY,"content-type":"application/json"},body:JSON.stringify(A.body)});if(!O.ok)return;let T=O.body.pipeThrough(new EE).getReader();for(;;)try{let{value:Q,done:j}=await T.read();if(j)break;let Y=Q;if(["message_start","message_stop"].includes(Y.event))continue;if(!R.desiredSize)break;R.enqueue(Y)}catch(Q){if(Q.name==="AbortError"||Q.code==="ERR_STREAM_PREMATURE_CLOSE"){y.abort();break}throw Q}return}return k}catch(O){if(console.error("Unexpected error in stream processing:",O),O.code==="ERR_STREAM_PREMATURE_CLOSE"){y.abort();return}throw O}}).pipeThrough(new cH))}let[E,C]=f.tee();return(async y=>{let D=y.pipeThrough(new TextDecoderStream).pipeThrough(new EE).getReader();try{for(;;){let{done:w,value:v}=await D.read();if(w)break;let b=v.event,I=v.data;if(I?.usage){let B=Yc.get(m)||{},S={...b==="message_start"?{}:B,...I.usage};(I.usage.cache_read_input_tokens||I.usage.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:I.usage.cache_read_input_tokens,cache_creation:I.usage.cache_creation_input_tokens}),Yc.put(m,S)}}}catch(w){w.name==="AbortError"||w.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",w)}finally{D.releaseLock()}})(C),p(null,E)}if(Yc.put(m,f.usage),typeof f=="object")return f.error?p(f.error,null):p(f,null)}if(typeof f=="object"&&f.error)return p(f.error,null);p(null,f)}),h.addHook("onSend",async(A,d,f)=>{if(CB.emit("onSend",A,d,f),d.statusCode>=400&&A.pathname?.endsWith("/v1/messages"))try{typeof f=="string"?A.errorResponseBody=f:f&&typeof f=="object"&&(A.errorResponseBody=JSON.stringify(f))}catch{}return f}),h.addHook("onResponse",async(A,d)=>{if(A.pathname?.endsWith("/v1/messages"))try{let f=DE(A),p=Yc.get(f),m=Y7(f),E=bH(),C,y,D=A.sseError,w=D&&(D.type||D.code||D.message),v=p?.output_tokens&&p.output_tokens>0,b=d.statusCode>=400||w&&!v;if(b){C=A.errorMessage||d.errorMessage||A.error?.message||A.error?.toString?.()||void 0,w&&(C=C||JSON.stringify(D),y=JSON.stringify(D)),y=y||A.errorResponseBody;let I=CE(A);E.recordFailure(A.provider||"",I,C)}else{let I=CE(A);E.recordSuccess(A.provider||"",I)}fB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:f,provider:A.provider||"",originalModel:A.originalModel||A.body?.model||"",model:CE(A),modelFamily:A.modelFamily||"",scenarioType:A.scenarioType||"default",stream:A.body?.stream??!1,inputTokens:p?.input_tokens||A.tokenCount||0,outputTokens:b?0:p?.output_tokens||0,cacheReadInputTokens:p?.cache_read_input_tokens||0,cacheCreationInputTokens:p?.cache_creation_input_tokens||0,ttft:b?null:m.ttft,tokensPerSecond:b?null:m.tokensPerSecond,durationMs:A.requestStartTime?Math.round(DB.performance.now()-A.requestStartTime):0,status:b?"error":"success",errorMessage:C,responseBody:y})}catch(f){console.error("Usage tracking error:",f)}}),process.on("uncaughtException",A=>{h.app.log.error("Uncaught exception:",A)}),process.on("unhandledRejection",(A,d)=>{h.app.log.error("Unhandled rejection at:",d,"reason:",A)}),h}async function IH(){let e=await b_();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===Wy&&IH().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function x_(e){try{let{stdout:t}=await v_("npm view claude-code-router-next version"),r=t.trim();return{hasUpdate:vH(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function __(){try{let{stdout:e,stderr:t}=await v_("npm install -g claude-code-router-next@latest");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function vH(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let i=0;i<Math.max(r.length,n.length);i++){let o=i<r.length?r[i]:0,s=i<n.length?n[i]:0;if(o>s)return 1;if(o<s)return-1}return 0}var B_,I_,v_,S_=s0(()=>{"use strict";B_=require("child_process"),I_=require("util"),v_=(0,I_.promisify)(B_.exec)});var bp,Ky=s0(()=>{bp="2.1.6"});var Xy=Fr(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});var F_=require("child_process"),_H=1024*1024,k_={exec(e,t){let r={maxBuffer:2*_H,windowsHide:!0};(0,F_.exec)(e,r,t)},spawn(e,t,r){return(0,F_.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
|
|
1243
|
+
Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(i=>i.role==="user"&&Array.isArray(i.content)&&i.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(s=>s.type==="image"))),n=1;r.forEach(i=>{Array.isArray(i.content)&&i.content.forEach(o=>{o.type==="image"?(b0.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(s=>s.type==="image")&&(b0.storeImage(`${e.id}_Image#${n}`,o.content[0].source),o.content=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++)})})}},EH=new mH,yH=class{agents=new Map;registerAgent(e){this.agents.set(e.name,e)}getAgent(e){return this.agents.get(e)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let e=[];for(let t of this.agents.values())e.push(...t.tools.values());return e}},C_=new yH;C_.registerAgent(EH);var yE=C_,DH=require("node:events"),DB=require("node:perf_hooks"),CH=HM(),bH=CH.getHealthStore,CB=new DH.EventEmitter;function DE(e){if(e.usageSessionId)return e.usageSessionId;try{let n=e.body?.metadata?.user_id;if(n&&typeof n=="string")try{let i=JSON.parse(n);if(i.session_id)return e.usageSessionId=i.session_id,e.usageSessionId}catch{let i=n.match(/_session_([a-f0-9-]+)/i);if(i)return e.usageSessionId=i[1],e.usageSessionId}}catch{}let t=e.headers?.["x-request-id"],r=Array.isArray(t)?t[0]:t;return e.usageSessionId=e.sessionId||(typeof r=="string"?r:void 0)||e.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.usageSessionId}function CE(e){return e.body?.model?Array.isArray(e.body.model)?e.body.model.join(","):e.body.model:Array.isArray(e.model)?e.model.join(","):e.model||""}async function wH(){let e=(0,Bv.homedir)(),t=(0,Iv.join)(e,".claude.json");if(!(0,qM.existsSync)(t)){let r={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,GM.writeFile)(t,JSON.stringify(r,null,2))}}async function BH(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:i,enabled:o=!1,options:s={}}=n;switch(i){case"token-speed":qE.registerPlugin(g_,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:console.warn(`Unknown plugin: ${i}`);break}}await qE.enablePlugins(e)}async function b_(e={}){await wH(),await xy();let t=await vv(),r=t.Providers||t.providers||[],n=r&&r.length>0,i=t.HOST||"127.0.0.1";n?(i=t.HOST,t.APIKEY||(i="127.0.0.1")):(i="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,s=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=A=>(A>9?"":"0")+A,u=(A,d)=>{let f;A?typeof A=="number"?f=new Date(A):f=A:f=new Date;let p=f.getFullYear()+""+a(f.getMonth()+1),m=a(f.getDate()),E=a(f.getHours()),C=a(f.getMinutes());return`./logs/ccr-${p}${m}${E}${C}${a(f.getSeconds())}${d?`_${d}`:""}.log`},l;e.logger!==void 0?l=e.logger:t.LOG!==!1?(t.LOG===void 0&&(t.LOG=!0),l={level:t.LOG_LEVEL||"debug",stream:lH(u,{path:pE.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,pE.listPresets)(),h=await z7({jsonPath:pE.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:i,PORT:s,LOG_FILE:(0,Iv.join)((0,Bv.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return h.recordUsage=A=>{try{fB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:A.sessionId||"",provider:A.provider||"",originalModel:A.originalModel||"",model:A.model||"",modelFamily:A.modelFamily||"",scenarioType:A.scenarioType||"default",stream:A.stream??!1,inputTokens:A.inputTokens||0,outputTokens:0,cacheReadInputTokens:A.cacheReadInputTokens||0,cacheCreationInputTokens:A.cacheCreationInputTokens||0,ttft:null,tokensPerSecond:null,durationMs:0,status:"error",errorMessage:A.errorMessage,responseBody:void 0})}catch(d){console.error("Fallback usage tracking error:",d)}},await Promise.allSettled(c.map(async A=>await h.registerNamespace(`/preset/${A.name}`,A.config))),await BH(h,t),h.addHook("onRequest",async A=>{new URL(`http://127.0.0.1${A.url}`).pathname.endsWith("/v1/messages")&&!A.requestStartTime&&(A.requestStartTime=DB.performance.now())}),h.addHook("preHandler",async(A,d)=>{if(new URL(`http://127.0.0.1${A.url}`).pathname.endsWith("/v1/messages")){let f=DE(A);Yc.put(f,{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0})}}),h.addHook("preHandler",async(A,d)=>new Promise((f,p)=>{let m=E=>{E?p(E):f()};W7(t)(A,d,m).catch(p)})),h.addHook("preHandler",async(A,d)=>{let f=new URL(`http://127.0.0.1${A.url}`);A.pathname=f.pathname,A.pathname.endsWith("/v1/messages")&&A.pathname!=="/v1/messages"&&(A.preset=A.pathname.replace("/v1/messages","").replace("/",""))}),h.addHook("preHandler",async(A,d)=>{if(A.pathname.endsWith("/v1/messages")){let f=[];for(let p of yE.getAllAgents())p.shouldHandle(A,t)&&(f.push(p.name),p.reqHandler(A,t),p.tools.size&&(A.body?.tools?.length||(A.body.tools=[]),A.body.tools.unshift(...Array.from(p.tools.values()).map(m=>({name:m.name,description:m.description,input_schema:m.input_schema})))));f.length&&(A.agents=f)}}),h.addHook("onError",async(A,d,f)=>{A.errorMessage=f?.message||f?.toString?.()||"Unknown error",CB.emit("onError",A,d,f)}),h.addHook("onSend",(A,d,f,p)=>{if(A.pathname?.endsWith("/v1/messages")){let m=DE(A);if(f instanceof ReadableStream){if(A.agents){let y=new AbortController,D=f.pipeThrough(new EE),w,v=-1,b="",I="",B="",S=[],x=[];return p(null,hH(D,async(k,R)=>{try{if(k.event==="content_block_start"&&k?.data?.content_block?.name){let O=A.agents.find(T=>yE.getAgent(T)?.tools.get(k.data.content_block.name));if(O){w=yE.getAgent(O),v=k.data.index,b=k.data.content_block.name,B=k.data.content_block.id;return}}if(v>-1&&k.data.index===v&&k.data?.delta?.type==="input_json_delta"){I+=k.data?.delta?.partial_json;return}if(v>-1&&k.data.index===v&&k.data.type==="content_block_stop"){try{let O=dH.default.parse(I);x.push({type:"tool_use",id:B,name:b,input:O});let T=await w?.tools.get(b)?.handler(O,{req:A,config:t});S.push({tool_use_id:B,type:"tool_result",content:T}),w=void 0,v=-1,b="",I="",B=""}catch(O){console.log(O)}return}if(k.event==="message_delta"&&S.length){A.body.messages.push({role:"assistant",content:x}),A.body.messages.push({role:"user",content:S});let O=await fetch(`http://127.0.0.1:${t.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":t.APIKEY,"content-type":"application/json"},body:JSON.stringify(A.body)});if(!O.ok)return;let T=O.body.pipeThrough(new EE).getReader();for(;;)try{let{value:Q,done:j}=await T.read();if(j)break;let Y=Q;if(["message_start","message_stop"].includes(Y.event))continue;if(!R.desiredSize)break;R.enqueue(Y)}catch(Q){if(Q.name==="AbortError"||Q.code==="ERR_STREAM_PREMATURE_CLOSE"){y.abort();break}throw Q}return}return k}catch(O){if(console.error("Unexpected error in stream processing:",O),O.code==="ERR_STREAM_PREMATURE_CLOSE"){y.abort();return}throw O}}).pipeThrough(new cH))}let[E,C]=f.tee();return(async y=>{let D=y.pipeThrough(new TextDecoderStream).pipeThrough(new EE).getReader();try{for(;;){let{done:w,value:v}=await D.read();if(w)break;let b=v.event,I=v.data;if(I?.usage){let B=Yc.get(m)||{},S={...b==="message_start"?{}:B,...I.usage};(I.usage.cache_read_input_tokens||I.usage.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:I.usage.cache_read_input_tokens,cache_creation:I.usage.cache_creation_input_tokens}),Yc.put(m,S)}}}catch(w){w.name==="AbortError"||w.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",w)}finally{D.releaseLock()}})(C),p(null,E)}if(Yc.put(m,f.usage),typeof f=="object")return f.error?p(f.error,null):p(f,null)}if(typeof f=="object"&&f.error)return p(f.error,null);p(null,f)}),h.addHook("onSend",async(A,d,f)=>{if(CB.emit("onSend",A,d,f),d.statusCode>=400&&A.pathname?.endsWith("/v1/messages"))try{typeof f=="string"?A.errorResponseBody=f:f&&typeof f=="object"&&(A.errorResponseBody=JSON.stringify(f))}catch{}return f}),h.addHook("onResponse",async(A,d)=>{if(A.pathname?.endsWith("/v1/messages"))try{let f=DE(A),p=Yc.get(f),m=Y7(f),E=bH(),C,y,D=A.sseError,w=D&&(D.type||D.code||D.message),v=p?.output_tokens&&p.output_tokens>0,b=d.statusCode>=400||w&&!v;if(b){C=A.errorMessage||d.errorMessage||A.error?.message||A.error?.toString?.()||void 0,w&&(C=C||JSON.stringify(D),y=JSON.stringify(D)),y=y||A.errorResponseBody;let I=CE(A);E.recordFailure(A.provider||"",I,C)}else{let I=CE(A);E.recordSuccess(A.provider||"",I)}fB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:f,provider:A.provider||"",originalModel:A.originalModel||A.body?.model||"",model:CE(A),modelFamily:A.modelFamily||"",scenarioType:A.scenarioType||"default",stream:A.body?.stream??!1,inputTokens:p?.input_tokens||A.tokenCount||0,outputTokens:b?0:p?.output_tokens||0,cacheReadInputTokens:p?.cache_read_input_tokens||0,cacheCreationInputTokens:p?.cache_creation_input_tokens||0,ttft:b?null:m.ttft,tokensPerSecond:b?null:m.tokensPerSecond,durationMs:A.requestStartTime?Math.round(DB.performance.now()-A.requestStartTime):0,status:b?"error":"success",errorMessage:C,responseBody:y})}catch(f){console.error("Usage tracking error:",f)}}),process.on("uncaughtException",A=>{h.app.log.error("Uncaught exception:",A)}),process.on("unhandledRejection",(A,d)=>{h.app.log.error("Unhandled rejection at:",d,"reason:",A)}),h}async function IH(){let e=await b_();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===Wy&&IH().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function x_(e){try{let{stdout:t}=await v_("npm view claude-code-router-next version"),r=t.trim();return{hasUpdate:vH(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function __(){try{let{stdout:e,stderr:t}=await v_("npm install -g claude-code-router-next@latest");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function vH(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let i=0;i<Math.max(r.length,n.length);i++){let o=i<r.length?r[i]:0,s=i<n.length?n[i]:0;if(o>s)return 1;if(o<s)return-1}return 0}var B_,I_,v_,S_=s0(()=>{"use strict";B_=require("child_process"),I_=require("util"),v_=(0,I_.promisify)(B_.exec)});var bp,Ky=s0(()=>{bp="2.1.7"});var Xy=Fr(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});var F_=require("child_process"),_H=1024*1024,k_={exec(e,t){let r={maxBuffer:2*_H,windowsHide:!0};(0,F_.exec)(e,r,t)},spawn(e,t,r){return(0,F_.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
|
|
1244
1244
|
`,r);n>=0&&(r=n+1)}return r>0?e.substring(r):e},split(e,t){let r=e.trim().split(/\s+/);return r.length>t&&(r[t-1]=r.slice(t-1).join(" ")),r},extractColumns(e,t,r){let n=e.split(/(\r\n|\n|\r)/),i=[];return r||(r=Math.max.apply(null,t)+1),n.forEach(o=>{let s=k_.split(o,r),a=[];t.forEach(u=>{a.push(s[u]||"")}),i.push(a)}),i},parseTable(e){let t=e.split(/(\r\n\r\n|\r\n\n|\n\r\n|\n\n)/).filter(r=>r&&r.trim().length>0).map(r=>r.split(/(\r\n|\n|\r)/).filter(n=>n.trim().length>0));return t.forEach(r=>{for(let n=0;r[n];){let i=r[n];i.startsWith(" ")?(r[n-1]+=i.trimLeft(),r.splice(n,1)):n+=1}}),t.map(r=>{let n={};return r.forEach(i=>{let o=i.indexOf(":"),s=i.slice(0,o).trim();n[s]=i.slice(o+1).trim()}),n})}};Zy.default=k_});var R_=Fr((T_,wp)=>{(function(e,t){"use strict";typeof define=="function"&&define.amd?define(t):typeof wp=="object"&&wp.exports?wp.exports=t():e.log=t()})(T_,function(){"use strict";var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],i={},o=null;function s(f,p){var m=f[p];if(typeof m.bind=="function")return m.bind(f);try{return Function.prototype.bind.call(m,f)}catch{return function(){return Function.prototype.apply.apply(m,[f,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(f){return f==="debug"&&(f="log"),typeof console===t?!1:f==="trace"&&r?a:console[f]!==void 0?s(console,f):console.log!==void 0?s(console,"log"):e}function l(){for(var f=this.getLevel(),p=0;p<n.length;p++){var m=n[p];this[m]=p<f?e:this.methodFactory(m,f,this.name)}if(this.log=this.debug,typeof console===t&&f<this.levels.SILENT)return"No console available for logging"}function c(f){return function(){typeof console!==t&&(l.call(this),this[f].apply(this,arguments))}}function h(f,p,m){return u(f)||c.apply(this,arguments)}function A(f,p){var m=this,E,C,y,D="loglevel";typeof f=="string"?D+=":"+f:typeof f=="symbol"&&(D=void 0);function w(S){var x=(n[S]||"silent").toUpperCase();if(!(typeof window===t||!D)){try{window.localStorage[D]=x;return}catch{}try{window.document.cookie=encodeURIComponent(D)+"="+x+";"}catch{}}}function v(){var S;if(!(typeof window===t||!D)){try{S=window.localStorage[D]}catch{}if(typeof S===t)try{var x=window.document.cookie,k=encodeURIComponent(D),R=x.indexOf(k+"=");R!==-1&&(S=/^([^;]+)/.exec(x.slice(R+k.length+1))[1])}catch{}return m.levels[S]===void 0&&(S=void 0),S}}function b(){if(!(typeof window===t||!D)){try{window.localStorage.removeItem(D)}catch{}try{window.document.cookie=encodeURIComponent(D)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function I(S){var x=S;if(typeof x=="string"&&m.levels[x.toUpperCase()]!==void 0&&(x=m.levels[x.toUpperCase()]),typeof x=="number"&&x>=0&&x<=m.levels.SILENT)return x;throw new TypeError("log.setLevel() called with invalid level: "+S)}m.name=f,m.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},m.methodFactory=p||h,m.getLevel=function(){return y??C??E},m.setLevel=function(S,x){return y=I(S),x!==!1&&w(y),l.call(m)},m.setDefaultLevel=function(S){C=I(S),v()||m.setLevel(S,!1)},m.resetLevel=function(){y=null,b(),l.call(m)},m.enableAll=function(S){m.setLevel(m.levels.TRACE,S)},m.disableAll=function(S){m.setLevel(m.levels.SILENT,S)},m.rebuild=function(){if(o!==m&&(E=I(o.getLevel())),l.call(m),o===m)for(var S in i)i[S].rebuild()},E=I(o?o.getLevel():"WARN");var B=v();B!=null&&(y=I(B)),l.call(m)}o=new A,o.getLogger=function(p){if(typeof p!="symbol"&&typeof p!="string"||p==="")throw new TypeError("You must supply a name when creating a logger.");var m=i[p];return m||(m=i[p]=new A(p,o.methodFactory)),m};var d=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=d),o},o.getLoggers=function(){return i},o.default=o,o})});var eD=Fr(oA=>{"use strict";var SH=oA&&oA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(oA,"__esModule",{value:!0});var FH=SH(R_());oA.default=FH.default});var O_=Fr(Jo=>{"use strict";var kH=Jo&&Jo.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),TH=Jo&&Jo.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Q_=Jo&&Jo.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),i=0;i<n.length;i++)n[i]!=="default"&&kH(r,t,n[i]);return TH(r,t),r}})(),N_=Jo&&Jo.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Jo,"__esModule",{value:!0});var RH=Q_(require("os")),Bp=Q_(require("fs")),Vs=N_(Xy()),QH=N_(eD()),NH=e=>new Promise((t,r)=>{Bp.existsSync(e)?t():Bp.mkdir(e,n=>{n?r(n):t()})}),lh={darwin(e){return new Promise((t,r)=>{Vs.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(n,i,o){if(n)r(n);else{let s=o.toString().trim();if(s){r(new Error(s));return}let a=Vs.default.stripLine(i.toString(),1),u=a.slice(0,a.indexOf(`
|
|
1245
1245
|
`)),l=Vs.default.stripLine(a,1),c=u.indexOf("rxbytes")>=0?10:8,h=Vs.default.extractColumns(l,[0,3,c],10).filter(A=>!!String(A[0]).match(/^(udp|tcp)/)).find(A=>{let d=String(A[1]).match(/\.(\d+)$/);return!!(d&&d[1]===String(e))});h&&h[2].length?t(parseInt(h[2],10)):r(new Error(`pid of port (${e}) not found`))}})})},linux(e){return new Promise((t,r)=>{Vs.default.exec("netstat -tunlp",function(i,o,s){if(i)r(i);else{let a=s.toString().trim();a&&QH.default.warn(a);let u=Vs.default.stripLine(o.toString(),2),l=Vs.default.extractColumns(u,[3,6],7).find(c=>{let h=String(c[0]).match(/:(\d+)$/);return!!(h&&h[1]===String(e))});if(l&&l[1]){let c=l[1].split("/",1)[0];c.length?t(parseInt(c,10)):r(new Error(`pid of port (${e}) not found`))}else r(new Error(`pid of port (${e}) not found`))}})})},win32(e){return new Promise((t,r)=>{Vs.default.exec("netstat -ano",function(n,i,o){if(n)r(n);else{let s=o.toString().trim();if(s){r(new Error(s));return}let a=Vs.default.stripLine(i.toString(),4),u=Vs.default.extractColumns(a,[1,4],5).find(l=>{let c=String(l[0]).match(/:(\d+)$/);return!!(c&&c[1]===String(e))});u&&u[1].length&&parseInt(u[1],10)>0?t(parseInt(u[1],10)):r(new Error(`pid of port (${e}) not found`))}})})},android(e){return new Promise((t,r)=>{let n=RH.tmpdir()+"/.find-process",i=n+"/"+process.pid,o='netstat -tunp >> "'+i+'"';NH(n).then(()=>{Vs.default.exec(o,()=>{Bp.readFile(i,"utf8",(s,a)=>{if(Bp.unlink(i,()=>{}),s)r(s);else{a=Vs.default.stripLine(a,2);let u=Vs.default.extractColumns(a,[3,6],7).find(l=>{let c=String(l[0]).match(/:(\d+)$/);return!!(c&&c[1]===String(e))});if(u&&u[1]){let l=u[1].split("/",1)[0];l.length?t(parseInt(l,10)):r(new Error(`pid of port (${e}) not found`))}else r(new Error(`pid of port (${e}) not found`))}})})})})}};lh.freebsd=lh.darwin;lh.sunos=lh.darwin;function OH(e){let t=process.platform;return new Promise((r,n)=>{if(!(t in lh))return n(new Error(`platform ${t} is unsupported`));let i=lh[t];i(e).then(r,n)})}Jo.default=OH});var M_=Fr(zo=>{"use strict";var LH=zo&&zo.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),PH=zo&&zo.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),MH=zo&&zo.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),i=0;i<n.length;i++)n[i]!=="default"&&LH(r,t,n[i]);return PH(r,t),r}})(),UH=zo&&zo.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(zo,"__esModule",{value:!0});var Ip=MH(require("path")),Hu=UH(Xy());function tD(e,t){return t?e&&e.match?e.match(t)!==null:!1:!0}function L_(e){let t=e.split(Ip.sep),r=t[t.length-1];r&&(t[t.length-1]=r.split(" ")[0]);let n=[];for(let i of t){let o=i.indexOf(" -");if(o>=0){n.push(i.substring(0,o).trim());break}else if(i.endsWith(" ")){n.push(i.trim());break}n.push(i)}return n.join(Ip.sep)}function P_(e){if(process.platform==="darwin"){let t=e.indexOf(".app/");if(t>=0)return Ip.basename(e.substring(0,t))}return Ip.basename(e)}var ql={darwin(e){return new Promise((t,r)=>{let n;"pid"in e&&e.pid!==void 0?n=`ps -p ${e.pid} -ww -o pid,ppid,uid,gid,args`:n="ps ax -ww -o pid,ppid,uid,gid,args",Hu.default.exec(n,function(i,o,s){if(i)"pid"in e&&e.pid!==void 0?t([]):r(i);else{let a=s.toString().trim();if(a){r(new Error(a));return}let u=Hu.default.stripLine(o.toString(),1),c=Hu.default.extractColumns(u,[0,1,2,3,4],5).filter(h=>h[0]&&e.pid!==void 0?h[0]===String(e.pid):h[4]&&e.name?tD(h[4],e.name):!!h[0]).map(h=>{let A=String(h[4]),d=L_(A);return{pid:parseInt(h[0],10),ppid:parseInt(h[1],10),uid:parseInt(h[2],10),gid:parseInt(h[3],10),name:P_(d),bin:d,cmd:h[4]}});e.config.strict&&e.name&&(c=c.filter(h=>h.name===e.name)),t(c)}})})},win32(e){return new Promise((t,r)=>{let n="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",i=[],o=Hu.default.spawn("powershell.exe",["/c",n],{detached:!1,windowsHide:!0});o.stdout.on("data",s=>{i.push(s.toString())}),o.on("error",s=>{r(new Error("Command '"+n+"' failed with reason: "+s.toString()))}),o.on("close",s=>{if(s!==0)return r(new Error("Command '"+n+"' terminated with code: "+s));let a=Hu.default.parseTable(i.join("")).filter(u=>{if(e.pid!==void 0)return u.ProcessId===String(e.pid);if(e.name){let l=u.Name||"";return e.config.strict?l===e.name||l.endsWith(".exe")&&l.slice(0,-4)===e.name:tD(u.CommandLine||l,e.name)}else return!0}).map(u=>({pid:parseInt(u.ProcessId,10),ppid:parseInt(u.ParentProcessId,10),bin:u.ExecutablePath,name:u.Name||"",cmd:u.CommandLine}));t(a)})})},android(e){return new Promise((t,r)=>{Hu.default.exec("ps",function(i,o,s){if(i)e.pid!==void 0?t([]):r(i);else{let a=s.toString().trim();if(a){r(new Error(a));return}let u=Hu.default.stripLine(o.toString(),1),c=Hu.default.extractColumns(u,[0,3],4).filter(h=>h[0]&&e.pid!==void 0?h[0]===String(e.pid):h[1]&&e.name?tD(h[1],e.name):!!h[0]).map(h=>{let A=String(h[1]),d=L_(A);return{pid:parseInt(h[0],10),ppid:0,name:P_(d),bin:d,cmd:h[1]}});e.config.strict&&e.name&&(c=c.filter(h=>h.name===e.name)),t(c)}})})}};ql.linux=ql.darwin;ql.sunos=ql.darwin;ql.freebsd=ql.darwin;function jH(e){let t=process.platform,r=ql[t];return r?r(e):Promise.reject(new Error(`Platform "${t}" is not supported`))}zo.default=jH});var j_=Fr(aA=>{"use strict";var nD=aA&&aA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aA,"__esModule",{value:!0});var $H=nD(O_()),U_=nD(M_()),HH=nD(eD()),rD={port(e,t){return(0,$H.default)(e).then(r=>rD.pid(r,t),()=>[])},pid(e,t){return(0,U_.default)({pid:e,config:t})},name(e,t){return(0,U_.default)({name:e,config:t,skipSelf:!0})}};function qH(e,t,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&HH.default.setLevel(n.logLevel),new Promise((i,o)=>{if(!(e in rD))o(new Error(`do not support find by "${e}"`));else{let s=/^\d+$/.test(String(t));e==="pid"&&!s?o(new Error("pid must be a number")):e==="port"&&!s?o(new Error("port must be a number")):rD[e](t,n).then(i,o)}})}aA.default=qH});var H_=Fr($_=>{"use strict";Object.defineProperty($_,"__esModule",{value:!0})});var q_=Fr(Wo=>{"use strict";var GH=Wo&&Wo.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),VH=Wo&&Wo.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&GH(t,e,r)},YH=Wo&&Wo.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Wo,"__esModule",{value:!0});Wo.default=void 0;var JH=j_();Object.defineProperty(Wo,"default",{enumerable:!0,get:function(){return YH(JH).default}});VH(H_(),Wo)});function V_(){let e=0;(0,hs.existsSync)(Yi.REFERENCE_COUNT_FILE)&&(e=parseInt((0,hs.readFileSync)(Yi.REFERENCE_COUNT_FILE,"utf-8"))||0),e++,(0,hs.writeFileSync)(Yi.REFERENCE_COUNT_FILE,e.toString())}function iD(){let e=0;(0,hs.existsSync)(Yi.REFERENCE_COUNT_FILE)&&(e=parseInt((0,hs.readFileSync)(Yi.REFERENCE_COUNT_FILE,"utf-8"))||0),e=Math.max(0,e-1),(0,hs.writeFileSync)(Yi.REFERENCE_COUNT_FILE,e.toString())}function Y_(){return(0,hs.existsSync)(Yi.REFERENCE_COUNT_FILE)&&parseInt((0,hs.readFileSync)(Yi.REFERENCE_COUNT_FILE,"utf-8"))||0}function Gl(){if(!(0,hs.existsSync)(Yi.PID_FILE))return!1;let e;try{let t=(0,hs.readFileSync)(Yi.PID_FILE,"utf-8");if(e=parseInt(t,10),isNaN(e))return tu(),!1}catch{return!1}try{if(process.platform==="win32"){let t=`tasklist /FI "PID eq ${e}"`;return(0,G_.execSync)(t,{stdio:"pipe"}).toString().includes(e.toString())?!0:(tu(),!1)}else return process.kill(e,0),!0}catch{return tu(),!1}}function tu(){if((0,hs.existsSync)(Yi.PID_FILE))try{require("fs").unlinkSync(Yi.PID_FILE)}catch{}}function J_(){if(!(0,hs.existsSync)(Yi.PID_FILE))return null;try{let e=parseInt((0,hs.readFileSync)(Yi.PID_FILE,"utf-8"));return isNaN(e)?null:e}catch{return null}}async function vp(){let e=J_(),t=await Gl(),n=(await ws()).PORT||3456;return{running:t,pid:e,port:n,endpoint:`http://127.0.0.1:${n}`,pidFile:Yi.PID_FILE,referenceCount:Y_()}}async function z_(){if(Y_()===0){let t=J_();if(t&&await Gl())try{process.kill(t,"SIGTERM")}catch{}}}var hs,Yi,zH,G_,uA=s0(()=>{"use strict";hs=require("fs"),Yi=Zr(oo());qu();zH=Zr(q_()),G_=require("child_process")});var nS={};C1(nS,{backupConfigFile:()=>tS,getSettingsPath:()=>lD,initConfig:()=>WH,initDir:()=>eS,readConfigFile:()=>ws,restartService:()=>uD,run:()=>aD,writeConfigFile:()=>rS});var Ns,W_,Gu,K_,Z_,ui,X_,ch,oD,sD,lA,eS,ws,tS,rS,WH,aD,uD,lD,qu=s0(()=>{"use strict";Ns=Zr(require("node:fs/promises")),W_=Zr(c0()),Gu=Zr(require("node:path")),K_=require("node:crypto"),Z_=Zr(require("node:os")),ui=Zr(oo()),X_=Zr(w_()),ch=require("fs");S_();Ky();oD=require("child_process");uA();sD=e=>{if(typeof e=="string")return e.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g,(t,r,n)=>{let i=r||n;return process.env[i]||t});if(Array.isArray(e))return e.map(sD);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=sD(n);return t}return e},lA=async e=>{try{await Ns.default.access(e)}catch{await Ns.default.mkdir(e,{recursive:!0})}},eS=async()=>{await lA(ui.HOME_DIR),await lA(ui.PLUGINS_DIR),await lA(ui.PRESETS_DIR),await lA(Gu.default.join(ui.HOME_DIR,"logs"))},ws=async()=>{try{let e=await Ns.default.readFile(ui.CONFIG_FILE,"utf-8");try{let t=W_.default.parse(e);return sD(t)}catch(t){console.error(`Failed to parse config file at ${ui.CONFIG_FILE}`),console.error("Error details:",t.message),console.error("Please check your config file syntax."),process.exit(1)}}catch(e){if(e.code==="ENOENT")try{await eS();let t=await tS();t&&console.log(`Backed up existing configuration file to ${t}`);let r={PORT:3456,Providers:[],Router:{}};return await rS(r),console.log("Created minimal default configuration file at ~/.claude-code-router/config.json"),console.log("Please edit this file with your actual configuration."),r}catch(t){console.error("Failed to create default configuration:",t.message),process.exit(1)}else console.error(`Failed to read config file at ${ui.CONFIG_FILE}`),console.error("Error details:",e.message),process.exit(1)}},tS=async()=>{try{if(await Ns.default.access(ui.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=`${ui.CONFIG_FILE}.${e}.bak`;await Ns.default.copyFile(ui.CONFIG_FILE,t);try{let r=Gu.default.dirname(ui.CONFIG_FILE),n=Gu.default.basename(ui.CONFIG_FILE),o=(await Ns.default.readdir(r)).filter(s=>s.startsWith(n)&&s.endsWith(".bak")).sort().reverse();if(o.length>3)for(let s=3;s<o.length;s++){let a=Gu.default.join(r,o[s]);await Ns.default.unlink(a)}}catch(r){console.warn("Failed to clean up old backups:",r)}return t}}catch(e){console.error("Failed to backup config file:",e)}return null},rS=async e=>{await lA(ui.HOME_DIR);let t=`${JSON.stringify(e,null,2)}`;await Ns.default.writeFile(ui.CONFIG_FILE,t)},WH=async()=>{let e=await ws();return Object.assign(process.env,e),e},aD=async(e=[])=>{if(Gl()){console.log("claude-code-router server is running");return}let r=await(0,X_.getServer)(),n=r.app;(0,ch.writeFileSync)(ui.PID_FILE,process.pid.toString()),n.post("/api/update/perform",async()=>await __()),n.get("/api/update/check",async()=>await x_(bp)),n.post("/api/restart",async()=>(setTimeout(async()=>{(0,oD.spawn)("ccr",["restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await r.start()},uD=async()=>{try{let r=parseInt((0,ch.readFileSync)(ui.PID_FILE,"utf-8"));if(process.kill(r),tu(),(0,ch.existsSync)(ui.REFERENCE_COUNT_FILE))try{await Ns.default.unlink(ui.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),tu()}console.log("Starting claude code router service...");let e=Gu.default.join(__dirname,"cli.js"),t=(0,oD.spawn)("node",[e,"start"],{detached:!0,stdio:"ignore"});t.on("error",r=>{throw console.error("Failed to start service:",r),r}),t.unref(),console.log("\u2705 Service started successfully in the background.")},lD=async e=>{let t=(0,K_.createHash)("sha256").update(e,"utf-8").digest("hex"),r=Gu.default.join(Z_.default.tmpdir(),"claude-code-router"),n=`ccr-settings-${t}.json`,i=Gu.default.join(r,n);try{await Ns.default.access(r)}catch{await Ns.default.mkdir(r,{recursive:!0})}try{return await Ns.default.access(i),i}catch{return await Ns.default.writeFile(i,e,"utf-8"),i}}});var hA=Fr((gre,cS)=>{var XH=require("node:tty"),eq=XH?.WriteStream?.prototype?.hasColors?.()??!1,Cn=(e,t)=>{if(!eq)return i=>i;let r=`\x1B[${e}m`,n=`\x1B[${t}m`;return i=>{let o=i+"",s=o.indexOf(n);if(s===-1)return r+o+n;let a=r,u=0,c=(t===22?n:"")+r;for(;s!==-1;)a+=o.slice(u,s)+c,u=s+n.length,s=o.indexOf(n,u);return a+=o.slice(u)+n,a}},mn={};mn.reset=Cn(0,0);mn.bold=Cn(1,22);mn.dim=Cn(2,22);mn.italic=Cn(3,23);mn.underline=Cn(4,24);mn.overline=Cn(53,55);mn.inverse=Cn(7,27);mn.hidden=Cn(8,28);mn.strikethrough=Cn(9,29);mn.black=Cn(30,39);mn.red=Cn(31,39);mn.green=Cn(32,39);mn.yellow=Cn(33,39);mn.blue=Cn(34,39);mn.magenta=Cn(35,39);mn.cyan=Cn(36,39);mn.white=Cn(37,39);mn.gray=Cn(90,39);mn.bgBlack=Cn(40,49);mn.bgRed=Cn(41,49);mn.bgGreen=Cn(42,49);mn.bgYellow=Cn(43,49);mn.bgBlue=Cn(44,49);mn.bgMagenta=Cn(45,49);mn.bgCyan=Cn(46,49);mn.bgWhite=Cn(47,49);mn.bgGray=Cn(100,49);mn.redBright=Cn(91,39);mn.greenBright=Cn(92,39);mn.yellowBright=Cn(93,39);mn.blueBright=Cn(94,39);mn.magentaBright=Cn(95,39);mn.cyanBright=Cn(96,39);mn.whiteBright=Cn(97,39);mn.bgRedBright=Cn(101,49);mn.bgGreenBright=Cn(102,49);mn.bgYellowBright=Cn(103,49);mn.bgBlueBright=Cn(104,49);mn.bgMagentaBright=Cn(105,49);mn.bgCyanBright=Cn(106,49);mn.bgWhiteBright=Cn(107,49);cS.exports=mn});var mS=Fr((Nre,gS)=>{"use strict";gS.exports=uq;function aq(e){let t={defaultWidth:0,output:process.stdout,tty:require("tty")};return e?(Object.keys(t).forEach(function(r){e[r]||(e[r]=t[r])}),e):t}function uq(e){let t=aq(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let r=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(r)&&r!==0)return r}return t.defaultWidth}});var yS=Fr((Ore,ES)=>{"use strict";ES.exports=({onlyFirst:e=!1}={})=>{let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}});var Np=Fr((Lre,DS)=>{"use strict";var lq=yS();DS.exports=e=>typeof e=="string"?e.replace(lq(),""):e});var bS=Fr((Pre,fD)=>{"use strict";var CS=e=>Number.isNaN(e)?!1:e>=4352&&(e<=4447||e===9001||e===9002||11904<=e&&e<=12871&&e!==12351||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141);fD.exports=CS;fD.exports.default=CS});var BS=Fr((Mre,wS)=>{"use strict";wS.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var vS=Fr((Ure,pD)=>{"use strict";var cq=Np(),hq=bS(),dq=BS(),IS=e=>{if(typeof e!="string"||e.length===0||(e=cq(e),e.length===0))return 0;e=e.replace(dq()," ");let t=0;for(let r=0;r<e.length;r++){let n=e.codePointAt(r);n<=31||n>=127&&n<=159||n>=768&&n<=879||(n>65535&&r++,t+=hq(n)?2:1)}return t};pD.exports=IS;pD.exports.default=IS});var _S=Fr((jre,xS)=>{"use strict";xS.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gD=Fr(($re,FS)=>{var dA=_S(),SS={};for(let e of Object.keys(dA))SS[dA[e]]=e;var Gr={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};FS.exports=Gr;for(let e of Object.keys(Gr)){if(!("channels"in Gr[e]))throw new Error("missing channels property: "+e);if(!("labels"in Gr[e]))throw new Error("missing channel labels property: "+e);if(Gr[e].labels.length!==Gr[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=Gr[e];delete Gr[e].channels,delete Gr[e].labels,Object.defineProperty(Gr[e],"channels",{value:t}),Object.defineProperty(Gr[e],"labels",{value:r})}Gr.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(t,r,n),o=Math.max(t,r,n),s=o-i,a,u;o===i?a=0:t===o?a=(r-n)/s:r===o?a=2+(n-t)/s:n===o&&(a=4+(t-r)/s),a=Math.min(a*60,360),a<0&&(a+=360);let l=(i+o)/2;return o===i?u=0:l<=.5?u=s/(o+i):u=s/(2-o-i),[a,u*100,l*100]};Gr.rgb.hsv=function(e){let t,r,n,i,o,s=e[0]/255,a=e[1]/255,u=e[2]/255,l=Math.max(s,a,u),c=l-Math.min(s,a,u),h=function(A){return(l-A)/6/c+1/2};return c===0?(i=0,o=0):(o=c/l,t=h(s),r=h(a),n=h(u),s===l?i=n-r:a===l?i=1/3+t-n:u===l&&(i=2/3+r-t),i<0?i+=1:i>1&&(i-=1)),[i*360,o*100,l*100]};Gr.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=Gr.rgb.hsl(e)[0],o=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[i,o*100,n*100]};Gr.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-r,1-n),o=(1-t-i)/(1-i)||0,s=(1-r-i)/(1-i)||0,a=(1-n-i)/(1-i)||0;return[o*100,s*100,a*100,i*100]};function Aq(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}Gr.rgb.keyword=function(e){let t=SS[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(dA)){let o=dA[i],s=Aq(e,o);s<r&&(r=s,n=i)}return n};Gr.keyword.rgb=function(e){return dA[e]};Gr.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let i=t*.4124+r*.3576+n*.1805,o=t*.2126+r*.7152+n*.0722,s=t*.0193+r*.1192+n*.9505;return[i*100,o*100,s*100]};Gr.rgb.lab=function(e){let t=Gr.rgb.xyz(e),r=t[0],n=t[1],i=t[2];r/=95.047,n/=100,i/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let o=116*n-16,s=500*(r-n),a=200*(n-i);return[o,s,a]};Gr.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i,o,s;if(r===0)return s=n*255,[s,s,s];n<.5?i=n*(1+r):i=n+r-n*r;let a=2*n-i,u=[0,0,0];for(let l=0;l<3;l++)o=t+1/3*-(l-1),o<0&&o++,o>1&&o--,6*o<1?s=a+(i-a)*6*o:2*o<1?s=i:3*o<2?s=a+(i-a)*(2/3-o)*6:s=a,u[l]=s*255;return u};Gr.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=r,o=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,i*=o<=1?o:2-o;let s=(n+r)/2,a=n===0?2*i/(o+i):2*r/(n+r);return[t,a*100,s*100]};Gr.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,o=t-Math.floor(t),s=255*n*(1-r),a=255*n*(1-r*o),u=255*n*(1-r*(1-o));switch(n*=255,i){case 0:return[n,u,s];case 1:return[a,n,s];case 2:return[s,n,u];case 3:return[s,a,n];case 4:return[u,s,n];case 5:return[n,s,a]}};Gr.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=Math.max(n,.01),o,s;s=(2-r)*n;let a=(2-r)*i;return o=r*i,o/=a<=1?a:2-a,o=o||0,s/=2,[t,o*100,s*100]};Gr.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i=r+n,o;i>1&&(r/=i,n/=i);let s=Math.floor(6*t),a=1-n;o=6*t-s,(s&1)!==0&&(o=1-o);let u=r+o*(a-r),l,c,h;switch(s){default:case 6:case 0:l=a,c=u,h=r;break;case 1:l=u,c=a,h=r;break;case 2:l=r,c=a,h=u;break;case 3:l=r,c=u,h=a;break;case 4:l=u,c=r,h=a;break;case 5:l=a,c=r,h=u;break}return[l*255,c*255,h*255]};Gr.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i=e[3]/100,o=1-Math.min(1,t*(1-i)+i),s=1-Math.min(1,r*(1-i)+i),a=1-Math.min(1,n*(1-i)+i);return[o*255,s*255,a*255]};Gr.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i,o,s;return i=t*3.2406+r*-1.5372+n*-.4986,o=t*-.9689+r*1.8758+n*.0415,s=t*.0557+r*-.204+n*1.057,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,i=Math.min(Math.max(0,i),1),o=Math.min(Math.max(0,o),1),s=Math.min(Math.max(0,s),1),[i*255,o*255,s*255]};Gr.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let i=116*r-16,o=500*(t-r),s=200*(r-n);return[i,o,s]};Gr.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],i,o,s;o=(t+16)/116,i=r/500+o,s=o-n/200;let a=o**3,u=i**3,l=s**3;return o=a>.008856?a:(o-16/116)/7.787,i=u>.008856?u:(i-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,i*=95.047,o*=100,s*=108.883,[i,o,s]};Gr.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],i;i=Math.atan2(n,r)*360/2/Math.PI,i<0&&(i+=360);let s=Math.sqrt(r*r+n*n);return[t,s,i]};Gr.lch.lab=function(e){let t=e[0],r=e[1],i=e[2]/360*2*Math.PI,o=r*Math.cos(i),s=r*Math.sin(i);return[t,o,s]};Gr.rgb.ansi16=function(e,t=null){let[r,n,i]=e,o=t===null?Gr.rgb.hsv(e)[2]:t;if(o=Math.round(o/50),o===0)return 30;let s=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return o===2&&(s+=60),s};Gr.hsv.ansi16=function(e){return Gr.rgb.ansi16(Gr.hsv.rgb(e),e[2])};Gr.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};Gr.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,i=(t>>1&1)*r*255,o=(t>>2&1)*r*255;return[n,i,o]};Gr.ansi256.rgb=function(e){if(e>=232){let o=(e-232)*10+8;return[o,o,o]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[r,n,i]};Gr.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Gr.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),i=n>>16&255,o=n>>8&255,s=n&255;return[i,o,s]};Gr.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,r),n),o=Math.min(Math.min(t,r),n),s=i-o,a,u;return s<1?a=o/(1-s):a=0,s<=0?u=0:i===t?u=(r-n)/s%6:i===r?u=2+(n-t)/s:u=4+(t-r)/s,u/=6,u%=1,[u*360,s*100,a*100]};Gr.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),i=0;return n<1&&(i=(r-.5*n)/(1-n)),[e[0],n*100,i*100]};Gr.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,i=0;return n<1&&(i=(r-n)/(1-n)),[e[0],n*100,i*100]};Gr.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let i=[0,0,0],o=t%1*6,s=o%1,a=1-s,u=0;switch(Math.floor(o)){case 0:i[0]=1,i[1]=s,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=s;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=s,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return u=(1-r)*n,[(r*i[0]+u)*255,(r*i[1]+u)*255,(r*i[2]+u)*255]};Gr.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),i=0;return n>0&&(i=t/n),[e[0],i*100,n*100]};Gr.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],i*100,n*100]};Gr.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};Gr.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,i=n-t,o=0;return i<1&&(o=(n-i)/(1-i)),[e[0],i*100,o*100]};Gr.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};Gr.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};Gr.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};Gr.gray.hsl=function(e){return[0,0,e[0]]};Gr.gray.hsv=Gr.gray.hsl;Gr.gray.hwb=function(e){return[0,100,e[0]]};Gr.gray.cmyk=function(e){return[0,0,0,e[0]]};Gr.gray.lab=function(e){return[e[0],0,0]};Gr.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};Gr.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var TS=Fr((Hre,kS)=>{var Op=gD();function fq(){let e={},t=Object.keys(Op);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function pq(e){let t=fq(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys(Op[n]);for(let o=i.length,s=0;s<o;s++){let a=i[s],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function gq(e,t){return function(r){return t(e(r))}}function mq(e,t){let r=[t[e].parent,e],n=Op[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=gq(Op[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}kS.exports=function(e){let t=pq(e),r={},n=Object.keys(t);for(let i=n.length,o=0;o<i;o++){let s=n[o];t[s].parent!==null&&(r[s]=mq(s,t))}return r}});var QS=Fr((qre,RS)=>{var mD=gD(),Eq=TS(),Ah={},yq=Object.keys(mD);function Dq(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function Cq(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let i=e(r);if(typeof i=="object")for(let o=i.length,s=0;s<o;s++)i[s]=Math.round(i[s]);return i};return"conversion"in e&&(t.conversion=e.conversion),t}yq.forEach(e=>{Ah[e]={},Object.defineProperty(Ah[e],"channels",{value:mD[e].channels}),Object.defineProperty(Ah[e],"labels",{value:mD[e].labels});let t=Eq(e);Object.keys(t).forEach(n=>{let i=t[n];Ah[e][n]=Cq(i),Ah[e][n].raw=Dq(i)})});RS.exports=Ah});var US=Fr((Gre,MS)=>{"use strict";var NS=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,OS=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},LS=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},Lp=e=>e,PS=(e,t,r)=>[e,t,r],fh=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},ED,ph=(e,t,r,n)=>{ED===void 0&&(ED=QS());let i=n?10:0,o={};for(let[s,a]of Object.entries(ED)){let u=s==="ansi16"?"ansi":s;s===t?o[u]=e(r,i):typeof a=="object"&&(o[u]=e(a[t],i))}return o};function bq(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[i,o]of Object.entries(n))t[i]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},n[i]=t[i],e.set(o[0],o[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",fh(t.color,"ansi",()=>ph(NS,"ansi16",Lp,!1)),fh(t.color,"ansi256",()=>ph(OS,"ansi256",Lp,!1)),fh(t.color,"ansi16m",()=>ph(LS,"rgb",PS,!1)),fh(t.bgColor,"ansi",()=>ph(NS,"ansi16",Lp,!0)),fh(t.bgColor,"ansi256",()=>ph(OS,"ansi256",Lp,!0)),fh(t.bgColor,"ansi16m",()=>ph(LS,"rgb",PS,!0)),t}Object.defineProperty(MS,"exports",{enumerable:!0,get:bq})});var HS=Fr((Vre,$S)=>{"use strict";var AA=vS(),wq=Np(),Bq=US(),DD=new Set(["\x1B","\x9B"]),Iq=39,jS=e=>`${DD.values().next().value}[${e}m`,vq=e=>e.split(" ").map(t=>AA(t)),yD=(e,t,r)=>{let n=[...t],i=!1,o=AA(wq(e[e.length-1]));for(let[s,a]of n.entries()){let u=AA(a);if(o+u<=r?e[e.length-1]+=a:(e.push(a),o=0),DD.has(a))i=!0;else if(i&&a==="m"){i=!1;continue}i||(o+=u,o===r&&s<n.length-1&&(e.push(""),o=0))}!o&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},xq=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(AA(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},_q=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i="",o,s=vq(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimLeft());let c=AA(a[a.length-1]);if(u!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c>0||r.trim===!1)&&(a[a.length-1]+=" ",c++)),r.hard&&s[u]>t){let h=t-c,A=1+Math.floor((s[u]-h-1)/t);Math.floor((s[u]-1)/t)<A&&a.push(""),yD(a,l,t);continue}if(c+s[u]>t&&c>0&&s[u]>0){if(r.wordWrap===!1&&c<t){yD(a,l,t);continue}a.push("")}if(c+s[u]>t&&r.wordWrap===!1){yD(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(xq)),n=a.join(`
|
|
1246
1246
|
`);for(let[u,l]of[...n].entries()){if(i+=l,DD.has(l)){let h=parseFloat(/\d[^m]*/.exec(n.slice(u,u+4)));o=h===Iq?null:h}let c=Bq.codes.get(Number(o));o&&c&&(n[u+1]===`
|
|
@@ -1305,7 +1305,7 @@ ${Ti}Model names (comma-separated):${hn}`,validate:l=>l.trim()?!0:"At least one
|
|
|
1305
1305
|
${Ti}Do you want to set one of these models in router configuration?${hn}`,default:!1})&&o.length>0){let l=o[0];o.length>1&&(l=await Xo({message:`
|
|
1306
1306
|
${Ti}Select which model to configure:${hn}`,choices:o.map(h=>({name:h,value:h}))}));let c=await Xo({message:`
|
|
1307
1307
|
${Ti}Select configuration type:${hn}`,choices:[{name:"Default Model",value:"default"},{name:"Background Model",value:"background"},{name:"Think Model",value:"think"},{name:"Long Context Model",value:"longContext"},{name:"Web Search Model",value:"webSearch"},{name:"Image Model",value:"image"}]});return{providerName:t,modelName:l,modelType:c}}return null}async function V2(){console.clear();try{let e=j2();$2(e);let t=await FG();if(t==="addModel"){let r=await TG(e);r&&(e=j2(),e.Router[r.modelType]=`${r.providerName},${r.modelName}`,lg(e),console.log(`${_A}\u2713 ${r.modelType} set to ${r.providerName},${r.modelName}${hn}`))}else{let r=await kG(e,t);e.Router[t]=r,lg(e),console.log(`${_A}\u2713 ${t} model updated to: ${r}${hn}`)}$2(e)}catch(e){console.error(`${ug}Error:${hn}`,e.message),process.exit(1)}}var Y2=async()=>{let e=await xp();for(let[t,r]of Object.entries(e))console.log(r===""?`export ${t}=""`:r===void 0?`unset ${t}`:`export ${t}="${r}"`)};qu();Ky();var sc=require("child_process"),ta=Zr(oo()),Nh=Zr(require("fs")),Bg=require("path");var Ws=Zr(require("node:fs/promises")),_h=Zr(require("node:path")),X2=require("child_process"),bC=require("node:os"),au=Zr(oo()),wC=Zr(c0()),J2={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",bright_black:"\x1B[90m",bright_red:"\x1B[91m",bright_green:"\x1B[92m",bright_yellow:"\x1B[93m",bright_blue:"\x1B[94m",bright_magenta:"\x1B[95m",bright_cyan:"\x1B[96m",bright_white:"\x1B[97m",bg_black:"\x1B[40m",bg_red:"\x1B[41m",bg_green:"\x1B[42m",bg_yellow:"\x1B[43m",bg_blue:"\x1B[44m",bg_magenta:"\x1B[45m",bg_cyan:"\x1B[46m",bg_white:"\x1B[47m",bg_bright_black:"\x1B[100m",bg_bright_red:"\x1B[101m",bg_bright_green:"\x1B[102m",bg_bright_yellow:"\x1B[103m",bg_bright_blue:"\x1B[104m",bg_bright_magenta:"\x1B[105m",bg_bright_cyan:"\x1B[106m",bg_bright_white:"\x1B[107m"},NG="\x1B[38;2;";function OG(e){if(e=e.replace(/^#/,"").trim(),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),e.length!==6)return null;let t=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),n=parseInt(e.substring(4,6),16);return isNaN(t)||isNaN(r)||isNaN(n)||t<0||t>255||r<0||r>255||n<0||n>255?null:{r:t,g:r,b:n}}function z2(e){if(J2[e])return J2[e];if(e.startsWith("#")||/^[0-9a-fA-F]{6}$/.test(e)||/^[0-9a-fA-F]{3}$/.test(e)){let t=OG(e);if(t)return`${NG}${t.r};${t.g};${t.b}m`}return""}function CC(e,t){return e.replace(/\{\{(\w+)\}\}/g,(r,n)=>t[n]||"")}async function ek(e,t,r){try{await Ws.default.access(e);let n=require(e);if(typeof n=="function"){let i=n(t,r);return i instanceof Promise?await i:i}if(n.default&&typeof n.default=="function"){let i=n.default(t);return i instanceof Promise?await i:i}return typeof n=="string"?n:n.default&&typeof n.default=="string"?n.default:""}catch(n){return console.error(`Error executing script ${e}:`,n),""}}var tk={modules:[{type:"workDir",icon:"\u{F024B}",text:"{{workDirName}}",color:"bright_blue"},{type:"gitBranch",icon:"\uE725",text:"{{gitBranch}}",color:"bright_magenta"},{type:"model",icon:"\u{F06A9}",text:"{{model}}",color:"bright_cyan"},{type:"contextCircle",icon:"\u25CB",text:"{{contextPercent}}% {{contextUsage}}",color:"#22c55e"},{type:"usage",icon:"\u2191",text:"{{inputTokens}}",color:"bright_green"},{type:"usage",icon:"\u2193",text:"{{outputTokens}}",color:"bright_yellow"},{type:"totalTokens",icon:"\u{1F4CB}",text:"{{totalTokens}}",color:"bright_white"}]},LG={modules:[{type:"workDir",icon:"\u{F024B}",text:"{{workDirName}}",color:"white",background:"bg_bright_blue"},{type:"gitBranch",icon:"\uE725",text:"{{gitBranch}}",color:"white",background:"bg_bright_magenta"},{type:"model",icon:"\u{F06A9}",text:"{{model}}",color:"white",background:"bg_bright_cyan"},{type:"contextCircle",icon:"\u25CB",text:"{{contextPercent}}% {{contextUsage}}",color:"#22c55e",background:"bg_bright_black"},{type:"usage",icon:"\u2191",text:"{{inputTokens}}",color:"white",background:"bg_bright_green"},{type:"usage",icon:"\u2193",text:"{{outputTokens}}",color:"white",background:"bg_bright_yellow"},{type:"totalTokens",icon:"\u{1F4CB}",text:"{{totalTokens}}",color:"white",background:"bg_bright_white"}]},PG={modules:[{type:"workDir",icon:"",text:"{{workDirName}}",color:"bright_blue"},{type:"gitBranch",icon:"",text:"{{gitBranch}}",color:"bright_magenta"},{type:"model",icon:"",text:"{{model}}",color:"bright_cyan"},{type:"contextCircle",icon:"\u25CB",text:"{{contextPercent}}% {{contextUsage}}",color:"#22c55e"},{type:"usage",icon:"\u2191",text:"{{inputTokens}}",color:"bright_green"},{type:"usage",icon:"\u2193",text:"{{outputTokens}}",color:"bright_yellow"}]};function ou(e){if(!Number.isFinite(e)||e<0)return"0";if(e<1e3)return`${Math.round(e)}`;if(e<1e6){let r=e/1e3;return(r%1===0?r.toFixed(0):r.toFixed(1))+"k"}if(e<1e9){let r=e/1e6;return(r%1===0?r.toFixed(0):r.toFixed(1))+"m"}let t=e/1e9;return(t%1===0?t.toFixed(0):t.toFixed(1))+"b"}function MG(e,t){return`${ou(e)} ${ou(t)}`}function rk(e){if(!e||!e.current_usage)return 0;let{current_usage:t}=e;return t.input_tokens+t.cache_creation_input_tokens+t.cache_read_input_tokens}function UG(e){return e?.context_window_size?Math.round(rk(e)/e.context_window_size*100):0}function nk(e){let t=parseInt(e||"0",10);return t>75?"#ef4444":t>50?"#eab308":"#22c55e"}function ik(e){let t=parseInt(e||"0",10);return t<=0||t<20?"\u25CB":t<40?"\u25D4":t<60?"\u25D1":t<80?"\u25D5":"\u25CF"}function jG(e,t=8){let r=Math.round(e/100*t),n=t-r,i="\u25B0".repeat(Math.max(0,r)),o="\u25B1".repeat(Math.max(0,n));return`${i}${o}`}function $G(e){return e<.01?`${(e*100).toFixed(2)}\xA2`:`$${e.toFixed(2)}`}function W2(e){if(Number.isNaN(e))return"";if(e<1e3)return`${e}ms`;if(e<6e4)return`${(e/1e3).toFixed(1)}s`;{let t=Math.floor(e/6e4),r=(e%6e4/1e3).toFixed(0);return Number.isNaN(t)||Number.isNaN(r)?"":`${t}m${r}s`}}async function HG(e){try{let t=_h.default.join((0,bC.tmpdir)(),"claude-code-router");try{await Ws.default.access(t)}catch{return null}let r=_h.default.join(t,`session-${e}.json`);try{await Ws.default.access(r)}catch{return null}let n=await Ws.default.readFile(r,"utf-8"),i=JSON.parse(n),o=K2(i.duration),s=K2(i.timeToFirstToken);return o?{durationMs:o,ttftMs:s,timestamp:i.timestamp||0}:null}catch{return null}}function K2(e){if(typeof e=="number")return e;if(typeof e!="string")return 0;let t=e.trim(),r=t.match(/^([\d.]+)ms$/);if(r)return parseFloat(r[1]);let n=t.match(/^([\d.]+)s$/);if(n)return parseFloat(n[1])*1e3;let i=t.match(/^(\d+)m([\d.]+)s$/);return i?parseInt(i[1])*6e4+parseFloat(i[2])*1e3:0}var Z2=_h.default.join((0,bC.tmpdir)(),"claude-code-router");async function qG(e,t,r){let n=_h.default.join(Z2,`totals-${e}.json`),i=t+r;try{await Ws.default.access(Z2)}catch{return i}let o=0;try{let s=await Ws.default.readFile(n,"utf-8");o=JSON.parse(s).peak||0}catch{}o=Math.max(o,i);try{await Ws.default.writeFile(n,JSON.stringify({peak:o,ts:Date.now()}),"utf-8")}catch{}return o}async function GG(){try{let e=au.CONFIG_FILE;try{await Ws.default.access(e)}catch{return{theme:null,style:"default"}}let t=await Ws.default.readFile(e,"utf-8"),r=wC.default.parse(t);if(r.StatusLine){let n=r.StatusLine.currentStyle||"default";if(r.StatusLine[n]&&r.StatusLine[n].modules)return{theme:r.StatusLine[n],style:n}}}catch{}return{theme:null,style:"default"}}async function VG(e){try{let t=await(0,au.readPresetFile)(e);if(!t)return{theme:null,style:"default"};let r=(0,au.getPresetDir)(e),n=(0,au.loadConfigFromManifest)(t,r);if(n.StatusLine){let i=n.StatusLine.currentStyle||"default";if(n.StatusLine[i]&&n.StatusLine[i].modules)return{theme:n.StatusLine[i],style:i}}}catch{}return{theme:null,style:"default"}}function YG(){if(process.env.USE_SIMPLE_ICONS==="true")return!0;let e=process.env.TERM||"";return!!["dumb","unknown"].includes(e)}function JG(){if(process.env.USE_SIMPLE_ICONS==="true")return!1;let e=["NERD_FONT","NERDFONT","FONT"];for(let i of e){let o=process.env[i];if(o&&(o.includes("Nerd")||o.includes("nerd")))return!0}let t=process.env.TERM_PROGRAM||"";if(["iTerm.app","vscode","Hyper","kitty","alacritty"].includes(t))return!0;let n=process.env.COLORTERM||"";return n.includes("truecolor")||n.includes("24bit")?!0:process.env.USE_SIMPLE_ICONS!=="true"}async function sk(e,t){try{let r=YG(),n=JG(),i=r||!n?PG:tk,o=null,s="default";if(t){let z=await VG(t);o=z.theme,s=z.style}if(!o){let z=await GG();o=z.theme,s=z.style}let a=o||i,u=e.workspace.current_dir,l="";try{l=(0,X2.execSync)("git branch --show-current",{cwd:u,stdio:["pipe","pipe","ignore"]}).toString().trim()}catch{}let h=(await Ws.default.readFile(e.transcript_path,"utf-8")).trim().split(`
|
|
1308
|
-
`),A="",d=0,f=0,p=0,m=0,E=0,C=0,y=0;for(let z=h.length-1;z>=0;z--)try{let U=JSON.parse(h[z]);if(U.type==="assistant"&&U.message.model){if(U.message.usage){let ne=U.message.usage;p+=ne.input_tokens,m+=ne.output_tokens,E+=ne.cache_creation_input_tokens||0,C+=ne.cache_read_input_tokens||0,y+=ne.input_tokens+(ne.cache_read_input_tokens||0)+(ne.cache_creation_input_tokens||0)+ne.output_tokens}A||(A=U.message.model,U.message.usage&&(d=U.message.usage.input_tokens,f=U.message.usage.output_tokens))}}catch{continue}if(!A)try{let z=_h.default.join(u,".claude-code-router","config.json"),U=z;try{await Ws.default.access(z)}catch{U=au.CONFIG_FILE}let ne=await Ws.default.readFile(U,"utf-8"),L=wC.default.parse(ne);if(L.Router&&L.Router.default){let[,G]=L.Router.default.split(",");G&&(A=G.trim())}}catch{}A||(A=e.model.display_name);let D=u.split("/").pop()||"",w=MG(d,f),[v,b]=w.split(" "),I=e.context_window?.current_usage?.output_tokens||0,B=await HG(e.session_id),S=0,x=!1;if(B&&(x=(Date.now()-B.timestamp)/1e3<=3&&I>0,I>0&&B.durationMs>0)){let U=Math.max(B.durationMs-B.ttftMs,100);S=Math.round(I/(U/1e3))}let k=S>0?S.toString():"",R=x?"[Streaming]":"",O="";B?.ttftMs&&(O=W2(B.ttftMs));let T=e.context_window?UG(e.context_window):0,Q=e.context_window?rk(e.context_window):0,j=e.context_window?.context_window_size||0,Y=e.context_window?.total_input_tokens??0,K=e.context_window?.total_output_tokens??0,M=Math.max(p,Y),X=Math.max(m,K),Ee=await qG(e.session_id,M,X),se=e.cost?.total_cost_usd||0,ce=se>0?$G(se):"",ue=e.cost?.total_duration_ms||0,we=ue>0?W2(ue):"",ve=e.cost?.total_lines_added||0,ke=e.cost?.total_lines_removed||0,ee={workDirName:D,gitBranch:l,model:A,inputTokens:v,outputTokens:b,tokenSpeed:k||"0",isStreaming:x?"streaming":"",timeToFirstToken:O,contextPercent:T.toString(),contextBar:jG(T),contextUsedTokens:ou(Q),contextUsage:j?`${ou(Q)}/${ou(j)}`:"",streamingIndicator:R,contextWindowSize:ou(j),totalInputTokens:ou(M),totalOutputTokens:ou(X),totalTokens:ou(Ee),cost:ce||"",duration:we||"",linesAdded:ve.toString(),linesRemoved:ke.toString(),netLines:(ve-ke).toString(),version:e.version||"",sessionId:e.session_id.substring(0,8)};return s==="powerline"?await ZG(a,ee):await zG(a,ee)}catch{return""}}async function zG(e,t){let r=e.modules||tk.modules,n=[];for(let i=0;i<r.length;i++){let o=r[i],s=o.type==="contextCircle"?nk(t.contextPercent):o.color||"",a=s?z2(s):"",u=o.background?z2(o.background):"",l=o.icon||"";o.type==="contextCircle"&&(l=ik(t.contextPercent));let c="";o.type==="script"&&o.scriptPath?c=await ek(o.scriptPath,t,o.options):c=CC(o.text,t);let h="";l&&(h+=`${l} `),h+=c,!(!h||!c)&&n.push(h)}return n.join(" ")}var WG="\uE0B0";function KG(e,t,r,n){let i=` ${e} `;return n!=null?i+` ${WG} `:i}async function ZG(e,t){let r=e.modules||LG.modules,n=[];for(let i=0;i<Math.min(r.length,10);i++){let o=r[i],s=o.type==="contextCircle"?nk(t.contextPercent):o.color||"white",a=o.background||"",u=o.icon||"";o.type==="contextCircle"&&(u=ik(t.contextPercent));let l="";o.type==="script"&&o.scriptPath?l=await ek(o.scriptPath,t):(o.type,l=CC(o.text,t));let c="";if(u&&(c+=`${u} `),c+=l,!c||!l)continue;let h=null;i<r.length-1&&(h=r[i+1].background||null);let d=KG(c,s,a||"bg_bright_blue",h);n.push(d)}return n.join("")}var ea=Zr(require("node:fs")),SA=Zr(require("node:path")),ok=Zr(require("node:os")),xC=Zr(oo()),BC=SA.default.join(ok.default.homedir(),".claude","settings.json"),IC=SA.default.join(xC.HOME_DIR,".statusline-backup.json"),vC=SA.default.join(xC.HOME_DIR,".model-env-backup.json");function hg(){try{let e=ea.default.readFileSync(BC,"utf-8");return JSON.parse(e)}catch{return{}}}function dg(e){let t=SA.default.dirname(BC);ea.default.existsSync(t)||ea.default.mkdirSync(t,{recursive:!0}),ea.default.writeFileSync(BC,JSON.stringify(e,null,2),"utf-8")}function _C(e){if(!e?.StatusLine?.enabled)return;let t=hg();t.statusLine&&t.statusLine.command!=="ccr statusline"&&ea.default.writeFileSync(IC,JSON.stringify(t.statusLine),"utf-8"),t.statusLine={type:"command",command:"ccr statusline",padding:0},dg(t)}function SC(){let e=hg();if(e.statusLine?.command==="ccr statusline"){try{let t=ea.default.readFileSync(IC,"utf-8");e.statusLine=JSON.parse(t),ea.default.unlinkSync(IC)}catch{delete e.statusLine}dg(e)}}function XG(e){let t=e?.Router?.families;return!t||typeof t!="object"?!1:Object.keys(t).length>0}function cg(e){return e?.enableExtendedContext===!0}function FC(e){if(!XG(e))return;let t=e.Router.families,r=hg();r.env||(r.env={});let n=e.PORT||3456,i=e.APIKEY||"test";r.env.ANTHROPIC_BASE_URL=`http://127.0.0.1:${n}`,r.env.ANTHROPIC_AUTH_TOKEN=i;let o={},s=["ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_REASONING_MODEL"],a=!1;for(let A of s)r.env[A]&&!r.env[A].startsWith("ccr-")&&(o[A]=r.env[A],a=!0);a&&ea.default.writeFileSync(vC,JSON.stringify(o),"utf-8");let u=Object.keys(t),l=null;for(let A of u){let d=t[A],f=cg(d)?"[1m]":"",p=`ccr-${A}${f}`;switch(A){case"opus":r.env.ANTHROPIC_DEFAULT_OPUS_MODEL=p,l||(l="opus");break;case"sonnet":r.env.ANTHROPIC_DEFAULT_SONNET_MODEL=p,l||(l="sonnet");break;case"haiku":r.env.ANTHROPIC_DEFAULT_HAIKU_MODEL=p,l||(l="haiku");break}}let c=t.opus?"opus":l;if(c){let A=t[c],d=cg(A)?"[1m]":"";r.env.ANTHROPIC_MODEL=`ccr-${c}${d}`}let h=u.find(A=>t[A]?.think);if(h){let A=t[h],d=cg(A)?"[1m]":"";r.env.ANTHROPIC_REASONING_MODEL=`ccr-${h}${d}`}else if(l){let A=t[l],d=cg(A)?"[1m]":"";r.env.ANTHROPIC_REASONING_MODEL=`ccr-${l}${d}`}dg(r)}function kC(){let e=hg();try{let t=JSON.parse(ea.default.readFileSync(vC,"utf-8"));e.env||(e.env={});for(let[r,n]of Object.entries(t))e.env[r]=n;ea.default.unlinkSync(vC)}catch{if(e.env)for(let t of Object.keys(e.env))typeof e.env[t]=="string"&&e.env[t].startsWith("ccr-")&&delete e.env[t]}dg(e)}var nc={};C1(nc,{applyPresetCli:()=>Fh,exportPresetCli:()=>Ag,handlePresetCommand:()=>gg,installPresetCli:()=>pg});fd(nc,Zr(oo()));qu();var uk=Zr(oo()),Ks="\x1B[0m",eV="\x1B[32m",tV="\x1B[1m\x1B[32m",ak="\x1B[33m",uu="\x1B[1m\x1B[36m";async function Ag(e,t={}){try{console.log(`
|
|
1308
|
+
`),A="",d=0,f=0,p=0,m=0,E=0,C=0,y=0;for(let z=h.length-1;z>=0;z--)try{let U=JSON.parse(h[z]);if(U.type==="assistant"&&U.message.model){if(U.message.usage){let ne=U.message.usage;p+=ne.input_tokens,m+=ne.output_tokens,E+=ne.cache_creation_input_tokens||0,C+=ne.cache_read_input_tokens||0,y+=ne.input_tokens+(ne.cache_read_input_tokens||0)+(ne.cache_creation_input_tokens||0)+ne.output_tokens}A||(A=U.message.model,U.message.usage&&(d=U.message.usage.input_tokens,f=U.message.usage.output_tokens))}}catch{continue}if(!A)try{let z=_h.default.join(u,".claude-code-router","config.json"),U=z;try{await Ws.default.access(z)}catch{U=au.CONFIG_FILE}let ne=await Ws.default.readFile(U,"utf-8"),L=wC.default.parse(ne);if(L.Router&&L.Router.default){let[,G]=L.Router.default.split(",");G&&(A=G.trim())}}catch{}A||(A=e.model.display_name);let D=u.split("/").pop()||"",w=MG(d,f),[v,b]=w.split(" "),I=e.context_window?.current_usage?.output_tokens||0,B=await HG(e.session_id),S=0,x=!1;if(B&&(x=(Date.now()-B.timestamp)/1e3<=3&&I>0,I>0&&B.durationMs>0)){let U=Math.max(B.durationMs-B.ttftMs,100);S=Math.round(I/(U/1e3))}let k=S>0?Math.min(S,999).toString():"",R=x?"[Streaming]":"",O="";B?.ttftMs&&(O=W2(B.ttftMs));let T=e.context_window?UG(e.context_window):0,Q=e.context_window?rk(e.context_window):0,j=e.context_window?.context_window_size||0,Y=e.context_window?.total_input_tokens??0,K=e.context_window?.total_output_tokens??0,M=Math.max(p,Y),X=Math.max(m,K),Ee=await qG(e.session_id,M,X),se=e.cost?.total_cost_usd||0,ce=se>0?$G(se):"",ue=e.cost?.total_duration_ms||0,we=ue>0?W2(ue):"",ve=e.cost?.total_lines_added||0,ke=e.cost?.total_lines_removed||0,ee={workDirName:D,gitBranch:l,model:A,inputTokens:v,outputTokens:b,tokenSpeed:k||"0",isStreaming:x?"streaming":"",timeToFirstToken:O,contextPercent:T.toString(),contextBar:jG(T),contextUsedTokens:ou(Q),contextUsage:j?`${ou(Q)}/${ou(j)}`:"",streamingIndicator:R,contextWindowSize:ou(j),totalInputTokens:ou(M),totalOutputTokens:ou(X),totalTokens:ou(Ee),cost:ce||"",duration:we||"",linesAdded:ve.toString(),linesRemoved:ke.toString(),netLines:(ve-ke).toString(),version:e.version||"",sessionId:e.session_id.substring(0,8)};return s==="powerline"?await ZG(a,ee):await zG(a,ee)}catch{return""}}async function zG(e,t){let r=e.modules||tk.modules,n=[];for(let i=0;i<r.length;i++){let o=r[i],s=o.type==="contextCircle"?nk(t.contextPercent):o.color||"",a=s?z2(s):"",u=o.background?z2(o.background):"",l=o.icon||"";o.type==="contextCircle"&&(l=ik(t.contextPercent));let c="";o.type==="script"&&o.scriptPath?c=await ek(o.scriptPath,t,o.options):c=CC(o.text,t);let h="";l&&(h+=`${l} `),h+=c,!(!h||!c)&&n.push(h)}return n.join(" ")}var WG="\uE0B0";function KG(e,t,r,n){let i=` ${e} `;return n!=null?i+` ${WG} `:i}async function ZG(e,t){let r=e.modules||LG.modules,n=[];for(let i=0;i<Math.min(r.length,10);i++){let o=r[i],s=o.type==="contextCircle"?nk(t.contextPercent):o.color||"white",a=o.background||"",u=o.icon||"";o.type==="contextCircle"&&(u=ik(t.contextPercent));let l="";o.type==="script"&&o.scriptPath?l=await ek(o.scriptPath,t):(o.type,l=CC(o.text,t));let c="";if(u&&(c+=`${u} `),c+=l,!c||!l)continue;let h=null;i<r.length-1&&(h=r[i+1].background||null);let d=KG(c,s,a||"bg_bright_blue",h);n.push(d)}return n.join("")}var ea=Zr(require("node:fs")),SA=Zr(require("node:path")),ok=Zr(require("node:os")),xC=Zr(oo()),BC=SA.default.join(ok.default.homedir(),".claude","settings.json"),IC=SA.default.join(xC.HOME_DIR,".statusline-backup.json"),vC=SA.default.join(xC.HOME_DIR,".model-env-backup.json");function hg(){try{let e=ea.default.readFileSync(BC,"utf-8");return JSON.parse(e)}catch{return{}}}function dg(e){let t=SA.default.dirname(BC);ea.default.existsSync(t)||ea.default.mkdirSync(t,{recursive:!0}),ea.default.writeFileSync(BC,JSON.stringify(e,null,2),"utf-8")}function _C(e){if(!e?.StatusLine?.enabled)return;let t=hg();t.statusLine&&t.statusLine.command!=="ccr statusline"&&ea.default.writeFileSync(IC,JSON.stringify(t.statusLine),"utf-8"),t.statusLine={type:"command",command:"ccr statusline",padding:0},dg(t)}function SC(){let e=hg();if(e.statusLine?.command==="ccr statusline"){try{let t=ea.default.readFileSync(IC,"utf-8");e.statusLine=JSON.parse(t),ea.default.unlinkSync(IC)}catch{delete e.statusLine}dg(e)}}function XG(e){let t=e?.Router?.families;return!t||typeof t!="object"?!1:Object.keys(t).length>0}function cg(e){return e?.enableExtendedContext===!0}function FC(e){if(!XG(e))return;let t=e.Router.families,r=hg();r.env||(r.env={});let n=e.PORT||3456,i=e.APIKEY||"test";r.env.ANTHROPIC_BASE_URL=`http://127.0.0.1:${n}`,r.env.ANTHROPIC_AUTH_TOKEN=i;let o={},s=["ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_REASONING_MODEL"],a=!1;for(let A of s)r.env[A]&&!r.env[A].startsWith("ccr-")&&(o[A]=r.env[A],a=!0);a&&ea.default.writeFileSync(vC,JSON.stringify(o),"utf-8");let u=Object.keys(t),l=null;for(let A of u){let d=t[A],f=cg(d)?"[1m]":"",p=`ccr-${A}${f}`;switch(A){case"opus":r.env.ANTHROPIC_DEFAULT_OPUS_MODEL=p,l||(l="opus");break;case"sonnet":r.env.ANTHROPIC_DEFAULT_SONNET_MODEL=p,l||(l="sonnet");break;case"haiku":r.env.ANTHROPIC_DEFAULT_HAIKU_MODEL=p,l||(l="haiku");break}}let c=t.opus?"opus":l;if(c){let A=t[c],d=cg(A)?"[1m]":"";r.env.ANTHROPIC_MODEL=`ccr-${c}${d}`}let h=u.find(A=>t[A]?.think);if(h){let A=t[h],d=cg(A)?"[1m]":"";r.env.ANTHROPIC_REASONING_MODEL=`ccr-${h}${d}`}else if(l){let A=t[l],d=cg(A)?"[1m]":"";r.env.ANTHROPIC_REASONING_MODEL=`ccr-${l}${d}`}dg(r)}function kC(){let e=hg();try{let t=JSON.parse(ea.default.readFileSync(vC,"utf-8"));e.env||(e.env={});for(let[r,n]of Object.entries(t))e.env[r]=n;ea.default.unlinkSync(vC)}catch{if(e.env)for(let t of Object.keys(e.env))typeof e.env[t]=="string"&&e.env[t].startsWith("ccr-")&&delete e.env[t]}dg(e)}var nc={};C1(nc,{applyPresetCli:()=>Fh,exportPresetCli:()=>Ag,handlePresetCommand:()=>gg,installPresetCli:()=>pg});fd(nc,Zr(oo()));qu();var uk=Zr(oo()),Ks="\x1B[0m",eV="\x1B[32m",tV="\x1B[1m\x1B[32m",ak="\x1B[33m",uu="\x1B[1m\x1B[36m";async function Ag(e,t={}){try{console.log(`
|
|
1309
1309
|
${uu}\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${Ks}`),console.log(`${uu} Preset Export${Ks}`),console.log(`${uu}\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${Ks}
|
|
1310
1310
|
`);let r=await ws();if(!t.description)try{t.description=await Wi({message:"Description (optional):",default:""})}catch{t.description=""}if(!t.author)try{t.author=await Wi({message:"Author (optional):",default:""})}catch{t.author=""}if(!t.tags)try{let i=await Wi({message:"Keywords (comma-separated, optional):",default:""});t.tags=i||""}catch{t.tags=""}let n=await(0,uk.exportPreset)(e,r,t);console.log(`
|
|
1311
1311
|
${tV}\u2713 Preset exported successfully${Ks}
|