@wengine-ai/claude-code-router 2.0.21 → 2.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1014,7 +1014,7 @@ https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys`};var Rn
1014
1014
  ${this.toMarkdown(Xe,Ce+1)}`:`${Be}- ${Xe}`).join(`
1015
1015
  `):typeof te=="object"&&te!==null?Object.entries(te).map(([Xe,Pt])=>typeof Pt=="object"&&Pt!==null?`${Be}${Xe}:
1016
1016
  ${this.toMarkdown(Pt,Ce+1)}`:`${Be}${Xe}: ${Pt}`).join(`
1017
- `):`${Be}${te}`}async output(te,Ce={}){try{let Be=this.formatData(te,Ce);switch(this.config.level||"log"){case"info":console.info(Be);break;case"warn":console.warn(Be);break;case"error":console.error(Be);break;case"debug":console.debug(Be);break;case"log":default:console.log(Be);break}return!0}catch(Be){return console.error("[ConsoleOutputHandler] Output failed:",Be),!1}}}}),dG,Zfe=N(()=>{"use strict";dG=class{type="webhook";config;defaultTimeout=3e4;constructor(te){if(!te.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...te}}buildHeaders(){let te={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(te.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let Ce=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");te.Authorization=`Basic ${Ce}`}break;case"custom":this.config.auth.custom&&(te[this.config.auth.custom.header]=this.config.auth.custom.value);break}return te}buildBody(te,Ce){let{format:Be="json",timestamp:Xe=!0,prefix:Pt,metadata:At}=Ce||{},Ft={data:te};return Xe&&(Ft.timestamp=new Date().toISOString()),Pt&&(Ft.prefix=Pt),At&&Object.keys(At).length>0&&(Ft.metadata=At),Ft}async sendRequest(te,Ce,Be,Xe,Pt){let At=new AbortController,Ft=setTimeout(()=>At.abort(),Pt);try{let Mt=await fetch(te,{method:Ce,headers:Be,body:JSON.stringify(Xe),signal:At.signal});if(clearTimeout(Ft),!Mt.ok)throw new Error(`HTTP ${Mt.status}: ${Mt.statusText}`);return Mt}catch(Mt){throw clearTimeout(Ft),Mt}}delay(te){return new Promise(Ce=>setTimeout(Ce,te))}async sendWithRetry(te,Ce,Be,Xe,Pt,At){let Ft=null;for(let Mt=1;Mt<=At.maxAttempts;Mt++)try{return await this.sendRequest(te,Ce,Be,Xe,Pt)}catch(Wt){if(Ft=Wt,Mt===At.maxAttempts)break;let Kt=At.backoffMs*Math.pow(2,Mt-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${Mt}/${At.maxAttempts}), retrying in ${Kt}ms...`,Wt.message),await this.delay(Kt)}throw Ft}async output(te,Ce={}){let Be=Ce.timeout||this.defaultTimeout;try{let Xe=this.buildHeaders(),Pt=this.buildBody(te,Ce),At=await this.sendWithRetry(this.config.url,this.config.method,Xe,Pt,Be,this.config.retry);return!0}catch(Xe){let Pt=Xe instanceof Error?Xe.message:String(Xe);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${Pt}`),!1;throw new Error(`Webhook output failed: ${Pt}`)}}}}),B$,Nre,ple,fle,Xfe=N(()=>{"use strict";B$=require("fs"),Nre=require("path"),ple=require("os"),fle=class{type="temp-file";config;baseDir;constructor(te={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...te};let Ce=(0,ple.tmpdir)();this.baseDir=(0,Nre.join)(Ce,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,B$.existsSync)(this.baseDir)||(0,B$.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(te){try{let Ce=te.match(/_session_([a-f0-9-]+)/i);return Ce?Ce[1]:null}catch{return null}}getFilePath(te){let Ce=this.config.prefix||"session",Be=this.config.extension?`.${this.config.extension}`:"",Xe;if(this.config.includeTimestamp){let Pt=Date.now();Xe=`${Ce}-${te}-${Pt}${Be}`}else Xe=`${Ce}-${te}${Be}`;return(0,Nre.join)(this.baseDir,Xe)}async output(te,Ce={}){try{let Be=Ce.metadata?.sessionId;if(!Be)return!1;let Xe={...te,timestamp:Date.now(),sessionId:Be},Pt=this.getFilePath(Be);return(0,B$.writeFileSync)(Pt,JSON.stringify(Xe,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),mle,QY,eme=N(()=>{"use strict";Fc(),Zfe(),Xfe(),mle=class{handlers=new Map;defaultOptions={};registerHandler(te,Ce){this.handlers.set(te,Ce)}registerHandlers(te){for(let Ce of te)if(Ce.enabled!==!1)try{let Be=this.createHandler(Ce),Xe=Ce.type+"_"+Date.now();this.registerHandler(Xe,Be)}catch(Be){console.error(`[OutputManager] Failed to register ${Ce.type} handler:`,Be)}}createHandler(te){switch(te.type){case"console":return new Yfe(te.config);case"webhook":return new dG(te.config);case"temp-file":return new fle(te.config);default:throw new Error(`Unknown output handler type: ${te.type}`)}}unregisterHandler(te){return this.handlers.delete(te)}getHandler(te){return this.handlers.get(te)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(te){this.defaultOptions={...this.defaultOptions,...te}}getDefaultOptions(){return{...this.defaultOptions}}async output(te,Ce){let Be={...this.defaultOptions,...Ce},Xe={success:[],failed:[]},Pt=Array.from(this.handlers.entries()).map(async([At,Ft])=>{try{await Ft.output(te,Be)?Xe.success.push(At):Xe.failed.push(At)}catch(Mt){console.error(`[OutputManager] Handler ${At} failed:`,Mt),Xe.failed.push(At)}});return await Promise.all(Pt),Xe}async outputTo(te,Ce,Be){let Xe={...this.defaultOptions,...Be},Pt={success:[],failed:[]},At=te.map(async Ft=>{let Mt=this.handlers.get(Ft);if(!Mt){console.warn(`[OutputManager] Handler ${Ft} not found`),Pt.failed.push(Ft);return}try{await Mt.output(Ce,Xe)?Pt.success.push(Ft):Pt.failed.push(Ft)}catch(Wt){console.error(`[OutputManager] Handler ${Ft} failed:`,Wt),Pt.failed.push(Ft)}});return await Promise.all(At),Pt}async outputToType(te,Ce,Be){let Xe=Array.from(this.handlers.entries()).filter(([Pt,At])=>At.type===te).map(([Pt])=>Pt);return this.outputTo(Xe,Ce,Be)}},QY=new mle}),tme={};R(tme,{ConfigService:()=>yle,ProviderHealthStore:()=>M5,ProviderService:()=>Ore,SSEParserTransform:()=>t9,SSESerializerTransform:()=>j$,TokenizerService:()=>Lve,TransformerService:()=>WD,calculateTokenCount:()=>zs,default:()=>BMe,getHealthStore:()=>Pre,pluginManager:()=>Ff,rewriteStream:()=>MXe,router:()=>Vre,searchProjectBySession:()=>ib,sessionUsageCache:()=>xR,tokenSpeedPlugin:()=>jXe}),g.exports=M(tme);var mve=Q(BFt(),1),hle=Q(OFt(),1),gle=require("fs"),pG=require("path"),rme=LFt(),nme=Q(H(),1),yle=class{config={};options;constructor(te={jsonPath:"./config.json"}){this.options={envPath:te.envPath||".env",jsonPath:te.jsonPath,useEnvFile:!1,useJsonFile:te.useJsonFile!==!1,useEnvironmentVariables:te.useEnvironmentVariables!==!1,...te},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 te=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,pG.join)(process.cwd(),this.options.jsonPath);if((0,gle.existsSync)(te))try{let Ce=(0,gle.readFileSync)(te,"utf-8"),Be=nme.default.parse(Ce);this.config={...this.config,...Be},console.log(`Loaded JSON config from: ${te}`)}catch(Ce){console.warn(`Failed to load JSON config from ${te}:`,Ce)}else console.warn(`JSON config file not found: ${te}`)}loadEnvConfig(){let te=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,pG.join)(process.cwd(),this.options.envPath);if((0,gle.existsSync)(te))try{let Ce=(0,rme.config)({path:te});Ce.parsed&&(this.config={...this.config,...this.parseEnvConfig(Ce.parsed)})}catch(Ce){console.warn(`Failed to load .env config from ${te}:`,Ce)}}loadEnvironmentVariables(){let te=this.parseEnvConfig(process.env);this.config={...this.config,...te}}parseEnvConfig(te){let Ce={};return Object.assign(Ce,te),Ce}isAbsolutePath(te){return te.startsWith("/")||te.includes(":")}get(te,Ce){let Be=this.config[te];return Be!==void 0?Be:Ce}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(te){return this.config[te]!==void 0}set(te,Ce){this.config[te]=Ce}reload(){this.config={},this.loadConfig()}getConfigSummary(){let te=[];return this.options.initialConfig&&te.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&te.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&te.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&te.push("Environment Variables"),`Config sources: ${te.join(", ")}`}};function ZN(te,Ce=500,Be="internal_error",Xe="api_error"){let Pt=new Error(te);return Pt.statusCode=Ce,Pt.code=Be,Pt.type=Xe,Pt}async function L6(te,Ce,Be){Ce.log.error(te);let Xe=te.statusCode||500,Pt={error:{message:te.message+te.stack||"Internal Server Error",type:te.type||"api_error",code:te.code||"internal_error"}};return Be.code(Xe).send(Pt)}var UY=l6t();function ime(te,Ce,Be,Xe,Pt){let At=new Headers({"Content-Type":"application/json"});Be.headers&&Object.entries(Be.headers).forEach(([Kt,sr])=>{sr&&At.set(Kt,sr)});let Ft,Mt=AbortSignal.timeout(Be.TIMEOUT??60*1e3*60);if(Be.signal){let Kt=new AbortController,sr=()=>Kt.abort();Be.signal.addEventListener("abort",sr),Mt.addEventListener("abort",sr),Ft=Kt.signal}else Ft=Mt;let Wt={method:"POST",headers:At,body:JSON.stringify(Ce),signal:Ft};return Be.httpsProxy&&(Wt.dispatcher=new UY.ProxyAgent(new URL(Be.httpsProxy).toString())),Pt?.debug({reqId:Xe.req.id,request:Wt,headers:Object.fromEntries(At.entries()),requestUrl:typeof te=="string"?te:te.toString(),useProxy:Be.httpsProxy},"final request"),fetch(typeof te=="string"?te:te.toString(),Wt)}var Ale="1.0.63",yQ=Q(We(),1),AQ={enabled:!0,failureThreshold:3,probeIntervalMinutes:5,halfOpenSuccessThreshold:2},M5=class{states=new yQ.Map;config;probeTimer;constructor(te){this.config={...AQ,...te}}getKey(te,Ce){return`${te},${Ce}`}recordSuccess(te,Ce){if(!this.config.enabled)return;let Be=this.getKey(te,Ce),Xe=this.states.get(Be);Xe&&(Xe.successCount++,Xe.status==="half-open"?Xe.successCount>=this.config.halfOpenSuccessThreshold&&this.states.delete(Be):Xe.status==="open"&&(Xe.status="half-open",Xe.successCount=1,Xe.failureCount=0))}recordFailure(te,Ce,Be){if(!this.config.enabled)return;let Xe=this.getKey(te,Ce),Pt=this.states.get(Xe);Pt||(Pt={provider:te,model:Ce,status:"closed",failureCount:0,successCount:0,lastFailureTime:0,lastProbeTime:0},this.states.set(Xe,Pt)),Pt.failureCount++,Pt.lastFailureTime=Date.now(),Pt.lastError=Be,Pt.status==="half-open"?(Pt.status="open",Pt.successCount=0,Pt.lastProbeTime=0):Pt.status==="closed"&&Pt.failureCount>=this.config.failureThreshold&&(Pt.status="open",Pt.lastProbeTime=0)}getState(te,Ce){return this.states.get(this.getKey(te,Ce))}isAvailable(te,Ce){if(!this.config.enabled)return!0;let Be=this.getState(te,Ce);return Be?Be.status!=="open":!0}getPriority(te,Ce){if(!this.config.enabled)return 0;let Be=this.getState(te,Ce);if(!Be)return 0;switch(Be.status){case"closed":return 0;case"half-open":return 1;case"open":return 2}}getHealthyModels(){return[]}getFailPoolModels(){let te=[];for(let[Ce,Be]of this.states)Be.status==="open"&&te.push(Ce);return te}getHalfOpenModels(){let te=[];for(let[Ce,Be]of this.states)Be.status==="half-open"&&te.push(Ce);return te}needsProbe(te){return Date.now()-te.lastProbeTime>=this.config.probeIntervalMinutes*60*1e3}markProbeAttempt(te,Ce){let Be=this.getKey(te,Ce),Xe=this.states.get(Be);Xe&&Xe.status==="open"&&(Xe.lastProbeTime=Date.now())}clear(){this.states.clear()}getAllStates(){return Array.from(this.states.values())}stopProbeTimer(){this.probeTimer&&(clearInterval(this.probeTimer),this.probeTimer=void 0)}},O$=null;function Pre(te){return O$||(O$=new M5(te)),O$}async function L$(te,Ce,Be,Xe){let Pt=te.body,At=te.provider,Ft=Be.providerService.getProvider(At);if(!Ft)throw ZN(`Provider '${At}' not found`,404,"provider_not_found");try{let{requestBody:Mt,config:Wt,bypass:Kt}=await vle(Pt,Ft,Xe,te.headers,{req:te}),sr=await ble(Mt,Wt,Ft,Be,Kt,Xe,{req:te}),Yr=await xle(Mt,sr,Ft,Xe,Kt,{req:te});return Bre(Yr,Ce,Pt)}catch(Mt){if(Mt.code==="provider_response_error"){let Wt=await ame(te,Ce,Be,Xe,Mt);if(Wt)return Wt}throw Mt}}async function ame(te,Ce,Be,Xe,Pt){let At=te.scenarioType||"default",Ft=te.familyFallback,Mt=Be.configService.get("fallback"),Wt=Pre(),Kt=[];if(Ft?.[At]?Kt=Ft[At]:Mt?.[At]&&(Kt=Mt[At]),!Array.isArray(Kt)||Kt.length===0)return null;let sr=te.provider||"",Yr=te.body.model||"";Wt.recordFailure(sr,Yr,Pt?.message),te.log.warn(`Request failed for ${te.scenarioType}, trying ${Kt.length} fallback models`);let Wr=Kt.sort((tr,Dr)=>{let[mt,bn]=tr.split(","),[$r,Tr]=Dr.split(",");return Wt.getPriority(mt,bn)-Wt.getPriority($r,Tr)});for(let tr of Wr)try{let[Dr,...mt]=tr.split(","),bn=mt.join(",");if(!Wt.isAvailable(Dr,bn)){te.log.warn(`Fallback model ${tr} unavailable (fail pool), skipping`);continue}te.log.info(`Trying fallback model: ${tr}`);let $r={...te.body};$r.model=bn;let Tr={...te,provider:Dr,body:$r},Rn=Be.providerService.getProvider(Dr);if(!Rn){te.log.warn(`Fallback provider '${Dr}' not found, skipping`);continue}let{requestBody:jr,config:En,bypass:Fi}=await vle($r,Rn,Xe,te.headers,{req:Tr}),no=await ble(jr,En,Rn,Be,Fi,Xe,{req:Tr}),Es=await xle(jr,no,Rn,Xe,Fi,{req:Tr});return te.log.info(`Fallback model ${tr} succeeded`),Wt.recordSuccess(Dr,bn),Bre(Es,Ce,$r)}catch(Dr){let[mt,...bn]=tr.split(","),$r=bn.join(",");Wt.recordFailure(mt,$r,Dr.message),te.log.warn(`Fallback model ${tr} failed: ${Dr.message}`);continue}return te.log.error(`All fallback models failed for ${At}`),null}async function vle(te,Ce,Be,Xe,Pt){let At=JSON.parse(JSON.stringify(te)),Ft={},Mt=!1;if(Mt=JY(Ce,Be,te),Mt&&(Xe instanceof Headers?Xe.delete("content-length"):delete Xe["content-length"],Ft.headers=Xe),!Mt&&typeof Be.transformRequestOut=="function"){let Wt=await Be.transformRequestOut(At);Wt.body?(At=Wt.body,Ft=Wt.config||{}):At=Wt}if(!Mt&&Ce.transformer?.use?.length)for(let Wt of Ce.transformer.use){if(!Wt||typeof Wt.transformRequestIn!="function")continue;let Kt=await Wt.transformRequestIn(At,Ce,Pt);Kt.body?(At=Kt.body,Ft={...Ft,...Kt.config}):At=Kt}if(!Mt&&Ce.transformer?.[te.model]?.use?.length)for(let Wt of Ce.transformer[te.model].use)!Wt||typeof Wt.transformRequestIn!="function"||(At=await Wt.transformRequestIn(At,Ce,Pt));return{requestBody:At,config:Ft,bypass:Mt}}function JY(te,Ce,Be){return te.transformer?.use?.length===1&&te.transformer.use[0].name===Ce.name&&(!te.transformer?.[Be.model]?.use.length||te.transformer?.[Be.model]?.use.length===1&&te.transformer?.[Be.model]?.use[0].name===Ce.name)}async function ble(te,Ce,Be,Xe,Pt,At,Ft){let Mt=Ce.url||new URL(Be.baseUrl);if(Pt&&typeof At.auth=="function"){let sr=await At.auth(te,Be);if(sr.body){te=sr.body;let Yr=Ce.headers||{};sr.config?.headers&&(Yr={...Yr,...sr.config.headers},delete Yr.host,delete sr.config.headers),Ce={...Ce,...sr.config,headers:Yr}}else te=sr}let Wt={Authorization:`Bearer ${Be.apiKey}`,...Ce?.headers||{}};for(let sr in Wt)(Wt[sr]==="undefined"||["authorization","Authorization"].includes(sr)&&Wt[sr]?.includes("undefined"))&&delete Wt[sr];let Kt=await ime(Mt,te,{httpsProxy:Xe.configService.getHttpsProxy(),...Ce,headers:JSON.parse(JSON.stringify(Wt))},Ft,Xe.log);if(!Kt.ok){let sr=await Kt.text();throw Xe.log.error(`[provider_response_error] Error from provider(${Be.name},${te.model}: ${Kt.status}): ${sr}`),ZN(`Error from provider(${Be.name},${te.model}: ${Kt.status}): ${sr}`,Kt.status,"provider_response_error")}return Kt}async function xle(te,Ce,Be,Xe,Pt,At){let Ft=Ce;if(!Pt&&Be.transformer?.use?.length)for(let Mt of Array.from(Be.transformer.use).reverse())!Mt||typeof Mt.transformResponseOut!="function"||(Ft=await Mt.transformResponseOut(Ft,At));if(!Pt&&Be.transformer?.[te.model]?.use?.length)for(let Mt of Array.from(Be.transformer[te.model].use).reverse())!Mt||typeof Mt.transformResponseOut!="function"||(Ft=await Mt.transformResponseOut(Ft,At));return!Pt&&Xe.transformResponseIn&&(Ft=await Xe.transformResponseIn(Ft,At)),Ft}function Bre(te,Ce,Be){return te.ok||Ce.code(te.status),Be.stream===!0?(Ce.header("Content-Type","text/event-stream"),Ce.header("Cache-Control","no-cache"),Ce.header("Connection","keep-alive"),Ce.send(te.body)):te.json()}var fG=async te=>{te.get("/",async()=>({message:"LLMs API",version:Ale})),te.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let Ce=te.transformerService.getTransformersWithEndpoint();for(let{transformer:Be}of Ce)Be.endPoint&&te.post(Be.endPoint,async(Xe,Pt)=>L$(Xe,Pt,te,Be));te.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(Be,Xe)=>{let{name:Pt,baseUrl:At,apiKey:Ft,models:Mt}=Be.body;if(!Pt?.trim())throw ZN("Provider name is required",400,"invalid_request");if(!At||!Cle(At))throw ZN("Valid base URL is required",400,"invalid_request");if(!Ft?.trim())throw ZN("API key is required",400,"invalid_request");if(!Mt||!Array.isArray(Mt)||Mt.length===0)throw ZN("At least one model is required",400,"invalid_request");if(te.providerService.getProvider(Be.body.name))throw ZN(`Provider with name '${Be.body.name}' already exists`,400,"provider_exists");return te.providerService.registerProvider(Be.body)}),te.get("/providers",async()=>te.providerService.getProviders()),te.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async Be=>{let Xe=te.providerService.getProvider(Be.params.id);if(!Xe)throw ZN("Provider not found",404,"provider_not_found");return Xe}),te.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(Be,Xe)=>{let Pt=te.providerService.updateProvider(Be.params.id,Be.body);if(!Pt)throw ZN("Provider not found",404,"provider_not_found");return Pt}),te.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async Be=>{if(!te.providerService.deleteProvider(Be.params.id))throw ZN("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),te.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(Be,Xe)=>{if(!te.providerService.toggleProvider(Be.params.id,Be.body.enabled))throw ZN("Provider not found",404,"provider_not_found");return{message:`Provider ${Be.body.enabled?"enabled":"disabled"} successfully`}})};function Cle(te){try{return new URL(te),!0}catch{return!1}}var Ore=class{constructor(te,Ce,Be){this.configService=te,this.transformerService=Ce,this.logger=Be,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let te=this.configService.get("providers");if(te&&Array.isArray(te)){this.initializeFromProvidersArray(te);return}}initializeFromProvidersArray(te){te.forEach(Ce=>{try{if(!Ce.name||!Ce.api_base_url||!Ce.api_key)return;let Be={};Ce.transformer&&Object.keys(Ce.transformer).forEach(Xe=>{Xe==="use"?Array.isArray(Ce.transformer.use)&&(Be.use=Ce.transformer.use.map(Pt=>{if(Array.isArray(Pt)&&typeof Pt[0]=="string"){let At=this.transformerService.getTransformer(Pt[0]);if(At)return new At(Pt[1])}if(typeof Pt=="string"){let At=this.transformerService.getTransformer(Pt);return typeof At=="function"?new At:At}}).filter(Pt=>typeof Pt<"u")):Array.isArray(Ce.transformer[Xe]?.use)&&(Be[Xe]={use:Ce.transformer[Xe].use.map(Pt=>{if(Array.isArray(Pt)&&typeof Pt[0]=="string"){let At=this.transformerService.getTransformer(Pt[0]);if(At)return new At(Pt[1])}if(typeof Pt=="string"){let At=this.transformerService.getTransformer(Pt);return typeof At=="function"?new At:At}}).filter(Pt=>typeof Pt<"u")})}),this.registerProvider({name:Ce.name,baseUrl:Ce.api_base_url,apiKey:Ce.api_key,models:Ce.models||[],transformer:Ce.transformer?Be:void 0}),this.logger.info(`${Ce.name} provider registered`)}catch(Be){this.logger.error(`${Ce.name} provider registered error: ${Be}`)}})}registerProvider(te){let Ce={...te};return this.providers.set(Ce.name,Ce),te.models.forEach(Be=>{let Xe=`${Ce.name},${Be}`,Pt={provider:Ce.name,model:Be,fullModel:Xe};this.modelRoutes.set(Xe,Pt),this.modelRoutes.has(Be)||this.modelRoutes.set(Be,Pt)}),Ce}getProviders(){return Array.from(this.providers.values())}getProvider(te){return this.providers.get(te)}updateProvider(te,Ce){let Be=this.providers.get(te);if(!Be)return null;let Xe={...Be,...Ce,updatedAt:new Date};return this.providers.set(te,Xe),Ce.models&&(Be.models.forEach(Pt=>{let At=`${Be.name},${Pt}`;this.modelRoutes.delete(At),this.modelRoutes.delete(Pt)}),Ce.models.forEach(Pt=>{let At=`${Be.name},${Pt}`,Ft={provider:Be.name,model:Pt,fullModel:At};this.modelRoutes.set(At,Ft),this.modelRoutes.has(Pt)||this.modelRoutes.set(Pt,Ft)})),Xe}deleteProvider(te){let Ce=this.providers.get(te);return Ce?(Ce.models.forEach(Be=>{let Xe=`${Ce.name},${Be}`;this.modelRoutes.delete(Xe),this.modelRoutes.delete(Be)}),this.providers.delete(te),!0):!1}toggleProvider(te,Ce){return!!this.providers.get(te)}resolveModelRoute(te){let Ce=this.modelRoutes.get(te);if(!Ce)return null;let Be=this.providers.get(Ce.provider);return Be?{provider:Be,originalModel:te,targetModel:Ce.model}:null}getAvailableModelNames(){let te=[];return this.providers.forEach(Ce=>{Ce.models.forEach(Be=>{te.push(Be),te.push(`${Ce.name},${Be}`)})}),te}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(te){return te?Array.isArray(te)?te.reduce((Ce,Be)=>{if(Array.isArray(Be)){let[Xe,Pt={}]=Be;Ce[Xe]=Pt}else Ce[Be]={};return Ce},{}):te:{}}async getAvailableModels(){let te=[];return this.providers.forEach(Ce=>{Ce.models.forEach(Be=>{te.push({id:Be,object:"model",owned_by:Ce.name,provider:Ce.name}),te.push({id:`${Ce.name},${Be}`,object:"model",owned_by:Ce.name,provider:Ce.name})})}),{object:"list",data:te}}},NF=[];for(let te=0;te<256;++te)NF.push((te+256).toString(16).slice(1));function hve(te,Ce=0){return(NF[te[Ce+0]]+NF[te[Ce+1]]+NF[te[Ce+2]]+NF[te[Ce+3]]+"-"+NF[te[Ce+4]]+NF[te[Ce+5]]+"-"+NF[te[Ce+6]]+NF[te[Ce+7]]+"-"+NF[te[Ce+8]]+NF[te[Ce+9]]+"-"+NF[te[Ce+10]]+NF[te[Ce+11]]+NF[te[Ce+12]]+NF[te[Ce+13]]+NF[te[Ce+14]]+NF[te[Ce+15]]).toLowerCase()}var gve=require("crypto"),Lre=new Uint8Array(256),Rre=Lre.length;function $Y(){return Rre>Lre.length-16&&((0,gve.randomFillSync)(Lre),Rre=0),Lre.slice(Rre,Rre+=16)}var yve=require("crypto"),Ele={randomUUID:yve.randomUUID};function ome(te,Ce,Be){if(Ele.randomUUID&&!Ce&&!te)return Ele.randomUUID();te=te||{};let Xe=te.random??te.rng?.()??$Y();if(Xe.length<16)throw new Error("Random bytes length must be >= 16");if(Xe[6]=Xe[6]&15|64,Xe[8]=Xe[8]&63|128,Ce){if(Be=Be||0,Be<0||Be+16>Ce.length)throw new RangeError(`UUID byte range ${Be}:${Be+15} is out of buffer bounds`);for(let Pt=0;Pt<16;++Pt)Ce[Be+Pt]=Xe[Pt];return Ce}return hve(Xe)}var R$=ome,Dle=te=>te<=0?"none":te<=1024?"low":te<=8192?"medium":"high",Mre=(te,Ce)=>(te.includes("base64")&&(te=te.split("base64").pop(),te.startsWith(",")&&(te=te.slice(1))),`data:${Ce};base64,${te}`),ZO=class{constructor(te){this.options=te,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(te,Ce){let Be={};return this.useBearer?(Be.authorization=`Bearer ${Ce.apiKey}`,Be["x-api-key"]=void 0):(Be["x-api-key"]=Ce.apiKey,Be.authorization=void 0),{body:te,config:{headers:Be}}}async transformRequestOut(te){let Ce=[];if(te.system){if(typeof te.system=="string")Ce.push({role:"system",content:te.system});else if(Array.isArray(te.system)&&te.system.length){let Xe=te.system.filter(Pt=>Pt.type==="text"&&Pt.text).map(Pt=>({type:"text",text:Pt.text,cache_control:Pt.cache_control}));Ce.push({role:"system",content:Xe})}}JSON.parse(JSON.stringify(te.messages||[]))?.forEach(Xe=>{if(Xe.role==="user"||Xe.role==="assistant"){if(typeof Xe.content=="string"){Ce.push({role:Xe.role,content:Xe.content});return}if(Array.isArray(Xe.content)){if(Xe.role==="user"){let Pt=Xe.content.filter(Ft=>Ft.type==="tool_result"&&Ft.tool_use_id);Pt.length&&Pt.forEach(Ft=>{let Mt={role:"tool",content:typeof Ft.content=="string"?Ft.content:JSON.stringify(Ft.content),tool_call_id:Ft.tool_use_id,cache_control:Ft.cache_control};Ce.push(Mt)});let At=Xe.content.filter(Ft=>Ft.type==="text"&&Ft.text||Ft.type==="image"&&Ft.source);At.length&&Ce.push({role:"user",content:At.map(Ft=>Ft?.type==="image"?{type:"image_url",image_url:{url:Ft.source?.type==="base64"?Mre(Ft.source.data,Ft.source.media_type):Ft.source.url},media_type:Ft.source.media_type}:Ft)})}else if(Xe.role==="assistant"){let Pt={role:"assistant",content:""},At=Xe.content.filter(Wt=>Wt.type==="text"&&Wt.text);At.length&&(Pt.content=At.map(Wt=>Wt.text).join(`
1017
+ `):`${Be}${te}`}async output(te,Ce={}){try{let Be=this.formatData(te,Ce);switch(this.config.level||"log"){case"info":console.info(Be);break;case"warn":console.warn(Be);break;case"error":console.error(Be);break;case"debug":console.debug(Be);break;case"log":default:console.log(Be);break}return!0}catch(Be){return console.error("[ConsoleOutputHandler] Output failed:",Be),!1}}}}),dG,Zfe=N(()=>{"use strict";dG=class{type="webhook";config;defaultTimeout=3e4;constructor(te){if(!te.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...te}}buildHeaders(){let te={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(te.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let Ce=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");te.Authorization=`Basic ${Ce}`}break;case"custom":this.config.auth.custom&&(te[this.config.auth.custom.header]=this.config.auth.custom.value);break}return te}buildBody(te,Ce){let{format:Be="json",timestamp:Xe=!0,prefix:Pt,metadata:At}=Ce||{},Ft={data:te};return Xe&&(Ft.timestamp=new Date().toISOString()),Pt&&(Ft.prefix=Pt),At&&Object.keys(At).length>0&&(Ft.metadata=At),Ft}async sendRequest(te,Ce,Be,Xe,Pt){let At=new AbortController,Ft=setTimeout(()=>At.abort(),Pt);try{let Mt=await fetch(te,{method:Ce,headers:Be,body:JSON.stringify(Xe),signal:At.signal});if(clearTimeout(Ft),!Mt.ok)throw new Error(`HTTP ${Mt.status}: ${Mt.statusText}`);return Mt}catch(Mt){throw clearTimeout(Ft),Mt}}delay(te){return new Promise(Ce=>setTimeout(Ce,te))}async sendWithRetry(te,Ce,Be,Xe,Pt,At){let Ft=null;for(let Mt=1;Mt<=At.maxAttempts;Mt++)try{return await this.sendRequest(te,Ce,Be,Xe,Pt)}catch(Wt){if(Ft=Wt,Mt===At.maxAttempts)break;let Kt=At.backoffMs*Math.pow(2,Mt-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${Mt}/${At.maxAttempts}), retrying in ${Kt}ms...`,Wt.message),await this.delay(Kt)}throw Ft}async output(te,Ce={}){let Be=Ce.timeout||this.defaultTimeout;try{let Xe=this.buildHeaders(),Pt=this.buildBody(te,Ce),At=await this.sendWithRetry(this.config.url,this.config.method,Xe,Pt,Be,this.config.retry);return!0}catch(Xe){let Pt=Xe instanceof Error?Xe.message:String(Xe);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${Pt}`),!1;throw new Error(`Webhook output failed: ${Pt}`)}}}}),B$,Nre,ple,fle,Xfe=N(()=>{"use strict";B$=require("fs"),Nre=require("path"),ple=require("os"),fle=class{type="temp-file";config;baseDir;constructor(te={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...te};let Ce=(0,ple.tmpdir)();this.baseDir=(0,Nre.join)(Ce,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,B$.existsSync)(this.baseDir)||(0,B$.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(te){try{let Ce=te.match(/_session_([a-f0-9-]+)/i);return Ce?Ce[1]:null}catch{return null}}getFilePath(te){let Ce=this.config.prefix||"session",Be=this.config.extension?`.${this.config.extension}`:"",Xe;if(this.config.includeTimestamp){let Pt=Date.now();Xe=`${Ce}-${te}-${Pt}${Be}`}else Xe=`${Ce}-${te}${Be}`;return(0,Nre.join)(this.baseDir,Xe)}async output(te,Ce={}){try{let Be=Ce.metadata?.sessionId;if(!Be)return!1;let Xe={...te,timestamp:Date.now(),sessionId:Be},Pt=this.getFilePath(Be);return(0,B$.writeFileSync)(Pt,JSON.stringify(Xe,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),mle,QY,eme=N(()=>{"use strict";Fc(),Zfe(),Xfe(),mle=class{handlers=new Map;defaultOptions={};registerHandler(te,Ce){this.handlers.set(te,Ce)}registerHandlers(te){for(let Ce of te)if(Ce.enabled!==!1)try{let Be=this.createHandler(Ce),Xe=Ce.type+"_"+Date.now();this.registerHandler(Xe,Be)}catch(Be){console.error(`[OutputManager] Failed to register ${Ce.type} handler:`,Be)}}createHandler(te){switch(te.type){case"console":return new Yfe(te.config);case"webhook":return new dG(te.config);case"temp-file":return new fle(te.config);default:throw new Error(`Unknown output handler type: ${te.type}`)}}unregisterHandler(te){return this.handlers.delete(te)}getHandler(te){return this.handlers.get(te)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(te){this.defaultOptions={...this.defaultOptions,...te}}getDefaultOptions(){return{...this.defaultOptions}}async output(te,Ce){let Be={...this.defaultOptions,...Ce},Xe={success:[],failed:[]},Pt=Array.from(this.handlers.entries()).map(async([At,Ft])=>{try{await Ft.output(te,Be)?Xe.success.push(At):Xe.failed.push(At)}catch(Mt){console.error(`[OutputManager] Handler ${At} failed:`,Mt),Xe.failed.push(At)}});return await Promise.all(Pt),Xe}async outputTo(te,Ce,Be){let Xe={...this.defaultOptions,...Be},Pt={success:[],failed:[]},At=te.map(async Ft=>{let Mt=this.handlers.get(Ft);if(!Mt){console.warn(`[OutputManager] Handler ${Ft} not found`),Pt.failed.push(Ft);return}try{await Mt.output(Ce,Xe)?Pt.success.push(Ft):Pt.failed.push(Ft)}catch(Wt){console.error(`[OutputManager] Handler ${Ft} failed:`,Wt),Pt.failed.push(Ft)}});return await Promise.all(At),Pt}async outputToType(te,Ce,Be){let Xe=Array.from(this.handlers.entries()).filter(([Pt,At])=>At.type===te).map(([Pt])=>Pt);return this.outputTo(Xe,Ce,Be)}},QY=new mle}),tme={};R(tme,{ConfigService:()=>yle,ProviderHealthStore:()=>M5,ProviderService:()=>Ore,SSEParserTransform:()=>t9,SSESerializerTransform:()=>j$,TokenizerService:()=>Lve,TransformerService:()=>WD,calculateTokenCount:()=>zs,default:()=>BMe,getHealthStore:()=>Pre,pluginManager:()=>Ff,rewriteStream:()=>MXe,router:()=>Vre,searchProjectBySession:()=>ib,sessionUsageCache:()=>xR,tokenSpeedPlugin:()=>jXe}),g.exports=M(tme);var mve=Q(BFt(),1),hle=Q(OFt(),1),gle=require("fs"),pG=require("path"),rme=LFt(),nme=Q(H(),1),yle=class{config={};options;constructor(te={jsonPath:"./config.json"}){this.options={envPath:te.envPath||".env",jsonPath:te.jsonPath,useEnvFile:!1,useJsonFile:te.useJsonFile!==!1,useEnvironmentVariables:te.useEnvironmentVariables!==!1,...te},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 te=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,pG.join)(process.cwd(),this.options.jsonPath);if((0,gle.existsSync)(te))try{let Ce=(0,gle.readFileSync)(te,"utf-8"),Be=nme.default.parse(Ce);this.config={...this.config,...Be},console.log(`Loaded JSON config from: ${te}`)}catch(Ce){console.warn(`Failed to load JSON config from ${te}:`,Ce)}else console.warn(`JSON config file not found: ${te}`)}loadEnvConfig(){let te=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,pG.join)(process.cwd(),this.options.envPath);if((0,gle.existsSync)(te))try{let Ce=(0,rme.config)({path:te});Ce.parsed&&(this.config={...this.config,...this.parseEnvConfig(Ce.parsed)})}catch(Ce){console.warn(`Failed to load .env config from ${te}:`,Ce)}}loadEnvironmentVariables(){let te=this.parseEnvConfig(process.env);this.config={...this.config,...te}}parseEnvConfig(te){let Ce={};return Object.assign(Ce,te),Ce}isAbsolutePath(te){return te.startsWith("/")||te.includes(":")}get(te,Ce){let Be=this.config[te];return Be!==void 0?Be:Ce}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(te){return this.config[te]!==void 0}set(te,Ce){this.config[te]=Ce}reload(){this.config={},this.loadConfig()}getConfigSummary(){let te=[];return this.options.initialConfig&&te.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&te.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&te.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&te.push("Environment Variables"),`Config sources: ${te.join(", ")}`}};function ZN(te,Ce=500,Be="internal_error",Xe="api_error"){let Pt=new Error(te);return Pt.statusCode=Ce,Pt.code=Be,Pt.type=Xe,Pt}async function L6(te,Ce,Be){Ce.log.error(te);let Xe=te.statusCode||500,Pt={error:{message:te.message+te.stack||"Internal Server Error",type:te.type||"api_error",code:te.code||"internal_error"}};return Be.code(Xe).send(Pt)}var UY=l6t();function ime(te,Ce,Be,Xe,Pt){let At=new Headers({"Content-Type":"application/json"});Be.headers&&Object.entries(Be.headers).forEach(([Kt,sr])=>{sr&&At.set(Kt,sr)});let Ft,Mt=AbortSignal.timeout(Be.TIMEOUT??60*1e3*60);if(Be.signal){let Kt=new AbortController,sr=()=>Kt.abort();Be.signal.addEventListener("abort",sr),Mt.addEventListener("abort",sr),Ft=Kt.signal}else Ft=Mt;let Wt={method:"POST",headers:At,body:JSON.stringify(Ce),signal:Ft};return Be.httpsProxy&&(Wt.dispatcher=new UY.ProxyAgent(new URL(Be.httpsProxy).toString())),Pt?.debug({reqId:Xe.req.id,request:Wt,headers:Object.fromEntries(At.entries()),requestUrl:typeof te=="string"?te:te.toString(),useProxy:Be.httpsProxy},"final request"),fetch(typeof te=="string"?te:te.toString(),Wt)}var Ale="1.0.64",yQ=Q(We(),1),AQ={enabled:!0,failureThreshold:3,probeIntervalMinutes:5,halfOpenSuccessThreshold:2},M5=class{states=new yQ.Map;config;probeTimer;constructor(te){this.config={...AQ,...te}}getKey(te,Ce){return`${te},${Ce}`}recordSuccess(te,Ce){if(!this.config.enabled)return;let Be=this.getKey(te,Ce),Xe=this.states.get(Be);Xe&&(Xe.successCount++,Xe.status==="half-open"?Xe.successCount>=this.config.halfOpenSuccessThreshold&&this.states.delete(Be):Xe.status==="open"&&(Xe.status="half-open",Xe.successCount=1,Xe.failureCount=0))}recordFailure(te,Ce,Be){if(!this.config.enabled)return;let Xe=this.getKey(te,Ce),Pt=this.states.get(Xe);Pt||(Pt={provider:te,model:Ce,status:"closed",failureCount:0,successCount:0,lastFailureTime:0,lastProbeTime:0},this.states.set(Xe,Pt)),Pt.failureCount++,Pt.lastFailureTime=Date.now(),Pt.lastError=Be,Pt.status==="half-open"?(Pt.status="open",Pt.successCount=0,Pt.lastProbeTime=0):Pt.status==="closed"&&Pt.failureCount>=this.config.failureThreshold&&(Pt.status="open",Pt.lastProbeTime=0)}getState(te,Ce){return this.states.get(this.getKey(te,Ce))}isAvailable(te,Ce){if(!this.config.enabled)return!0;let Be=this.getState(te,Ce);return Be?Be.status!=="open":!0}getPriority(te,Ce){if(!this.config.enabled)return 0;let Be=this.getState(te,Ce);if(!Be)return 0;switch(Be.status){case"closed":return 0;case"half-open":return 1;case"open":return 2}}getHealthyModels(){return[]}getFailPoolModels(){let te=[];for(let[Ce,Be]of this.states)Be.status==="open"&&te.push(Ce);return te}getHalfOpenModels(){let te=[];for(let[Ce,Be]of this.states)Be.status==="half-open"&&te.push(Ce);return te}needsProbe(te){return Date.now()-te.lastProbeTime>=this.config.probeIntervalMinutes*60*1e3}markProbeAttempt(te,Ce){let Be=this.getKey(te,Ce),Xe=this.states.get(Be);Xe&&Xe.status==="open"&&(Xe.lastProbeTime=Date.now())}clear(){this.states.clear()}getAllStates(){return Array.from(this.states.values())}stopProbeTimer(){this.probeTimer&&(clearInterval(this.probeTimer),this.probeTimer=void 0)}},O$=null;function Pre(te){return O$||(O$=new M5(te)),O$}async function L$(te,Ce,Be,Xe){let Pt=te.body,At=te.provider,Ft=Be.providerService.getProvider(At);if(!Ft)throw ZN(`Provider '${At}' not found`,404,"provider_not_found");try{let{requestBody:Mt,config:Wt,bypass:Kt}=await vle(Pt,Ft,Xe,te.headers,{req:te}),sr=await ble(Mt,Wt,Ft,Be,Kt,Xe,{req:te}),Yr=await xle(Mt,sr,Ft,Xe,Kt,{req:te});return Bre(Yr,Ce,Pt)}catch(Mt){if(Mt.code==="provider_response_error"){let Wt=await ame(te,Ce,Be,Xe,Mt);if(Wt)return Wt}throw Mt}}async function ame(te,Ce,Be,Xe,Pt){let At=te.scenarioType||"default",Ft=te.familyFallback,Mt=Be.configService.get("fallback"),Wt=Pre(),Kt=[];if(Ft?.[At]?Kt=Ft[At]:Mt?.[At]&&(Kt=Mt[At]),!Array.isArray(Kt)||Kt.length===0)return null;let sr=te.provider||"",Yr=te.body.model||"";Wt.recordFailure(sr,Yr,Pt?.message),te.log.warn(`Request failed for ${te.scenarioType}, trying ${Kt.length} fallback models`);let Wr=Kt.sort((tr,Dr)=>{let[mt,bn]=tr.split(","),[$r,Tr]=Dr.split(",");return Wt.getPriority(mt,bn)-Wt.getPriority($r,Tr)});for(let tr of Wr)try{let[Dr,...mt]=tr.split(","),bn=mt.join(",");if(!Wt.isAvailable(Dr,bn)){te.log.warn(`Fallback model ${tr} unavailable (fail pool), skipping`);continue}te.log.info(`Trying fallback model: ${tr}`);let $r={...te.body};$r.model=bn;let Tr={...te,provider:Dr,body:$r},Rn=Be.providerService.getProvider(Dr);if(!Rn){te.log.warn(`Fallback provider '${Dr}' not found, skipping`);continue}let{requestBody:jr,config:En,bypass:Fi}=await vle($r,Rn,Xe,te.headers,{req:Tr}),no=await ble(jr,En,Rn,Be,Fi,Xe,{req:Tr}),Es=await xle(jr,no,Rn,Xe,Fi,{req:Tr});return te.log.info(`Fallback model ${tr} succeeded`),Wt.recordSuccess(Dr,bn),Bre(Es,Ce,$r)}catch(Dr){let[mt,...bn]=tr.split(","),$r=bn.join(",");Wt.recordFailure(mt,$r,Dr.message),te.log.warn(`Fallback model ${tr} failed: ${Dr.message}`);continue}return te.log.error(`All fallback models failed for ${At}`),null}async function vle(te,Ce,Be,Xe,Pt){let At=JSON.parse(JSON.stringify(te)),Ft={},Mt=!1;if(Mt=JY(Ce,Be,te),Mt&&(Xe instanceof Headers?Xe.delete("content-length"):delete Xe["content-length"],Ft.headers=Xe),!Mt&&typeof Be.transformRequestOut=="function"){let Wt=await Be.transformRequestOut(At);Wt.body?(At=Wt.body,Ft=Wt.config||{}):At=Wt}if(!Mt&&Ce.transformer?.use?.length)for(let Wt of Ce.transformer.use){if(!Wt||typeof Wt.transformRequestIn!="function")continue;let Kt=await Wt.transformRequestIn(At,Ce,Pt);Kt.body?(At=Kt.body,Ft={...Ft,...Kt.config}):At=Kt}if(!Mt&&Ce.transformer?.[te.model]?.use?.length)for(let Wt of Ce.transformer[te.model].use)!Wt||typeof Wt.transformRequestIn!="function"||(At=await Wt.transformRequestIn(At,Ce,Pt));return{requestBody:At,config:Ft,bypass:Mt}}function JY(te,Ce,Be){return te.transformer?.use?.length===1&&te.transformer.use[0].name===Ce.name&&(!te.transformer?.[Be.model]?.use.length||te.transformer?.[Be.model]?.use.length===1&&te.transformer?.[Be.model]?.use[0].name===Ce.name)}async function ble(te,Ce,Be,Xe,Pt,At,Ft){let Mt=Ce.url||new URL(Be.baseUrl);if(Pt&&typeof At.auth=="function"){let sr=await At.auth(te,Be);if(sr.body){te=sr.body;let Yr=Ce.headers||{};sr.config?.headers&&(Yr={...Yr,...sr.config.headers},delete Yr.host,delete sr.config.headers),Ce={...Ce,...sr.config,headers:Yr}}else te=sr}let Wt={Authorization:`Bearer ${Be.apiKey}`,...Ce?.headers||{}};for(let sr in Wt)(Wt[sr]==="undefined"||["authorization","Authorization"].includes(sr)&&Wt[sr]?.includes("undefined"))&&delete Wt[sr];let Kt=await ime(Mt,te,{httpsProxy:Xe.configService.getHttpsProxy(),...Ce,headers:JSON.parse(JSON.stringify(Wt))},Ft,Xe.log);if(!Kt.ok){let sr=await Kt.text();throw Xe.log.error(`[provider_response_error] Error from provider(${Be.name},${te.model}: ${Kt.status}): ${sr}`),ZN(`Error from provider(${Be.name},${te.model}: ${Kt.status}): ${sr}`,Kt.status,"provider_response_error")}return Kt}async function xle(te,Ce,Be,Xe,Pt,At){let Ft=Ce;if(!Pt&&Be.transformer?.use?.length)for(let Mt of Array.from(Be.transformer.use).reverse())!Mt||typeof Mt.transformResponseOut!="function"||(Ft=await Mt.transformResponseOut(Ft,At));if(!Pt&&Be.transformer?.[te.model]?.use?.length)for(let Mt of Array.from(Be.transformer[te.model].use).reverse())!Mt||typeof Mt.transformResponseOut!="function"||(Ft=await Mt.transformResponseOut(Ft,At));return!Pt&&Xe.transformResponseIn&&(Ft=await Xe.transformResponseIn(Ft,At)),Ft}function Bre(te,Ce,Be){return te.ok||Ce.code(te.status),Be.stream===!0?(Ce.header("Content-Type","text/event-stream"),Ce.header("Cache-Control","no-cache"),Ce.header("Connection","keep-alive"),Ce.send(te.body)):te.json()}var fG=async te=>{te.get("/",async()=>({message:"LLMs API",version:Ale})),te.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let Ce=te.transformerService.getTransformersWithEndpoint();for(let{transformer:Be}of Ce)Be.endPoint&&te.post(Be.endPoint,async(Xe,Pt)=>L$(Xe,Pt,te,Be));te.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(Be,Xe)=>{let{name:Pt,baseUrl:At,apiKey:Ft,models:Mt}=Be.body;if(!Pt?.trim())throw ZN("Provider name is required",400,"invalid_request");if(!At||!Cle(At))throw ZN("Valid base URL is required",400,"invalid_request");if(!Ft?.trim())throw ZN("API key is required",400,"invalid_request");if(!Mt||!Array.isArray(Mt)||Mt.length===0)throw ZN("At least one model is required",400,"invalid_request");if(te.providerService.getProvider(Be.body.name))throw ZN(`Provider with name '${Be.body.name}' already exists`,400,"provider_exists");return te.providerService.registerProvider(Be.body)}),te.get("/providers",async()=>te.providerService.getProviders()),te.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async Be=>{let Xe=te.providerService.getProvider(Be.params.id);if(!Xe)throw ZN("Provider not found",404,"provider_not_found");return Xe}),te.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(Be,Xe)=>{let Pt=te.providerService.updateProvider(Be.params.id,Be.body);if(!Pt)throw ZN("Provider not found",404,"provider_not_found");return Pt}),te.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async Be=>{if(!te.providerService.deleteProvider(Be.params.id))throw ZN("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),te.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(Be,Xe)=>{if(!te.providerService.toggleProvider(Be.params.id,Be.body.enabled))throw ZN("Provider not found",404,"provider_not_found");return{message:`Provider ${Be.body.enabled?"enabled":"disabled"} successfully`}})};function Cle(te){try{return new URL(te),!0}catch{return!1}}var Ore=class{constructor(te,Ce,Be){this.configService=te,this.transformerService=Ce,this.logger=Be,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let te=this.configService.get("providers");if(te&&Array.isArray(te)){this.initializeFromProvidersArray(te);return}}initializeFromProvidersArray(te){te.forEach(Ce=>{try{if(!Ce.name||!Ce.api_base_url||!Ce.api_key)return;let Be={};Ce.transformer&&Object.keys(Ce.transformer).forEach(Xe=>{Xe==="use"?Array.isArray(Ce.transformer.use)&&(Be.use=Ce.transformer.use.map(Pt=>{if(Array.isArray(Pt)&&typeof Pt[0]=="string"){let At=this.transformerService.getTransformer(Pt[0]);if(At)return new At(Pt[1])}if(typeof Pt=="string"){let At=this.transformerService.getTransformer(Pt);return typeof At=="function"?new At:At}}).filter(Pt=>typeof Pt<"u")):Array.isArray(Ce.transformer[Xe]?.use)&&(Be[Xe]={use:Ce.transformer[Xe].use.map(Pt=>{if(Array.isArray(Pt)&&typeof Pt[0]=="string"){let At=this.transformerService.getTransformer(Pt[0]);if(At)return new At(Pt[1])}if(typeof Pt=="string"){let At=this.transformerService.getTransformer(Pt);return typeof At=="function"?new At:At}}).filter(Pt=>typeof Pt<"u")})}),this.registerProvider({name:Ce.name,baseUrl:Ce.api_base_url,apiKey:Ce.api_key,models:Ce.models||[],transformer:Ce.transformer?Be:void 0}),this.logger.info(`${Ce.name} provider registered`)}catch(Be){this.logger.error(`${Ce.name} provider registered error: ${Be}`)}})}registerProvider(te){let Ce={...te};return this.providers.set(Ce.name,Ce),te.models.forEach(Be=>{let Xe=`${Ce.name},${Be}`,Pt={provider:Ce.name,model:Be,fullModel:Xe};this.modelRoutes.set(Xe,Pt),this.modelRoutes.has(Be)||this.modelRoutes.set(Be,Pt)}),Ce}getProviders(){return Array.from(this.providers.values())}getProvider(te){return this.providers.get(te)}updateProvider(te,Ce){let Be=this.providers.get(te);if(!Be)return null;let Xe={...Be,...Ce,updatedAt:new Date};return this.providers.set(te,Xe),Ce.models&&(Be.models.forEach(Pt=>{let At=`${Be.name},${Pt}`;this.modelRoutes.delete(At),this.modelRoutes.delete(Pt)}),Ce.models.forEach(Pt=>{let At=`${Be.name},${Pt}`,Ft={provider:Be.name,model:Pt,fullModel:At};this.modelRoutes.set(At,Ft),this.modelRoutes.has(Pt)||this.modelRoutes.set(Pt,Ft)})),Xe}deleteProvider(te){let Ce=this.providers.get(te);return Ce?(Ce.models.forEach(Be=>{let Xe=`${Ce.name},${Be}`;this.modelRoutes.delete(Xe),this.modelRoutes.delete(Be)}),this.providers.delete(te),!0):!1}toggleProvider(te,Ce){return!!this.providers.get(te)}resolveModelRoute(te){let Ce=this.modelRoutes.get(te);if(!Ce)return null;let Be=this.providers.get(Ce.provider);return Be?{provider:Be,originalModel:te,targetModel:Ce.model}:null}getAvailableModelNames(){let te=[];return this.providers.forEach(Ce=>{Ce.models.forEach(Be=>{te.push(Be),te.push(`${Ce.name},${Be}`)})}),te}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(te){return te?Array.isArray(te)?te.reduce((Ce,Be)=>{if(Array.isArray(Be)){let[Xe,Pt={}]=Be;Ce[Xe]=Pt}else Ce[Be]={};return Ce},{}):te:{}}async getAvailableModels(){let te=[];return this.providers.forEach(Ce=>{Ce.models.forEach(Be=>{te.push({id:Be,object:"model",owned_by:Ce.name,provider:Ce.name}),te.push({id:`${Ce.name},${Be}`,object:"model",owned_by:Ce.name,provider:Ce.name})})}),{object:"list",data:te}}},NF=[];for(let te=0;te<256;++te)NF.push((te+256).toString(16).slice(1));function hve(te,Ce=0){return(NF[te[Ce+0]]+NF[te[Ce+1]]+NF[te[Ce+2]]+NF[te[Ce+3]]+"-"+NF[te[Ce+4]]+NF[te[Ce+5]]+"-"+NF[te[Ce+6]]+NF[te[Ce+7]]+"-"+NF[te[Ce+8]]+NF[te[Ce+9]]+"-"+NF[te[Ce+10]]+NF[te[Ce+11]]+NF[te[Ce+12]]+NF[te[Ce+13]]+NF[te[Ce+14]]+NF[te[Ce+15]]).toLowerCase()}var gve=require("crypto"),Lre=new Uint8Array(256),Rre=Lre.length;function $Y(){return Rre>Lre.length-16&&((0,gve.randomFillSync)(Lre),Rre=0),Lre.slice(Rre,Rre+=16)}var yve=require("crypto"),Ele={randomUUID:yve.randomUUID};function ome(te,Ce,Be){if(Ele.randomUUID&&!Ce&&!te)return Ele.randomUUID();te=te||{};let Xe=te.random??te.rng?.()??$Y();if(Xe.length<16)throw new Error("Random bytes length must be >= 16");if(Xe[6]=Xe[6]&15|64,Xe[8]=Xe[8]&63|128,Ce){if(Be=Be||0,Be<0||Be+16>Ce.length)throw new RangeError(`UUID byte range ${Be}:${Be+15} is out of buffer bounds`);for(let Pt=0;Pt<16;++Pt)Ce[Be+Pt]=Xe[Pt];return Ce}return hve(Xe)}var R$=ome,Dle=te=>te<=0?"none":te<=1024?"low":te<=8192?"medium":"high",Mre=(te,Ce)=>(te.includes("base64")&&(te=te.split("base64").pop(),te.startsWith(",")&&(te=te.slice(1))),`data:${Ce};base64,${te}`),ZO=class{constructor(te){this.options=te,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(te,Ce){let Be={};return this.useBearer?(Be.authorization=`Bearer ${Ce.apiKey}`,Be["x-api-key"]=void 0):(Be["x-api-key"]=Ce.apiKey,Be.authorization=void 0),{body:te,config:{headers:Be}}}async transformRequestOut(te){let Ce=[];if(te.system){if(typeof te.system=="string")Ce.push({role:"system",content:te.system});else if(Array.isArray(te.system)&&te.system.length){let Xe=te.system.filter(Pt=>Pt.type==="text"&&Pt.text).map(Pt=>({type:"text",text:Pt.text,cache_control:Pt.cache_control}));Ce.push({role:"system",content:Xe})}}JSON.parse(JSON.stringify(te.messages||[]))?.forEach(Xe=>{if(Xe.role==="user"||Xe.role==="assistant"){if(typeof Xe.content=="string"){Ce.push({role:Xe.role,content:Xe.content});return}if(Array.isArray(Xe.content)){if(Xe.role==="user"){let Pt=Xe.content.filter(Ft=>Ft.type==="tool_result"&&Ft.tool_use_id);Pt.length&&Pt.forEach(Ft=>{let Mt={role:"tool",content:typeof Ft.content=="string"?Ft.content:JSON.stringify(Ft.content),tool_call_id:Ft.tool_use_id,cache_control:Ft.cache_control};Ce.push(Mt)});let At=Xe.content.filter(Ft=>Ft.type==="text"&&Ft.text||Ft.type==="image"&&Ft.source);At.length&&Ce.push({role:"user",content:At.map(Ft=>Ft?.type==="image"?{type:"image_url",image_url:{url:Ft.source?.type==="base64"?Mre(Ft.source.data,Ft.source.media_type):Ft.source.url},media_type:Ft.source.media_type}:Ft)})}else if(Xe.role==="assistant"){let Pt={role:"assistant",content:""},At=Xe.content.filter(Wt=>Wt.type==="text"&&Wt.text);At.length&&(Pt.content=At.map(Wt=>Wt.text).join(`
1018
1018
  `));let Ft=Xe.content.filter(Wt=>Wt.type==="tool_use"&&Wt.id);Ft.length&&(Pt.tool_calls=Ft.map(Wt=>({id:Wt.id,type:"function",function:{name:Wt.name,arguments:JSON.stringify(Wt.input||{})}})));let Mt=Xe.content.find(Wt=>Wt.type==="thinking"&&Wt.signature);Mt&&(Pt.thinking={content:Mt.thinking,signature:Mt.signature}),Ce.push(Pt)}return}}});let Be={messages:Ce,model:te.model,max_tokens:te.max_tokens,temperature:te.temperature,stream:te.stream,tools:te.tools?.length?this.convertAnthropicToolsToUnified(te.tools):void 0,tool_choice:te.tool_choice};return te.thinking&&(Be.reasoning={effort:Dle(te.thinking.budget_tokens),enabled:te.thinking.type==="enabled"}),te.tool_choice&&(te.tool_choice.type==="tool"?Be.tool_choice={type:"function",function:{name:te.tool_choice.name}}:Be.tool_choice=te.tool_choice.type),Be}async transformResponseIn(te,Ce){if(te.headers.get("Content-Type")?.includes("text/event-stream")){if(!te.body)throw new Error("Stream response body is null");let Be=await this.convertOpenAIStreamToAnthropic(te.body,Ce);return new Response(Be,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let Be=await te.json(),Xe=this.convertOpenAIResponseToAnthropic(Be,Ce);return new Response(JSON.stringify(Xe),{headers:{"Content-Type":"application/json"}})}}convertAnthropicToolsToUnified(te){return te.map(Ce=>({type:"function",function:{name:Ce.name,description:Ce.description||"",parameters:Ce.input_schema}}))}async convertOpenAIStreamToAnthropic(te,Ce){return new ReadableStream({start:async Be=>{let Xe=new TextEncoder,Pt=`msg_${Date.now()}`,At=null,Ft="unknown",Mt=!1,Wt=!1,Kt=!1,sr=new Map,Yr=new Map,Wr=0,tr=0,Dr=0,mt=!1,bn=!1,$r=0,Tr=-1,Rn=()=>{let no=$r;return $r++,no},jr=no=>{if(!mt)try{Be.enqueue(no);let Es=new TextDecoder().decode(no);this.logger.debug({reqId:Ce.req.id,data:Es,type:"send data"})}catch(Es){if(Es instanceof TypeError&&Es.message.includes("Controller is already closed"))mt=!0;else throw this.logger.debug({reqId:Ce.req.id,error:Es instanceof Error?Es.message:String(Es),type:"send data error"}),Es}},En=()=>{if(!mt)try{if(Tr>=0){let Es={type:"content_block_stop",index:Tr};jr(Xe.encode(`event: content_block_stop
1019
1019
  data: ${JSON.stringify(Es)}
1020
1020
 
@@ -1282,7 +1282,7 @@ ${Xe.content}`),delete Xe.thinking)});let Be=te.messages[te.messages.length-1];r
1282
1282
  error: ${Ce.message}
1283
1283
  stack: ${Ce.stack}`),!1}}async initialize(){try{await this.registerDefaultTransformersInternal(),await this.loadFromConfig()}catch(te){this.logger.error(`TransformerService init error: ${te.message}
1284
1284
  Stack: ${te.stack}`)}}async registerDefaultTransformersInternal(){try{Object.values(oMe).forEach(te=>{if("TransformerName"in te&&typeof te.TransformerName=="string")this.registerTransformer(te.TransformerName,te);else{let Ce=new te;Ce&&typeof Ce=="object"&&(Ce.logger=this.logger),this.registerTransformer(Ce.name,Ce)}})}catch(te){this.logger.error({error:te},"transformer regist error:")}}async loadFromConfig(){let te=this.configService.get("transformers",[]);for(let Ce of te)await this.registerTransformerFromConfig(Ce)}},ZFe=uft(),Jre=class{type="tiktoken";name;encoding;constructor(te="cl100k_base"){this.name=`tiktoken-${te}`;try{this.encoding=(0,ZFe.get_encoding)(te)}catch{throw new Error(`Failed to initialize tiktoken encoding: ${te}`)}}async initialize(){if(!this.encoding)throw new Error("Tiktoken encoding not initialized")}async countTokens(te){let Ce=this.encoding;if(!Ce)throw new Error("Encoding not initialized");let Be=0,{messages:Xe,system:Pt,tools:At}=te;return Array.isArray(Xe)&&Xe.forEach(Ft=>{typeof Ft.content=="string"?Be+=Ce.encode(Ft.content).length:Array.isArray(Ft.content)&&Ft.content.forEach(Mt=>{if(Mt.type==="text")Be+=Ce.encode(Mt.text).length;else if(Mt.type==="tool_use")Be+=Ce.encode(JSON.stringify(Mt.input)).length;else if(Mt.type==="tool_result"){let Wt=typeof Mt.content=="string"?Mt.content:JSON.stringify(Mt.content);Be+=Ce.encode(Wt).length}})}),typeof Pt=="string"?Be+=Ce.encode(Pt).length:Array.isArray(Pt)&&Pt.forEach(Ft=>{Ft.type==="text"&&(typeof Ft.text=="string"?Be+=Ce.encode(Ft.text).length:Array.isArray(Ft.text)&&Ft.text.forEach(Mt=>{Be+=Ce.encode(Mt||"").length}))}),At&&At.forEach(Ft=>{Ft.description&&(Be+=Ce.encode(Ft.name+Ft.description).length),Ft.input_schema&&(Be+=Ce.encode(JSON.stringify(Ft.input_schema)).length)}),Be}isInitialized(){return this.encoding!==void 0}encodeText(te){let Ce=this.encoding;if(!Ce)throw new Error("Encoding not initialized");return Array.from(Ce.encode(te))}dispose(){this.encoding&&(this.encoding.free(),this.encoding=void 0)}},VD=require("path"),XFe=require("os"),M$=require("fs"),o1=require("fs"),l2=class{constructor(te){this.trie=this._build_trie(te)}_build_trie(te){let Ce=Object.create(null);for(let Be of te){let Xe=Ce;for(let Pt=0;Pt<Be.length;++Pt){let At=Be[Pt];Xe=Xe[At]??=Object.create(null)}Xe.end=Be}return Ce}split(te){let Ce=[],Be=te.length,Xe=0,Pt=0;for(;Pt<Be;){let At=this.trie,Ft=null,Mt=Pt;for(;Mt<Be&&(At=At[te[Mt]]);)At.end&&(Ft=At.end),++Mt;Ft?(Pt>Xe&&Ce.push(te.slice(Xe,Pt)),Ce.push(Ft),Pt+=Ft.length,Xe=Pt):++Pt}return Xe<Be&&Ce.push(te.slice(Xe)),Ce}},AR=l2,AXe=class{constructor(te){this.content=te.content,this.id=te.id,this.single_word=te.single_word??!1,this.lstrip=te.lstrip??!1,this.rstrip=te.rstrip??!1,this.special=te.special??!1,this.normalized=te.normalized??null}},tht=AXe,ume=(()=>{let te=[...Array.from({length:94},(Pt,At)=>At+33),...Array.from({length:12},(Pt,At)=>At+161),...Array.from({length:82},(Pt,At)=>At+174)],Ce=te.slice(),Be=0;for(let Pt=0;Pt<256;++Pt)te.includes(Pt)||(te.push(Pt),Ce.push(256+Be),Be+=1);let Xe=Ce.map(Pt=>String.fromCharCode(Pt));return Object.fromEntries(te.map((Pt,At)=>[Pt,Xe[At]]))})(),nI=te=>Object.fromEntries(Object.entries(te).map(([Ce,Be])=>[Be,Ce])),$_=nI(ume),W2=".,!?\u2026\u3002\uFF0C\u3001\u0964\u06D4\u060C",vXe=new Map([["(?i:'s|'t|'re|'ve|'m|'ll|'d)","(?:'([sS]|[tT]|[rR][eE]|[vV][eE]|[mM]|[lL][lL]|[dD]))"],["(?i:[sdmt]|ll|ve|re)","(?:[sS]|[dD]|[mM]|[tT]|[lL][lL]|[vV][eE]|[rR][eE])"],["[^\\r\\n\\p{L}\\p{N}]?+","[^\\r\\n\\p{L}\\p{N}]?"],["[^\\s\\p{L}\\p{N}]++","[^\\s\\p{L}\\p{N}]+"],[` ?[^(\\s|[${W2}])]+`,` ?[^\\s${W2}]+`]]),kve="\\p{P}\\u0021-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007E",$re=new RegExp(`^[${kve}]+$`,"gu"),sMe=te=>te.replace(/ \./g,".").replace(/ \?/g,"?").replace(/ \!/g,"!").replace(/ ,/g,",").replace(/ \' /g,"'").replace(/ n't/g,"n't").replace(/ 'm/g,"'m").replace(/ 's/g,"'s").replace(/ 've/g,"'ve").replace(/ 're/g,"'re"),Xb=(te,Ce=!0)=>{if(te.Regex!==void 0){let Be=te.Regex.replace(/\\([#&~])/g,"$1");for(let[Xe,Pt]of vXe)Be=Be.replaceAll(Xe,Pt);return new RegExp(Be,"gu")}else if(te.String!==void 0){let Be=bQ(te.String);return new RegExp(Ce?Be:`(${Be})`,"gu")}else return console.warn("Unknown pattern type:",te),null},bQ=te=>te.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Tx=(te,Ce,Be)=>{let Xe=[],Pt=0;for(;Pt<te.length;){if(Xe.push(te[Pt]),(Ce.get(te[Pt])??Be)!==Be){++Pt;continue}for(;++Pt<te.length&&(Ce.get(te[Pt])??Be)===Be;)Ce.get(Xe.at(-1))!==Be&&(Xe[Xe.length-1]+=te[Pt])}return Xe},HY=te=>te>=19968&&te<=40959||te>=13312&&te<=19903||te>=131072&&te<=173791||te>=173824&&te<=177983||te>=177984&&te<=178207||te>=178208&&te<=183983||te>=63744&&te<=64255||te>=194560&&te<=195103,f_=te=>Number.isInteger(te)||typeof te=="bigint",vR=te=>{let Ce=0;for(let Be of te)++Ce;return Ce},Tve=te=>xXe(te.toLowerCase()),cp=(...te)=>Array.prototype.concat.apply([],te),Zm=te=>new Map(Object.entries(te)),bXe=(te,Ce)=>{let Be=[],Xe=0;for(let Pt of te.matchAll(Ce)){let At=Pt[0];Xe<Pt.index&&Be.push(te.slice(Xe,Pt.index)),At.length>0&&Be.push(At),Xe=Pt.index+At.length}return Xe<te.length&&Be.push(te.slice(Xe)),Be},xXe=te=>te.replace(new RegExp("\\p{M}","gu"),""),wve=(te,Ce,Be=[])=>{if(!te||Array.isArray(te)||typeof te!="object")return`${Ce} must be a valid object`;for(let Xe of Be)if(!(Xe in te))return`${Ce} must contain a "${Xe}" property`;return null},Sy=te=>te.match(/\S+/g)||[],XO=class{constructor(){let te=function(...Ce){return te._call(...Ce)};return Object.setPrototypeOf(te,new.target.prototype)}},E2=XO,AG=class extends E2{constructor(te){super(),this.config=te}_call(te){return this.normalize(te)}},e9=AG,Fve=class extends e9{tokenize_chinese_chars(te){let Ce=[];for(let Be=0;Be<te.length;++Be){let Xe=te[Be],Pt=Xe.charCodeAt(0);HY(Pt)?(Ce.push(" "),Ce.push(Xe),Ce.push(" ")):Ce.push(Xe)}return Ce.join("")}strip_accents(te){return te.normalize("NFD").replace(new RegExp("\\p{Mn}","gu"),"")}is_control(te){switch(te){case" ":case`
1285
- `:case"\r":return!1;default:return new RegExp("^\\p{Cc}|\\p{Cf}|\\p{Co}|\\p{Cs}$","u").test(te)}}clean_text(te){let Ce=[];for(let Be of te){let Xe=Be.charCodeAt(0);Xe===0||Xe===65533||this.is_control(Be)||(/^\s$/.test(Be)?Ce.push(" "):Ce.push(Be))}return Ce.join("")}normalize(te){return this.config.clean_text&&(te=this.clean_text(te)),this.config.handle_chinese_chars&&(te=this.tokenize_chinese_chars(te)),this.config.lowercase?(te=te.toLowerCase(),this.config.strip_accents!==!1&&(te=this.strip_accents(te))):this.config.strip_accents&&(te=this.strip_accents(te)),te}},e6e=Fve,lMe=class extends e9{constructor(te){super(te),this.charsmap=te.precompiled_charsmap??null}normalize(te){return te=te.replace(/[\u0001-\u0008\u000B\u000E-\u001F\u007F\u008F\u009F]/gm,""),te=te.replace(/[\u0009\u000A\u000C\u000D\u00A0\u1680\u2000-\u200F\u2028\u2029\u202F\u205F\u2581\u3000\uFEFF\uFFFD]/gm," "),te.includes("\uFF5E")?te=te.split("\uFF5E").map(Ce=>Ce.normalize("NFKC")).join("\uFF5E"):te=te.normalize("NFKC"),te}},CXe=lMe,EXe=class extends e9{constructor(te){super(te),this.normalizers=(te.normalizers??[]).map(Ce=>TXe(Ce))}normalize(te){return this.normalizers.reduce((Ce,Be)=>Be?Be.normalize(Ce):Ce,te)}},Q7=EXe,Pw=class extends e9{normalize(te){let Ce=Xb(this.config.pattern??{});return Ce===null?te:te.replaceAll(Ce,this.config.content??"")}},t6e=Pw,DXe=class extends e9{constructor(){super(...arguments),this.form="NFC"}normalize(te){return te=te.normalize(this.form),te}},kS=DXe,Fle=class extends kS{constructor(){super(...arguments),this.form="NFC"}},zre=Fle,GY=class extends kS{constructor(){super(...arguments),this.form="NFD"}},Ile=GY,Ive=class extends kS{constructor(){super(...arguments),this.form="NFKC"}},pe=Ive,z=class extends kS{constructor(){super(...arguments),this.form="NFKD"}},KD=z,cMe=class extends e9{normalize(te){return this.config.strip_left&&this.config.strip_right?te=te.trim():(this.config.strip_left&&(te=te.trimStart()),this.config.strip_right&&(te=te.trimEnd())),te}},Nve=cMe,rht=class extends e9{normalize(te){return xXe(te)}},SXe=rht,kXe=class extends e9{normalize(te){return te.toLowerCase()}},nht=kXe,iht=class extends e9{normalize(te){return te=this.config.prepend+te,te}},aht=iht;function oht(te){if(te===null)return null;switch(te.type){case"BertNormalizer":return new e6e(te);case"Precompiled":return new CXe(te);case"Sequence":return new Q7(te);case"Replace":return new t6e(te);case"NFC":return new zre(te);case"NFD":return new Ile(te);case"NFKC":return new pe(te);case"NFKD":return new KD(te);case"Strip":return new Nve(te);case"StripAccents":return new SXe(te);case"Lowercase":return new nht(te);case"Prepend":return new aht(te);default:throw new Error(`Unknown Normalizer type: ${te.type}`)}}var TXe=oht,sht=class extends E2{pre_tokenize(te,Ce){return(Array.isArray(te)?te.map(Be=>this.pre_tokenize_text(Be,Ce)):this.pre_tokenize_text(te,Ce)).flat()}_call(te,Ce){return this.pre_tokenize(te,Ce)}},vG=sht,lht=class extends vG{constructor(te){super(),this.config=te,this.add_prefix_space=this.config.add_prefix_space??!1,this.trim_offsets=this.config.trim_offsets??!1,this.use_regex=this.config.use_regex??!0,this.pattern=new RegExp("'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+","gu"),this.byte_encoder=ume,this.text_encoder=new TextEncoder}pre_tokenize_text(te,Ce){return this.add_prefix_space&&!te.startsWith(" ")&&(te=" "+te),(this.use_regex?te.match(this.pattern)||[]:[te]).map(Be=>Array.from(this.text_encoder.encode(Be),Xe=>this.byte_encoder[Xe]).join(""))}},r6e=lht,Pve=class extends vG{pre_tokenize_text(te,Ce){return te.match(/\w+|[^\w\s]+/g)||[]}},cht=Pve,wXe=class extends vG{constructor(te){super(),this.replacement=te.replacement??"\u2581",this.str_rep=te.str_rep||this.replacement,this.prepend_scheme=te.prepend_scheme??"always"}pre_tokenize_text(te,Ce){let{section_index:Be=void 0}=Ce??{},Xe=te.replaceAll(" ",this.str_rep);return!Xe.startsWith(this.replacement)&&(this.prepend_scheme==="always"||this.prepend_scheme==="first"&&Be===0)&&(Xe=this.str_rep+Xe),[Xe]}},uht=wXe,fh=class extends vG{constructor(te){super(),this.config=te,this.pattern=Xb(this.config.pattern??{},this.config.invert??!0)}pre_tokenize_text(te){return this.pattern===null?[]:this.config.invert?te.match(this.pattern)||[]:this.config.behavior?.toLowerCase()==="removed"?te.split(this.pattern).filter(Ce=>Ce):bXe(te,this.pattern)}},bG=fh,_ht=class extends vG{constructor(te){super(),this.config=te,this.pattern=new RegExp(`[^${kve}]+|[${kve}]+`,"gu")}pre_tokenize_text(te){return te.match(this.pattern)||[]}},FXe=_ht,n6e=class extends vG{constructor(te){super(),this.config=te;let Ce=`[^\\d]+|\\d${this.config.individual_digits?"":"+"}`;this.pattern=new RegExp(Ce,"gu")}pre_tokenize_text(te){return te.match(this.pattern)||[]}},WY=n6e,_me=class extends vG{constructor(){super(),this.pattern=new RegExp(`[^\\s${kve}]+|[${kve}]`,"gu")}pre_tokenize_text(te,Ce){return te.trim().match(this.pattern)||[]}},Bve=_me,Q5=class extends vG{constructor(te){super(),this.config=te,this.pattern=Xb(this.config.pattern??{}),this.content=this.config.content??""}pre_tokenize_text(te){return this.pattern===null?[te]:[te.replaceAll(this.pattern,this.config.content??"")]}},qre=Q5,Nle=class extends vG{constructor(te){super(),this.tokenizers=(te.pretokenizers??[]).map(Ce=>CC(Ce))}pre_tokenize_text(te,Ce){return this.tokenizers.reduce((Be,Xe)=>Xe?Xe.pre_tokenize(Be,Ce):Be,[te])}},Ple=Nle,Xm=class extends vG{pre_tokenize_text(te){return Sy(te)}},U5=Xm;function E4(te){if(te===null)return null;switch(te.type){case"BertPreTokenizer":return new Bve;case"Sequence":return new Ple(te);case"Whitespace":return new cht;case"WhitespaceSplit":return new U5;case"Metaspace":return new uht(te);case"ByteLevel":return new r6e(te);case"Split":return new bG(te);case"Punctuation":return new FXe(te);case"Digits":return new WY(te);case"Replace":return new qre(te);default:throw new Error(`Unknown PreTokenizer type: ${te.type}`)}}var CC=E4,Hre=class extends E2{constructor(te){super(),this.config=te,this.vocab=[],this.tokens_to_ids=new Map,this.unk_token_id=void 0,this.unk_token=void 0,this.end_of_word_suffix=void 0,this.fuse_unk=this.config.fuse_unk??!1}_call(te){let Ce=this.encode(te);return this.fuse_unk&&(Ce=Tx(Ce,this.tokens_to_ids,this.unk_token_id)),Ce}convert_tokens_to_ids(te){return te.map(Ce=>this.tokens_to_ids.get(Ce)??this.unk_token_id)}convert_ids_to_tokens(te){return te.map(Ce=>this.vocab[Number(Ce)]??this.unk_token)}},dme=Hre,uMe=class extends dme{constructor(te){super(te),this.max_input_chars_per_word=100,this.tokens_to_ids=Zm(te.vocab),this.unk_token_id=this.tokens_to_ids.get(te.unk_token),this.unk_token=te.unk_token,this.max_input_chars_per_word=te.max_input_chars_per_word??100,this.vocab=new Array(this.tokens_to_ids.size);for(let[Ce,Be]of this.tokens_to_ids)this.vocab[Be]=Ce}encode(te){let Ce=[];for(let Be of te){let Xe=[...Be];if(Xe.length>this.max_input_chars_per_word){Ce.push(this.unk_token);continue}let Pt=!1,At=0,Ft=[];for(;At<Xe.length;){let Mt=Xe.length,Wt=null;for(;At<Mt;){let Kt=Xe.slice(At,Mt).join("");if(At>0&&(Kt=this.config.continuing_subword_prefix+Kt),this.tokens_to_ids.has(Kt)){Wt=Kt;break}--Mt}if(Wt===null){Pt=!0;break}Ft.push(Wt),At=Mt}Pt?Ce.push(this.unk_token):Ce.push(...Ft)}return Ce}},_Me=uMe,i6e=class q6t{constructor(Ce,Be){this.is_leaf=Ce,this.children=Be}static default(){return new q6t(!1,new Map)}},dMe=class{constructor(){this.root=i6e.default()}extend(te){for(let Ce of te)this.push(Ce)}push(te){let Ce=this.root;for(let Be of te){let Xe=Ce.children.get(Be);Xe===void 0&&(Xe=i6e.default(),Ce.children.set(Be,Xe)),Ce=Xe}Ce.is_leaf=!0}*common_prefix_search(te){let Ce=this.root;if(Ce===void 0)return;let Be="";for(let Xe of te){if(Be+=Xe,Ce=Ce.children.get(Xe),Ce===void 0)return;Ce.is_leaf&&(yield Be)}}},Qh=dMe,pme=class H6t{constructor(Ce,Be,Xe,Pt,At){this.token_id=Ce,this.node_id=Be,this.pos=Xe,this.length=Pt,this.score=At,this.prev=null,this.backtrace_score=0}clone(){let Ce=new H6t(this.token_id,this.node_id,this.pos,this.length,this.score);return Ce.prev=this.prev,Ce.backtrace_score=this.backtrace_score,Ce}},Ble=class{constructor(te,Ce,Be){this.chars=Array.from(te),this.len=this.chars.length,this.bos_token_id=Ce,this.eos_token_id=Be,this.nodes=[],this.begin_nodes=Array.from({length:this.len+1},()=>[]),this.end_nodes=Array.from({length:this.len+1},()=>[]);let Xe=new pme(this.bos_token_id??0,0,0,0,0),Pt=new pme(this.eos_token_id??0,1,this.len,0,0);this.nodes.push(Xe.clone()),this.nodes.push(Pt.clone()),this.begin_nodes[this.len].push(Pt),this.end_nodes[0].push(Xe)}insert(te,Ce,Be,Xe){let Pt=this.nodes.length,At=new pme(Xe,Pt,te,Ce,Be);this.begin_nodes[te].push(At),this.end_nodes[te+Ce].push(At),this.nodes.push(At)}viterbi(){let te=this.len,Ce=0;for(;Ce<=te;){if(this.begin_nodes[Ce].length==0)return[];for(let At of this.begin_nodes[Ce]){At.prev=null;let Ft=0,Mt=null;for(let Wt of this.end_nodes[Ce]){let Kt=Wt.backtrace_score+At.score;(Mt===null||Kt>Ft)&&(Mt=Wt.clone(),Ft=Kt)}if(Mt!==null)At.prev=Mt,At.backtrace_score=Ft;else return[]}++Ce}let Be=[],Xe=this.begin_nodes[te][0].prev;if(Xe===null)return[];let Pt=Xe.clone();for(;Pt.prev!==null;)Be.push(Pt.clone()),Pt=Pt.clone().prev.clone();return Be.reverse(),Be}piece(te){return this.chars.slice(te.pos,te.pos+te.length).join("")}tokens(){return this.viterbi().map(te=>this.piece(te))}token_ids(){return this.viterbi().map(te=>te.token_id)}},fme=Ble;function pMe(te){if(te.length===0)throw new Error("Array must not be empty");let Ce=te[0],Be=0;for(let Xe=1;Xe<te.length;++Xe)te[Xe]<Ce&&(Ce=te[Xe],Be=Xe);return[Ce,Be]}var IXe=class extends dme{constructor(te,Ce){super(te);let Be=te.vocab.length;this.vocab=new Array(Be),this.scores=new Array(Be);for(let Xe=0;Xe<Be;++Xe)[this.vocab[Xe],this.scores[Xe]]=te.vocab[Xe];this.unk_token_id=te.unk_id,this.unk_token=this.vocab[te.unk_id],this.tokens_to_ids=new Map(this.vocab.map((Xe,Pt)=>[Xe,Pt])),this.bos_token=" ",this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=Ce,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.min_score=pMe(this.scores)[0],this.unk_score=this.min_score-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new Qh,this.trie.extend(this.vocab),this.fuse_unk=!0}populate_nodes(te){let Ce=te.chars,Be=1,Xe=0;for(;Xe<Ce.length;){let Pt=!1,At=[],Ft=Ce.slice(Xe).join(""),Mt=this.trie.common_prefix_search(Ft);for(let Wt of Mt){At.push(Wt);let Kt=this.tokens_to_ids.get(Wt),sr=this.scores[Kt],Yr=vR(Wt);te.insert(Xe,Yr,sr,Kt),!Pt&&Yr===Be&&(Pt=!0)}Pt||te.insert(Xe,Be,this.unk_score,this.unk_token_id),Xe+=Be}}tokenize(te){let Ce=new fme(te,this.bos_token_id,this.eos_token_id);return this.populate_nodes(Ce),Ce.tokens()}encode(te){let Ce=[];for(let Be of te){let Xe=this.tokenize(Be);Ce.push(...Xe)}return Ce}},fMe=IXe,a6e=class{constructor(te=(Be,Xe)=>Be>Xe,Ce=1/0){this._heap=[],this._comparator=te,this._max_size=Ce}get size(){return this._heap.length}is_empty(){return this.size===0}peek(){return this._heap[0]}push(...te){return this.extend(te)}extend(te){for(let Ce of te)if(this.size<this._max_size)this._heap.push(Ce),this._sift_up();else{let Be=this._smallest();this._comparator(Ce,this._heap[Be])&&(this._heap[Be]=Ce,this._sift_up_from(Be))}return this.size}pop(){let te=this.peek(),Ce=this.size-1;return Ce>0&&this._swap(0,Ce),this._heap.pop(),this._sift_down(),te}replace(te){let Ce=this.peek();return this._heap[0]=te,this._sift_down(),Ce}_parent(te){return(te+1>>>1)-1}_left(te){return(te<<1)+1}_right(te){return te+1<<1}_greater(te,Ce){return this._comparator(this._heap[te],this._heap[Ce])}_swap(te,Ce){let Be=this._heap[te];this._heap[te]=this._heap[Ce],this._heap[Ce]=Be}_sift_up(){this._sift_up_from(this.size-1)}_sift_up_from(te){for(;te>0&&this._greater(te,this._parent(te));)this._swap(te,this._parent(te)),te=this._parent(te)}_sift_down(){let te=0;for(;this._left(te)<this.size&&this._greater(this._left(te),te)||this._right(te)<this.size&&this._greater(this._right(te),te);){let Ce=this._right(te)<this.size&&this._greater(this._right(te),this._left(te))?this._right(te):this._left(te);this._swap(te,Ce),te=Ce}}_smallest(){return 2**Math.floor(Math.log2(this.size))-1}},mme=a6e,hme=class{constructor(te){this.capacity=te,this.cache=new Map}get(te){if(!this.cache.has(te))return;let Ce=this.cache.get(te);return this.cache.delete(te),this.cache.set(te,Ce),Ce}put(te,Ce){this.cache.has(te)&&this.cache.delete(te),this.cache.set(te,Ce),this.cache.size>this.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}},mMe=hme,hMe=class extends dme{constructor(te){super(te),this.tokens_to_ids=Zm(te.vocab),this.unk_token_id=this.tokens_to_ids.get(te.unk_token),this.unk_token=te.unk_token,this.vocab=new Array(this.tokens_to_ids.size);for(let[Be,Xe]of this.tokens_to_ids)this.vocab[Xe]=Be;let Ce=Array.isArray(te.merges[0]);this.merges=Ce?te.merges:te.merges.map(Be=>Be.split(" ",2)),this.bpe_ranks=new Map(this.merges.map((Be,Xe)=>[JSON.stringify(Be),Xe])),this.end_of_word_suffix=te.end_of_word_suffix,this.continuing_subword_suffix=te.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new mMe(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(te){if(te.length===0)return[];let Ce=this.cache.get(te);if(Ce!==void 0)return Ce;let Be=Array.from(te);this.end_of_word_suffix&&(Be[Be.length-1]+=this.end_of_word_suffix);let Xe=[];if(Be.length>1){let Pt=new mme((Mt,Wt)=>Mt.score<Wt.score),At={token:Be[0],bias:0,prev:null,next:null},Ft=At;for(let Mt=1;Mt<Be.length;++Mt){let Wt={bias:Mt/Be.length,token:Be[Mt],prev:Ft,next:null};Ft.next=Wt,this.add_node(Pt,Ft),Ft=Wt}for(;!Pt.is_empty();){let Mt=Pt.pop();if(Mt.deleted||!Mt.next||Mt.next.deleted)continue;if(Mt.deleted=!0,Mt.next.deleted=!0,Mt.prev){let Kt={...Mt.prev};Mt.prev.deleted=!0,Mt.prev=Kt,Kt.prev?Kt.prev.next=Kt:At=Kt}let Wt={token:Mt.token+Mt.next.token,bias:Mt.bias,prev:Mt.prev,next:Mt.next.next};Wt.prev?(Wt.prev.next=Wt,this.add_node(Pt,Wt.prev)):At=Wt,Wt.next&&(Wt.next.prev=Wt,this.add_node(Pt,Wt))}for(let Mt=At;Mt!==null;Mt=Mt.next)Xe.push(Mt.token)}else Xe=Be;if(this.continuing_subword_suffix)for(let Pt=0;Pt<Xe.length-1;++Pt)Xe[Pt]+=this.continuing_subword_suffix;return te.length<this.max_length_to_cache&&this.cache.put(te,Xe),Xe}add_node(te,Ce){let Be=this.bpe_ranks.get(JSON.stringify([Ce.token,Ce.next.token]));Be!==void 0&&(Ce.score=Be+Ce.bias,te.push(Ce))}encode(te){let Ce=[];for(let Be of te){if(this.ignore_merges&&this.tokens_to_ids.has(Be)){Ce.push(Be);continue}let Xe=this.bpe(Be);for(let Pt of Xe)if(this.tokens_to_ids.has(Pt))Ce.push(Pt);else if(this.byte_fallback){let At=Array.from(this.text_encoder.encode(Pt)).map(Ft=>`<0x${Ft.toString(16).toUpperCase().padStart(2,"0")}>`);At.every(Ft=>this.tokens_to_ids.has(Ft))?Ce.push(...At):Ce.push(this.unk_token)}else Ce.push(this.unk_token)}return Ce}},gMe=hMe,J5=class extends dme{constructor(te,Ce){super(te);let Be=te.vocab;this.tokens_to_ids=Zm(Ce.target_lang?Be[Ce.target_lang]:Be),this.bos_token=Ce.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=Ce.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=Ce.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=Ce.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=new Array(this.tokens_to_ids.size);for(let[Xe,Pt]of this.tokens_to_ids)this.vocab[Pt]=Xe}encode(te){return te}},bR=J5;function Ove(te,Ce){switch(te.type){case"WordPiece":return new _Me(te);case"Unigram":return new fMe(te,Ce.eos_token);case"BPE":return new gMe(te);default:if(te.vocab)return Array.isArray(te.vocab)?new fMe(te,Ce.eos_token):Object.hasOwn(te,"continuing_subword_prefix")&&Object.hasOwn(te,"unk_token")?Object.hasOwn(te,"merges")?new gMe(te):new _Me(te):new bR(te,{target_lang:Ce.target_lang,bos_token:Ce.bos_token,eos_token:Ce.eos_token,pad_token:Ce.pad_token,unk_token:Ce.unk_token});throw new Error(`Unknown TokenizerModel type: ${te?.type}`)}}var XN=Ove,U7=class extends E2{constructor(te){super(),this.config=te}_call(te,...Ce){return this.post_process(te,...Ce)}},eE=U7,$5=class extends eE{post_process(te,Ce=null,Be=!0){let Xe=Ce===null?this.config.single:this.config.pair,Pt=[],At=[];for(let Ft of Xe)"SpecialToken"in Ft?Be&&(Pt.push(Ft.SpecialToken.id),At.push(Ft.SpecialToken.type_id)):"Sequence"in Ft&&(Ft.Sequence.id==="A"?(Pt=cp(Pt,te),At=cp(At,new Array(te.length).fill(Ft.Sequence.type_id))):Ft.Sequence.id==="B"&&(Pt=cp(Pt,Ce),At=cp(At,new Array(Ce.length).fill(Ft.Sequence.type_id))));return{tokens:Pt,token_type_ids:At}}},Ole=$5,iI=class extends eE{post_process(te,Ce=null){return{tokens:Ce?cp(te,Ce):te}}},dht=iI,pht=class extends eE{constructor(te){super(te),this.sep=te.sep,this.cls=te.cls}post_process(te,Ce=null,Be=!0){Be&&(te=cp([this.cls[0]],te,[this.sep[0]]));let Xe=new Array(te.length).fill(0);if(Ce){let Pt=[],At=Be?[this.sep[0]]:[];te=cp(te,Pt,Ce,At),Xe=cp(Xe,new Array(Ce.length+Pt.length+At.length).fill(1))}return{tokens:te,token_type_ids:Xe}}},Lle=pht,NXe=class extends eE{constructor(te){super(te),this.sep=te.sep,this.cls=te.cls}post_process(te,Ce,Be=!0){Be&&(te=cp([this.cls[0]],te,[this.sep[0]]));let Xe=new Array(te.length).fill(0);if(Ce){let Pt=Be?[this.sep[0]]:[],At=Be?[this.sep[0]]:[];te=cp(te,Pt,Ce,At),Xe=cp(Xe,new Array(Ce.length+Pt.length+At.length).fill(1))}return{tokens:te,token_type_ids:Xe}}},PXe=NXe,BXe=class extends eE{constructor(te){super(te),this.processors=(te.processors??[]).map(Ce=>Gre(Ce))}post_process(te,Ce=null,Be=!0){let Xe={tokens:te};for(let Pt of this.processors)Xe=Pt.post_process(Xe.tokens,Ce,Be);return Xe}},gme=BXe;function Tb(te){if(te===null)return null;switch(te.type){case"TemplateProcessing":return new Ole(te);case"ByteLevel":return new dht(te);case"BertProcessing":return new Lle(te);case"RobertaProcessing":return new PXe(te);case"Sequence":return new gme(te);default:throw new Error(`Unknown PostProcessor type: ${te.type}`)}}var Gre=Tb,yMe=class extends E2{constructor(te){super(),this.config=te,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets="trim_offsets"in te?te.trim_offsets:!1}_call(te){return this.decode(te)}decode(te){return this.decode_chain(te).join("")}},J7=yMe,fA=class extends J7{constructor(te){super(te),this.byte_decoder=$_,this.text_decoder=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(te){let Ce=te.join(""),Be=new Uint8Array([...Ce].map(Xe=>this.byte_decoder[Xe]));return this.text_decoder.decode(Be)}decode_chain(te){let Ce=[],Be=[];for(let Xe of te)this.added_tokens.find(Pt=>Pt.content===Xe)!==void 0?(Be.length>0&&(Ce.push(this.convert_tokens_to_string(Be)),Be=[]),Ce.push(Xe)):Be.push(Xe);return Be.length>0&&Ce.push(this.convert_tokens_to_string(Be)),Ce}},AMe=fA,o6e=class extends J7{constructor(te){super(te),this.cleanup=te.cleanup}decode_chain(te){return te.map((Ce,Be)=>{if(Be!==0){let Xe=this.config.prefix;Xe&&Ce.startsWith(Xe)?Ce=Ce.replace(Xe,""):Ce=" "+Ce}return this.cleanup&&(Ce=sMe(Ce)),Ce})}},yme=o6e,vMe=class extends J7{constructor(te){super(te),this.replacement=te.replacement??"\u2581"}decode_chain(te){let Ce=[];for(let Be=0;Be<te.length;++Be){let Xe=te[Be].replaceAll(this.replacement," ");Be==0&&Xe.startsWith(" ")&&(Xe=Xe.substring(1)),Ce.push(Xe)}return Ce}},s6e=vMe,bMe=class extends J7{constructor(te){super(te),this.suffix=te.suffix??""}decode_chain(te){return te.map((Ce,Be)=>Ce.replaceAll(this.suffix,Be===te.length-1?"":" "))}},OXe=bMe,xMe=class extends J7{constructor(te){super(te),this.pad_token=te.pad_token??"",this.word_delimiter_token=te.word_delimiter_token??"",this.cleanup=te.cleanup}convert_tokens_to_string(te){if(te.length===0)return"";let Ce=[te[0]];for(let Xe=1;Xe<te.length;++Xe)te[Xe]!==Ce.at(-1)&&Ce.push(te[Xe]);let Be=Ce.filter(Xe=>Xe!==this.pad_token).join("");return this.cleanup&&(Be=sMe(Be).replaceAll(this.word_delimiter_token," ").trim()),Be}decode_chain(te){return[this.convert_tokens_to_string(te)]}},CMe=xMe,Ame=class extends J7{constructor(te){super(te),this.decoders=(te.decoders??[]).map(Ce=>xme(Ce))}decode_chain(te){return this.decoders.reduce((Ce,Be)=>Be.decode_chain(Ce),te)}},vme=Ame,EMe=class extends J7{decode_chain(te){let Ce=Xb(this.config.pattern),Be=this.config.content??"";return Ce===null?te:te.map(Xe=>Xe.replaceAll(Ce,Be))}},DMe=EMe,SMe=class extends J7{decode_chain(te){return[te.join("")]}},l6e=SMe,tC=class extends J7{constructor(te){super(te),this.content=te.content??"",this.start=te.start??0,this.stop=te.stop??0}decode_chain(te){return te.map(Ce=>{let Be=0;for(let Pt=0;Pt<this.start&&Ce[Pt]===this.content;++Pt)Be=Pt+1;let Xe=Ce.length;for(let Pt=0;Pt<this.stop;++Pt){let At=Ce.length-Pt-1;if(Ce[At]===this.content){Xe=At;continue}else break}return Ce.slice(Be,Xe)})}},c2=tC,Rle=class extends J7{constructor(te){super(te),this.text_decoder=new TextDecoder}decode_chain(te){let Ce=[],Be=[];for(let Xe of te){let Pt=null;if(Xe.length===6&&Xe.startsWith("<0x")&&Xe.endsWith(">")){let At=parseInt(Xe.slice(3,5),16);isNaN(At)||(Pt=At)}if(Pt!==null)Be.push(Pt);else{if(Be.length>0){let At=this.text_decoder.decode(Uint8Array.from(Be));Ce.push(At),Be=[]}Ce.push(Xe)}}if(Be.length>0){let Xe=this.text_decoder.decode(Uint8Array.from(Be));Ce.push(Xe),Be=[]}return Ce}},kMe=Rle;function bme(te){if(te===null)return null;switch(te.type){case"ByteLevel":return new AMe(te);case"WordPiece":return new yme(te);case"Metaspace":return new s6e(te);case"BPEDecoder":return new OXe(te);case"CTC":return new CMe(te);case"Sequence":return new vme(te);case"Replace":return new DMe(te);case"Fuse":return new l6e(te);case"Strip":return new c2(te);case"ByteFallback":return new kMe(te);default:throw new Error(`Unknown Decoder type: ${te.type}`)}}var xme=bme,TMe=class{constructor(te,Ce){let Be=wve(te,"Tokenizer",["model","decoder","post_processor","pre_tokenizer","normalizer"]);if(Be)throw new Error(Be);let Xe=wve(Ce,"Config");if(Xe)throw new Error(Xe);this.tokenizer=te,this.config=Ce,this.normalizer=TXe(this.tokenizer.normalizer),this.pre_tokenizer=CC(this.tokenizer.pre_tokenizer),this.model=XN(this.tokenizer.model,this.config),this.post_processor=Gre(this.tokenizer.post_processor),this.decoder=xme(this.tokenizer.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[],this.tokenizer.added_tokens.forEach(Pt=>{let At=new tht(Pt);this.added_tokens.push(At),this.model.tokens_to_ids.set(At.content,At.id),this.model.vocab[At.id]=At.content,At.special&&(this.special_tokens.push(At.content),this.all_special_ids.push(At.id))}),(this.config.additional_special_tokens??[]).forEach(Pt=>{this.special_tokens.includes(Pt)||this.special_tokens.push(Pt)}),this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.added_tokens_splitter=new AR(this.added_tokens.map(Pt=>Pt.content)),this.added_tokens_map=new Map(this.added_tokens.map(Pt=>[Pt.content,Pt])),this.remove_space=this.config.remove_space,this.clean_up_tokenization_spaces=this.config.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=this.config.do_lowercase_and_remove_accent??!1}encode(te,{text_pair:Ce=null,add_special_tokens:Be=!0,return_token_type_ids:Xe=null}={}){let{tokens:Pt,token_type_ids:At}=this.tokenize_helper(te,{text_pair:Ce,add_special_tokens:Be}),Ft=this.model.convert_tokens_to_ids(Pt),Mt={ids:Ft,tokens:Pt,attention_mask:new Array(Ft.length).fill(1)};return Xe&&At&&(Mt.token_type_ids=At),Mt}decode(te,Ce={}){if(!Array.isArray(te)||te.length===0||!f_(te[0]))throw Error("token_ids must be a non-empty array of integers.");let Be=this.model.convert_ids_to_tokens(te);Ce.skip_special_tokens&&(Be=Be.filter(Pt=>!this.special_tokens.includes(Pt)));let Xe=this.decoder?this.decoder(Be):Be.join(" ");return this.decoder&&this.decoder.end_of_word_suffix&&(Xe=Xe.replaceAll(this.decoder.end_of_word_suffix," "),Ce.skip_special_tokens&&(Xe=Xe.trim())),(Ce.clean_up_tokenization_spaces??this.clean_up_tokenization_spaces)&&(Xe=sMe(Xe)),Xe}tokenize(te,{text_pair:Ce=null,add_special_tokens:Be=!1}={}){return this.tokenize_helper(te,{text_pair:Ce,add_special_tokens:Be}).tokens}encode_text(te){if(te===null)return null;let Ce=this.added_tokens_splitter.split(te);return Ce.forEach((Be,Xe)=>{let Pt=this.added_tokens_map.get(Be);Pt&&(Pt.lstrip&&Xe>0&&(Ce[Xe-1]=Ce[Xe-1].trimEnd()),Pt.rstrip&&Xe<Ce.length-1&&(Ce[Xe+1]=Ce[Xe+1].trimStart()))}),Ce.flatMap((Be,Xe)=>{if(Be.length===0)return[];if(this.added_tokens_map.has(Be))return[Be];if(this.remove_space===!0&&(Be=Be.trim().split(/\s+/).join(" ")),this.do_lowercase_and_remove_accent&&(Be=Tve(Be)),this.normalizer!==null&&(Be=this.normalizer(Be)),Be.length===0)return[];let Pt=this.pre_tokenizer!==null?this.pre_tokenizer(Be,{section_index:Xe}):[Be];return this.model(Pt)})}tokenize_helper(te,{text_pair:Ce=null,add_special_tokens:Be=!0}){let Xe=this.encode_text(te),Pt=this.encode_text(Ce||null);return this.post_processor?this.post_processor(Xe,Pt,Be):{tokens:cp(Xe??[],Pt??[])}}token_to_id(te){return this.model.tokens_to_ids.get(te)}id_to_token(te){return this.model.vocab[te]}get_added_tokens_decoder(){let te=new Map;for(let Ce of this.added_tokens)te.set(Ce.id,Ce);return te}},LXe=TMe,ck=class{type="huggingface";name;modelId;logger;options;tokenizer=null;cacheDir;safeModelName;constructor(te,Ce,Be={}){this.modelId=te,this.logger=Ce,this.options=Be,this.cacheDir=Be.cacheDir||(0,VD.join)((0,XFe.homedir)(),".claude-code-router",".huggingface"),this.safeModelName=te.replace(/\//g,"_").replace(/[^a-zA-Z0-9_-]/g,"_"),this.name=`huggingface-${te.split("/").pop()}`}getCachePaths(){let te=(0,VD.join)(this.cacheDir,this.safeModelName);return{modelDir:te,tokenizerJson:(0,VD.join)(te,"tokenizer.json"),tokenizerConfig:(0,VD.join)(te,"tokenizer_config.json")}}ensureDir(te){(0,M$.existsSync)(te)||(0,M$.mkdirSync)(te,{recursive:!0})}async loadFromCache(){try{let te=this.getCachePaths();if(!(0,M$.existsSync)(te.tokenizerJson)||!(0,M$.existsSync)(te.tokenizerConfig))return null;let[Ce,Be]=await Promise.all([o1.promises.readFile(te.tokenizerJson,"utf-8"),o1.promises.readFile(te.tokenizerConfig,"utf-8")]);return{tokenizerJson:JSON.parse(Ce),tokenizerConfig:JSON.parse(Be)}}catch(te){return this.logger?.warn(`Failed to load from cache: ${te.message}`),null}}async downloadAndCache(){let te=this.getCachePaths(),Ce={json:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer.json`,config:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer_config.json`};this.logger?.info(`Downloading tokenizer files for ${this.modelId}`);let Be=new AbortController,Xe=setTimeout(()=>Be.abort(),this.options.timeout||3e4);try{let[Pt,At]=await Promise.all([fetch(Ce.json,{signal:Be.signal}),fetch(Ce.config,{signal:Be.signal})]);if(!Pt.ok)throw new Error(`Failed to fetch tokenizer.json: ${Pt.statusText}`);let[Ft,Mt]=await Promise.all([Pt.json(),At.ok?At.json():Promise.resolve({})]);return this.ensureDir(te.modelDir),await Promise.all([o1.promises.writeFile(te.tokenizerJson,JSON.stringify(Ft,null,2)),o1.promises.writeFile(te.tokenizerConfig,JSON.stringify(Mt,null,2))]),{tokenizerJson:Ft,tokenizerConfig:Mt}}finally{clearTimeout(Xe)}}async initialize(){try{this.logger?.info(`Initializing HuggingFace tokenizer: ${this.modelId}`);let te=this.getCachePaths();this.ensureDir(this.cacheDir);let Ce=await this.loadFromCache()||await this.downloadAndCache();this.tokenizer=new LXe(Ce.tokenizerJson,Ce.tokenizerConfig),this.logger?.info(`Tokenizer initialized: ${this.name}`)}catch(te){throw this.logger?.error(`Failed to initialize tokenizer: ${te.message}`),new Error(`Failed to initialize HuggingFace tokenizer for ${this.modelId}: ${te.message}`)}}async countTokens(te){if(!this.tokenizer)throw new Error("Tokenizer not initialized");try{let Ce=this.extractTextFromRequest(te);return this.tokenizer.encode(Ce).ids.length}catch(Ce){throw this.logger?.error(`Error counting tokens: ${Ce.message}`),Ce}}isInitialized(){return this.tokenizer!==null}encodeText(te){if(!this.tokenizer)throw new Error("Tokenizer not initialized");return this.tokenizer.encode(te).ids}dispose(){this.tokenizer=null}extractTextFromRequest(te){let Ce=[],{messages:Be,system:Xe,tools:Pt}=te;if(Array.isArray(Be)){for(let At of Be)if(typeof At.content=="string")Ce.push(At.content);else if(Array.isArray(At.content))for(let Ft of At.content)Ft.type==="text"&&Ft.text?Ce.push(Ft.text):Ft.type==="tool_use"&&Ft.input?Ce.push(JSON.stringify(Ft.input)):Ft.type==="tool_result"&&Ce.push(typeof Ft.content=="string"?Ft.content:JSON.stringify(Ft.content))}if(typeof Xe=="string")Ce.push(Xe);else if(Array.isArray(Xe)){for(let At of Xe)if(At.type==="text"){if(typeof At.text=="string")Ce.push(At.text);else if(Array.isArray(At.text))for(let Ft of At.text)Ft&&Ce.push(Ft)}}if(Pt)for(let At of Pt)At.name&&Ce.push(At.name),At.description&&Ce.push(At.description),At.input_schema&&Ce.push(JSON.stringify(At.input_schema));return Ce.join(" ")}},wMe=class{type="api";name;config;logger;options;constructor(te,Ce,Be={}){if(!te.url||!te.apiKey)throw new Error("API tokenizer requires url and apiKey");this.config={url:te.url,apiKey:te.apiKey,requestFormat:te.requestFormat||"standard",responseField:te.responseField||"token_count",headers:te.headers||{}},this.logger=Ce,this.options=Be;try{let Xe=new URL(te.url);this.name=`api-${Xe.hostname}`}catch{this.name=`api-${te.url}`}}async initialize(){try{new URL(this.config.url)}catch{throw new Error(`Invalid API URL: ${this.config.url}`)}}async countTokens(te){try{let Ce=this.formatRequestBody(te),Be={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},Xe=new AbortController,Pt=setTimeout(()=>Xe.abort(),this.options.timeout||3e4),At=await fetch(this.config.url,{method:"POST",headers:Be,body:JSON.stringify(Ce),signal:Xe.signal});if(clearTimeout(Pt),!At.ok)throw new Error(`API tokenizer request failed: ${At.status} ${At.statusText}`);let Ft=await At.json();return this.extractTokenCount(Ft)}catch(Ce){throw Ce.name==="AbortError"?new Error("API tokenizer request timed out"):Ce}}isInitialized(){return!0}dispose(){}formatRequestBody(te){switch(this.config.requestFormat){case"standard":return te;case"openai":return{model:"gpt-3.5-turbo",messages:this.extractMessagesAsOpenAIFormat(te)};case"anthropic":return{messages:te.messages||[],system:te.system,tools:te.tools};case"custom":return{text:this.extractConcatenatedText(te)};default:return te}}extractMessagesAsOpenAIFormat(te){return te.messages?te.messages.map(Ce=>({role:Ce.role,content:this.extractTextFromMessage(Ce)})):[]}extractTextFromMessage(te){return typeof te.content=="string"?te.content:Array.isArray(te.content)?te.content.map(Ce=>Ce.type==="text"&&Ce.text?Ce.text:Ce.type==="tool_use"&&Ce.input?JSON.stringify(Ce.input):Ce.type==="tool_result"?typeof Ce.content=="string"?Ce.content:JSON.stringify(Ce.content):"").join(" "):""}extractConcatenatedText(te){let Ce=[];return te.messages&&te.messages.forEach(Be=>{Ce.push(this.extractTextFromMessage(Be))}),typeof te.system=="string"?Ce.push(te.system):Array.isArray(te.system)&&te.system.forEach(Be=>{Be.type==="text"&&(typeof Be.text=="string"?Ce.push(Be.text):Array.isArray(Be.text)&&Be.text.forEach(Xe=>{Xe&&Ce.push(Xe)}))}),te.tools&&te.tools.forEach(Be=>{Be.name&&Ce.push(Be.name),Be.description&&Ce.push(Be.description),Be.input_schema&&Ce.push(JSON.stringify(Be.input_schema))}),Ce.join(" ")}extractTokenCount(te){try{let Ce=this.config.responseField,Be=Ce.split("."),Xe=te;for(let Pt of Be){if(Xe==null)throw new Error(`Field path '${Ce}' not found in response`);Xe=Xe[Pt]}if(typeof Xe!="number")throw new Error(`Expected number at field path '${Ce}', got ${typeof Xe}`);return Xe}catch(Ce){throw this.logger?.error(`Failed to extract token count from API response: ${Ce.message}. Response: ${JSON.stringify(te)}`),new Error(`Invalid response from API tokenizer: ${Ce.message}`)}}},Lve=class{tokenizers=new Map;configService;logger;options;fallbackTokenizer;constructor(te,Ce,Be={}){this.configService=te,this.logger=Ce,this.options={timeout:Be.timeout??3e4,...Be}}async initialize(){try{this.fallbackTokenizer=new Jre("cl100k_base"),await this.fallbackTokenizer.initialize(),this.tokenizers.set("fallback",this.fallbackTokenizer),this.logger?.info("TokenizerService initialized successfully")}catch(te){throw this.logger?.error(`TokenizerService initialization error: ${te.message}`),te}}async getTokenizer(te){let Ce=this.getCacheKey(te);if(this.tokenizers.has(Ce))return this.tokenizers.get(Ce);let Be;try{switch(te.type){case"tiktoken":Be=new Jre(te.encoding||"cl100k_base");break;case"huggingface":this.logger?.info(`Initializing HuggingFace tokenizer for model: ${te.model}`),Be=new ck(te.model,this.logger,{timeout:this.options.timeout});break;case"api":Be=new wMe(te,this.logger,{timeout:this.options.timeout});break;default:throw new Error(`Unknown tokenizer type: ${te.type}`)}return this.logger?.info(`Calling initialize() on ${te.type} tokenizer...`),await Be.initialize(),this.tokenizers.set(Ce,Be),this.logger?.info(`Tokenizer initialized successfully: ${te.type} (${Ce})`),Be}catch(Xe){return this.logger?.error(`Failed to initialize ${te.type} tokenizer: ${Xe.message}`),this.logger?.error(`Error stack: ${Xe.stack}`),this.fallbackTokenizer||await this.initialize(),this.fallbackTokenizer}}async countTokens(te,Ce){let Be=Ce?await this.getTokenizer(Ce):this.fallbackTokenizer;return{tokenCount:await Be.countTokens(te),tokenizerUsed:Be.name,cached:!1}}getTokenizerConfigForModel(te,Ce){let Be=(this.configService.get("providers")||[]).find(Xe=>Xe.name===te);if(Be?.tokenizer)return Be.tokenizer.models?.[Ce]?Be.tokenizer.models[Ce]:Be.tokenizer.default}dispose(){this.tokenizers.forEach(te=>{try{te.dispose()}catch(Ce){this.logger?.error(`Error disposing tokenizer: ${Ce}`)}}),this.tokenizers.clear()}getCacheKey(te){switch(te.type){case"tiktoken":return`tiktoken:${te.encoding||"cl100k_base"}`;case"huggingface":return`hf:${te.model}`;case"api":return`api:${te.url}`;default:return`unknown:${JSON.stringify(te)}`}}},VY=uft(),FMe=class{capacity;cache;constructor(te){this.capacity=te,this.cache=new Map}get(te){if(!this.cache.has(te))return;let Ce=this.cache.get(te);return this.cache.delete(te),this.cache.set(te,Ce),Ce}put(te,Ce){if(this.cache.has(te))this.cache.delete(te);else if(this.cache.size>=this.capacity){let Be=this.cache.keys().next().value;Be!==void 0&&this.cache.delete(Be)}this.cache.set(te,Ce)}values(){return Array.from(this.cache.values())}},xR=new FMe(100),Cme=require("fs/promises"),z5=require("fs/promises"),IMe=require("path"),Eme=vZe(),c6e=u6t(),oy=(0,VY.get_encoding)("cl100k_base"),zs=(te,Ce,Be)=>{let Xe=0;return Array.isArray(te)&&te.forEach(Pt=>{typeof Pt.content=="string"?Xe+=oy.encode(Pt.content).length:Array.isArray(Pt.content)&&Pt.content.forEach(At=>{At.type==="text"?Xe+=oy.encode(At.text).length:At.type==="tool_use"?Xe+=oy.encode(JSON.stringify(At.input)).length:At.type==="tool_result"&&(Xe+=oy.encode(typeof At.content=="string"?At.content:JSON.stringify(At.content)).length)})}),typeof Ce=="string"?Xe+=oy.encode(Ce).length:Array.isArray(Ce)&&Ce.forEach(Pt=>{Pt.type==="text"&&(typeof Pt.text=="string"?Xe+=oy.encode(Pt.text).length:Array.isArray(Pt.text)&&Pt.text.forEach(At=>{Xe+=oy.encode(At||"").length}))}),Be&&Be.forEach(Pt=>{Pt.description&&(Xe+=oy.encode(Pt.name+Pt.description).length),Pt.input_schema&&(Xe+=oy.encode(JSON.stringify(Pt.input_schema)).length)}),Xe},Wre=async(te,Ce)=>{if(te.sessionId){let Be=await ib(te.sessionId);if(Be){let Xe=(0,IMe.join)(Eme.HOME_DIR,Be,"config.json"),Pt=(0,IMe.join)(Eme.HOME_DIR,Be,`${te.sessionId}.json`);try{let At=JSON.parse(await(0,Cme.readFile)(Pt,"utf8"));if(At&&At.Router)return At.Router}catch{}try{let At=JSON.parse(await(0,Cme.readFile)(Xe,"utf8"));if(At&&At.Router)return At.Router}catch{}}}};function wf(te){let Ce=te||"";return Ce.includes(",")&&(Ce=Ce.split(",").pop()||Ce),Ce.includes("/")&&(Ce=Ce.split("/").pop()||Ce),Ce.includes(":")&&(Ce=Ce.split(":")[0]),Ce.trim().toLowerCase()}function tA(te){let Ce=wf(te),Be=Ce.match(/claude-(?:\d+-\d+-|\d+-)?(sonnet|opus|haiku)(?:-|$)/i)||Ce.match(/claude-(sonnet|opus|haiku)(?:-|$)/i);return Be?Be[1].toLowerCase():null}function up(te,Ce){if(!Ce||!te)return null;let Be=wf(te);if(Ce[te])return Ce[te];if(Ce[Be])return Ce[Be];let Xe=tA(te);if(Xe&&Ce[Xe])return Ce[Xe];for(let[Pt,At]of Object.entries(Ce)){let Ft=wf(Pt);if(Ft&&Be.includes(Ft))return At}return null}function ju(te,Ce,Be){if(!te?.includes(","))return te;let[Xe,...Pt]=te.split(","),At=Xe.trim(),Ft=Pt.join(",").trim();if(!Be&&!Pre().isAvailable(At,Ft))return null;let Mt=Ce.find(Kt=>Kt.name.toLowerCase()===At.toLowerCase()),Wt=Mt?.models?.find(Kt=>String(Kt).toLowerCase()===Ft.toLowerCase());return Mt&&Wt?`${Mt.name},${Wt}`:te}function xG(te){return te.body.messages?.some(Ce=>Ce.role==="user"&&Array.isArray(Ce.content)&&Ce.content.some(Be=>Be.type==="image"||Be.type==="image_url"||Array.isArray(Be?.content)&&Be.content.some(Xe=>Xe.type==="image"||Xe.type==="image_url")))}function u2(te){let Ce=wf(te);return[/claude/i,/gemini/i,/gpt-4o/i,/gpt-4\.1/i,/gpt-4-vision/i,/qwen.*vl/i,/glm-4v/i,/grok.*vision/i,/pixtral/i,/llava/i].some(Be=>Be.test(Ce))}function RXe(te,Ce,Be,Xe,Pt){let At=Be.longContextThreshold||6e4;if(Ce>2e5&&Be.extendedContext){let Wt=ju(Be.extendedContext,Xe);if(Wt)return te.log.info(`Family: using extended context model (1M+), tokens: ${Ce}`),{model:Wt,scenarioType:"extendedContext"};te.log.warn("Family: extendedContext model unavailable (fail pool), skipping")}let Ft=Pt&&Pt.input_tokens>At&&Ce>2e4,Mt=Ce>At;if((Ft||Mt)&&Be.longContext){let Wt=ju(Be.longContext,Xe);if(Wt)return te.log.info(`Family: using long context model, tokens: ${Ce}`),{model:Wt,scenarioType:"longContext"};te.log.warn("Family: longContext model unavailable (fail pool), skipping")}if(Array.isArray(te.body.tools)&&te.body.tools.some(Wt=>Wt.type?.startsWith("web_search"))&&Be.webSearch){let Wt=ju(Be.webSearch,Xe);if(Wt)return{model:Wt,scenarioType:"webSearch"};te.log.warn("Family: webSearch model unavailable (fail pool), skipping")}if(te.body.thinking&&Be.think){let Wt=ju(Be.think,Xe);if(Wt)return{model:Wt,scenarioType:"think"};te.log.warn("Family: think model unavailable (fail pool), skipping")}if(Be.default){let Wt=ju(Be.default,Xe);if(Wt)return{model:Wt,scenarioType:"default"};te.log.warn("Family: default model unavailable (fail pool), skipping")}return null}var u6e=async(te,Ce,Be,Xe)=>{let Pt=await Wre(te,Be),At=Be.get("providers")||[],Ft=Pt||Be.get("Router");if(te.body.model.includes(",")){let mt=ju(te.body.model,At);if(mt)return{model:mt,scenarioType:"default"};te.log.warn(`Explicit model ${te.body.model} unavailable (fail pool), trying alternatives`)}let Mt=tA(te.body.model),Wt=Ft?.families?.[Mt||""];if(Wt){te.log.info(`Using model family routing for: ${Mt}`),te.modelFamily=Mt,te.familyFallback=Wt.fallback;let mt=RXe(te,Ce,Wt,At,Xe);if(mt)return mt}let Kt=up(te.body.model,Ft?.models);if(Kt){let mt=ju(Kt,At);if(mt)return te.log.info(`Using mapped model for ${te.body.model}: ${Kt}`),{model:mt,scenarioType:"modelMapping"};te.log.warn(`Mapped model ${Kt} unavailable (fail pool), skipping`)}let sr=Ft?.extendedContextThreshold||2e5;if(Ce>sr&&Ft?.extendedContext)return te.log.info(`Using extended context (1M) model due to token count: ${Ce}, threshold: ${sr}`),{model:Ft.extendedContext,scenarioType:"extendedContext"};let Yr=Ft?.longContextThreshold||6e4,Wr=Xe&&Xe.input_tokens>Yr&&Ce>2e4,tr=Ce>Yr;if((Wr||tr)&&Ft?.longContext)return te.log.info(`Using long context model due to token count: ${Ce}, threshold: ${Yr}`),{model:Ft.longContext,scenarioType:"longContext"};if(te.body?.system?.length>1&&te.body?.system[1]?.text?.startsWith("<CCR-SUBAGENT-MODEL>")){let mt=te.body?.system[1].text.match(/<CCR-SUBAGENT-MODEL>(.*?)<\/CCR-SUBAGENT-MODEL>/s);if(mt)return te.body.system[1].text=te.body.system[1].text.replace(`<CCR-SUBAGENT-MODEL>${mt[1]}</CCR-SUBAGENT-MODEL>`,""),{model:mt[1],scenarioType:"default"}}let Dr=Be.get("Router");return te.body.model?.includes("claude")&&te.body.model?.includes("haiku")&&Dr?.background?(te.log.info(`Using background model for ${te.body.model}`),{model:Dr.background,scenarioType:"background"}):Array.isArray(te.body.tools)&&te.body.tools.some(mt=>mt.type?.startsWith("web_search"))&&Ft?.webSearch?{model:Ft.webSearch,scenarioType:"webSearch"}:te.body.thinking&&Ft?.think?(te.log.info(`Using think model for ${te.body.thinking}`),{model:Ft.think,scenarioType:"think"}):{model:Ft?.default,scenarioType:"default"}},Vre=async(te,Ce,Be)=>{let{configService:Xe,event:Pt}=Be;if(te.body.metadata?.user_id){let Wr=te.body.metadata.user_id.split("_session_");Wr.length>1&&(te.sessionId=Wr[1])}let At=await Wre(te,Xe)||Xe.get("Router"),Ft=Xe.get("providers")||[],Mt=xR.get(te.sessionId),{messages:Wt,system:Kt=[],tools:sr}=te.body,Yr=Xe.get("REWRITE_SYSTEM_PROMPT");if(Yr&&Kt.length>1&&Kt[1]?.text?.includes("<env>")){let Wr=await(0,Cme.readFile)(Yr,"utf-8");Kt[1].text=`${Wr}<env>${Kt[1].text.split("<env>").pop()}`}try{let[Wr,tr]=te.body.model.split(","),Dr=Be.tokenizerService?.getTokenizerConfigForModel(Wr,tr),mt;Be.tokenizerService?mt=(await Be.tokenizerService.countTokens({messages:Wt,system:Kt,tools:sr},Dr)).tokenCount:mt=zs(Wt,Kt,sr),te.tokenCount=mt;let bn,$r=Xe.get("CUSTOM_ROUTER_PATH");if($r)try{bn=await require($r)(te,Xe.getAll(),{event:Pt})}catch(Tr){te.log.error(`failed to load custom router: ${Tr.message}`)}if(bn)te.scenarioType="default";else{let Tr=await u6e(te,mt,Xe,Mt);bn=Tr.model,te.scenarioType=Tr.scenarioType}if(At?.image&&bn!==At.image&&xG(te)&&!u2(bn)){let Tr=ju(At.image,Ft);Tr?(te.log.info(`Using image model fallback for ${bn}`),bn=Tr,te.scenarioType="image"):te.log.warn(`Image model ${At.image} unavailable (fail pool), keeping ${bn}`)}te.body.model=bn}catch(Wr){te.log.error(`Error in router middleware: ${Wr.message}`),te.body.model=At?.default,te.scenarioType="default"}},Mle=new c6e.LRUCache({max:1e3}),ib=async te=>{if(Mle.has(te)){let Ce=Mle.get(te);return!Ce||Ce===""?null:Ce}try{let Ce=await(0,z5.opendir)(Eme.CLAUDE_PROJECTS_DIR),Be=[];for await(let At of Ce)At.isDirectory()&&Be.push(At.name);let Xe=Be.map(async At=>{let Ft=(0,IMe.join)(Eme.CLAUDE_PROJECTS_DIR,At,`${te}.jsonl`);try{return(await(0,z5.stat)(Ft)).isFile()?At:null}catch{return null}}),Pt=await Promise.all(Xe);for(let At of Pt)if(At)return Mle.set(te,At),At;return Mle.set(te,""),null}catch(Ce){return console.error("Error searching for project by session:",Ce),Mle.set(te,""),null}},Rve=class{plugins=new Map;pluginInstances=new Map;registerPlugin(te,Ce={}){this.pluginInstances.set(te.name,te),this.plugins.set(te.name,{name:te.name,enabled:Ce.enabled!==!1,options:Ce})}async enablePlugin(te,Ce){let Be=this.plugins.get(te),Xe=this.pluginInstances.get(te);if(!Be||!Xe)throw new Error(`Plugin ${te} not found`);Be.enabled&&await Ce.register(Xe.register,Be.options)}async enablePlugins(te){for(let[Ce,Be]of this.plugins)if(Be.enabled)try{await this.enablePlugin(Ce,te)}catch(Xe){let Pt=Xe instanceof Error?Xe.message:String(Xe);te.log?.error(`Failed to enable plugin ${Ce}: ${Pt}`)}}getPlugins(){return Array.from(this.plugins.values())}getPlugin(te){return this.pluginInstances.get(te)}hasPlugin(te){return this.pluginInstances.has(te)}isPluginEnabled(te){return this.plugins.get(te)?.enabled||!1}setPluginEnabled(te,Ce){let Be=this.plugins.get(te);Be&&(Be.enabled=Ce)}removePlugin(te){this.plugins.delete(te),this.pluginInstances.delete(te)}clear(){this.plugins.clear(),this.pluginInstances.clear()}},Ff=new Rve,Mve=Q(Ire(),1),t9=class extends TransformStream{buffer="";currentEvent={};constructor(){super({transform:(te,Ce)=>{this.buffer+=te;let Be=this.buffer.split(`
1285
+ `:case"\r":return!1;default:return new RegExp("^\\p{Cc}|\\p{Cf}|\\p{Co}|\\p{Cs}$","u").test(te)}}clean_text(te){let Ce=[];for(let Be of te){let Xe=Be.charCodeAt(0);Xe===0||Xe===65533||this.is_control(Be)||(/^\s$/.test(Be)?Ce.push(" "):Ce.push(Be))}return Ce.join("")}normalize(te){return this.config.clean_text&&(te=this.clean_text(te)),this.config.handle_chinese_chars&&(te=this.tokenize_chinese_chars(te)),this.config.lowercase?(te=te.toLowerCase(),this.config.strip_accents!==!1&&(te=this.strip_accents(te))):this.config.strip_accents&&(te=this.strip_accents(te)),te}},e6e=Fve,lMe=class extends e9{constructor(te){super(te),this.charsmap=te.precompiled_charsmap??null}normalize(te){return te=te.replace(/[\u0001-\u0008\u000B\u000E-\u001F\u007F\u008F\u009F]/gm,""),te=te.replace(/[\u0009\u000A\u000C\u000D\u00A0\u1680\u2000-\u200F\u2028\u2029\u202F\u205F\u2581\u3000\uFEFF\uFFFD]/gm," "),te.includes("\uFF5E")?te=te.split("\uFF5E").map(Ce=>Ce.normalize("NFKC")).join("\uFF5E"):te=te.normalize("NFKC"),te}},CXe=lMe,EXe=class extends e9{constructor(te){super(te),this.normalizers=(te.normalizers??[]).map(Ce=>TXe(Ce))}normalize(te){return this.normalizers.reduce((Ce,Be)=>Be?Be.normalize(Ce):Ce,te)}},Q7=EXe,Pw=class extends e9{normalize(te){let Ce=Xb(this.config.pattern??{});return Ce===null?te:te.replaceAll(Ce,this.config.content??"")}},t6e=Pw,DXe=class extends e9{constructor(){super(...arguments),this.form="NFC"}normalize(te){return te=te.normalize(this.form),te}},kS=DXe,Fle=class extends kS{constructor(){super(...arguments),this.form="NFC"}},zre=Fle,GY=class extends kS{constructor(){super(...arguments),this.form="NFD"}},Ile=GY,Ive=class extends kS{constructor(){super(...arguments),this.form="NFKC"}},pe=Ive,z=class extends kS{constructor(){super(...arguments),this.form="NFKD"}},KD=z,cMe=class extends e9{normalize(te){return this.config.strip_left&&this.config.strip_right?te=te.trim():(this.config.strip_left&&(te=te.trimStart()),this.config.strip_right&&(te=te.trimEnd())),te}},Nve=cMe,rht=class extends e9{normalize(te){return xXe(te)}},SXe=rht,kXe=class extends e9{normalize(te){return te.toLowerCase()}},nht=kXe,iht=class extends e9{normalize(te){return te=this.config.prepend+te,te}},aht=iht;function oht(te){if(te===null)return null;switch(te.type){case"BertNormalizer":return new e6e(te);case"Precompiled":return new CXe(te);case"Sequence":return new Q7(te);case"Replace":return new t6e(te);case"NFC":return new zre(te);case"NFD":return new Ile(te);case"NFKC":return new pe(te);case"NFKD":return new KD(te);case"Strip":return new Nve(te);case"StripAccents":return new SXe(te);case"Lowercase":return new nht(te);case"Prepend":return new aht(te);default:throw new Error(`Unknown Normalizer type: ${te.type}`)}}var TXe=oht,sht=class extends E2{pre_tokenize(te,Ce){return(Array.isArray(te)?te.map(Be=>this.pre_tokenize_text(Be,Ce)):this.pre_tokenize_text(te,Ce)).flat()}_call(te,Ce){return this.pre_tokenize(te,Ce)}},vG=sht,lht=class extends vG{constructor(te){super(),this.config=te,this.add_prefix_space=this.config.add_prefix_space??!1,this.trim_offsets=this.config.trim_offsets??!1,this.use_regex=this.config.use_regex??!0,this.pattern=new RegExp("'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+","gu"),this.byte_encoder=ume,this.text_encoder=new TextEncoder}pre_tokenize_text(te,Ce){return this.add_prefix_space&&!te.startsWith(" ")&&(te=" "+te),(this.use_regex?te.match(this.pattern)||[]:[te]).map(Be=>Array.from(this.text_encoder.encode(Be),Xe=>this.byte_encoder[Xe]).join(""))}},r6e=lht,Pve=class extends vG{pre_tokenize_text(te,Ce){return te.match(/\w+|[^\w\s]+/g)||[]}},cht=Pve,wXe=class extends vG{constructor(te){super(),this.replacement=te.replacement??"\u2581",this.str_rep=te.str_rep||this.replacement,this.prepend_scheme=te.prepend_scheme??"always"}pre_tokenize_text(te,Ce){let{section_index:Be=void 0}=Ce??{},Xe=te.replaceAll(" ",this.str_rep);return!Xe.startsWith(this.replacement)&&(this.prepend_scheme==="always"||this.prepend_scheme==="first"&&Be===0)&&(Xe=this.str_rep+Xe),[Xe]}},uht=wXe,fh=class extends vG{constructor(te){super(),this.config=te,this.pattern=Xb(this.config.pattern??{},this.config.invert??!0)}pre_tokenize_text(te){return this.pattern===null?[]:this.config.invert?te.match(this.pattern)||[]:this.config.behavior?.toLowerCase()==="removed"?te.split(this.pattern).filter(Ce=>Ce):bXe(te,this.pattern)}},bG=fh,_ht=class extends vG{constructor(te){super(),this.config=te,this.pattern=new RegExp(`[^${kve}]+|[${kve}]+`,"gu")}pre_tokenize_text(te){return te.match(this.pattern)||[]}},FXe=_ht,n6e=class extends vG{constructor(te){super(),this.config=te;let Ce=`[^\\d]+|\\d${this.config.individual_digits?"":"+"}`;this.pattern=new RegExp(Ce,"gu")}pre_tokenize_text(te){return te.match(this.pattern)||[]}},WY=n6e,_me=class extends vG{constructor(){super(),this.pattern=new RegExp(`[^\\s${kve}]+|[${kve}]`,"gu")}pre_tokenize_text(te,Ce){return te.trim().match(this.pattern)||[]}},Bve=_me,Q5=class extends vG{constructor(te){super(),this.config=te,this.pattern=Xb(this.config.pattern??{}),this.content=this.config.content??""}pre_tokenize_text(te){return this.pattern===null?[te]:[te.replaceAll(this.pattern,this.config.content??"")]}},qre=Q5,Nle=class extends vG{constructor(te){super(),this.tokenizers=(te.pretokenizers??[]).map(Ce=>CC(Ce))}pre_tokenize_text(te,Ce){return this.tokenizers.reduce((Be,Xe)=>Xe?Xe.pre_tokenize(Be,Ce):Be,[te])}},Ple=Nle,Xm=class extends vG{pre_tokenize_text(te){return Sy(te)}},U5=Xm;function E4(te){if(te===null)return null;switch(te.type){case"BertPreTokenizer":return new Bve;case"Sequence":return new Ple(te);case"Whitespace":return new cht;case"WhitespaceSplit":return new U5;case"Metaspace":return new uht(te);case"ByteLevel":return new r6e(te);case"Split":return new bG(te);case"Punctuation":return new FXe(te);case"Digits":return new WY(te);case"Replace":return new qre(te);default:throw new Error(`Unknown PreTokenizer type: ${te.type}`)}}var CC=E4,Hre=class extends E2{constructor(te){super(),this.config=te,this.vocab=[],this.tokens_to_ids=new Map,this.unk_token_id=void 0,this.unk_token=void 0,this.end_of_word_suffix=void 0,this.fuse_unk=this.config.fuse_unk??!1}_call(te){let Ce=this.encode(te);return this.fuse_unk&&(Ce=Tx(Ce,this.tokens_to_ids,this.unk_token_id)),Ce}convert_tokens_to_ids(te){return te.map(Ce=>this.tokens_to_ids.get(Ce)??this.unk_token_id)}convert_ids_to_tokens(te){return te.map(Ce=>this.vocab[Number(Ce)]??this.unk_token)}},dme=Hre,uMe=class extends dme{constructor(te){super(te),this.max_input_chars_per_word=100,this.tokens_to_ids=Zm(te.vocab),this.unk_token_id=this.tokens_to_ids.get(te.unk_token),this.unk_token=te.unk_token,this.max_input_chars_per_word=te.max_input_chars_per_word??100,this.vocab=new Array(this.tokens_to_ids.size);for(let[Ce,Be]of this.tokens_to_ids)this.vocab[Be]=Ce}encode(te){let Ce=[];for(let Be of te){let Xe=[...Be];if(Xe.length>this.max_input_chars_per_word){Ce.push(this.unk_token);continue}let Pt=!1,At=0,Ft=[];for(;At<Xe.length;){let Mt=Xe.length,Wt=null;for(;At<Mt;){let Kt=Xe.slice(At,Mt).join("");if(At>0&&(Kt=this.config.continuing_subword_prefix+Kt),this.tokens_to_ids.has(Kt)){Wt=Kt;break}--Mt}if(Wt===null){Pt=!0;break}Ft.push(Wt),At=Mt}Pt?Ce.push(this.unk_token):Ce.push(...Ft)}return Ce}},_Me=uMe,i6e=class q6t{constructor(Ce,Be){this.is_leaf=Ce,this.children=Be}static default(){return new q6t(!1,new Map)}},dMe=class{constructor(){this.root=i6e.default()}extend(te){for(let Ce of te)this.push(Ce)}push(te){let Ce=this.root;for(let Be of te){let Xe=Ce.children.get(Be);Xe===void 0&&(Xe=i6e.default(),Ce.children.set(Be,Xe)),Ce=Xe}Ce.is_leaf=!0}*common_prefix_search(te){let Ce=this.root;if(Ce===void 0)return;let Be="";for(let Xe of te){if(Be+=Xe,Ce=Ce.children.get(Xe),Ce===void 0)return;Ce.is_leaf&&(yield Be)}}},Qh=dMe,pme=class H6t{constructor(Ce,Be,Xe,Pt,At){this.token_id=Ce,this.node_id=Be,this.pos=Xe,this.length=Pt,this.score=At,this.prev=null,this.backtrace_score=0}clone(){let Ce=new H6t(this.token_id,this.node_id,this.pos,this.length,this.score);return Ce.prev=this.prev,Ce.backtrace_score=this.backtrace_score,Ce}},Ble=class{constructor(te,Ce,Be){this.chars=Array.from(te),this.len=this.chars.length,this.bos_token_id=Ce,this.eos_token_id=Be,this.nodes=[],this.begin_nodes=Array.from({length:this.len+1},()=>[]),this.end_nodes=Array.from({length:this.len+1},()=>[]);let Xe=new pme(this.bos_token_id??0,0,0,0,0),Pt=new pme(this.eos_token_id??0,1,this.len,0,0);this.nodes.push(Xe.clone()),this.nodes.push(Pt.clone()),this.begin_nodes[this.len].push(Pt),this.end_nodes[0].push(Xe)}insert(te,Ce,Be,Xe){let Pt=this.nodes.length,At=new pme(Xe,Pt,te,Ce,Be);this.begin_nodes[te].push(At),this.end_nodes[te+Ce].push(At),this.nodes.push(At)}viterbi(){let te=this.len,Ce=0;for(;Ce<=te;){if(this.begin_nodes[Ce].length==0)return[];for(let At of this.begin_nodes[Ce]){At.prev=null;let Ft=0,Mt=null;for(let Wt of this.end_nodes[Ce]){let Kt=Wt.backtrace_score+At.score;(Mt===null||Kt>Ft)&&(Mt=Wt.clone(),Ft=Kt)}if(Mt!==null)At.prev=Mt,At.backtrace_score=Ft;else return[]}++Ce}let Be=[],Xe=this.begin_nodes[te][0].prev;if(Xe===null)return[];let Pt=Xe.clone();for(;Pt.prev!==null;)Be.push(Pt.clone()),Pt=Pt.clone().prev.clone();return Be.reverse(),Be}piece(te){return this.chars.slice(te.pos,te.pos+te.length).join("")}tokens(){return this.viterbi().map(te=>this.piece(te))}token_ids(){return this.viterbi().map(te=>te.token_id)}},fme=Ble;function pMe(te){if(te.length===0)throw new Error("Array must not be empty");let Ce=te[0],Be=0;for(let Xe=1;Xe<te.length;++Xe)te[Xe]<Ce&&(Ce=te[Xe],Be=Xe);return[Ce,Be]}var IXe=class extends dme{constructor(te,Ce){super(te);let Be=te.vocab.length;this.vocab=new Array(Be),this.scores=new Array(Be);for(let Xe=0;Xe<Be;++Xe)[this.vocab[Xe],this.scores[Xe]]=te.vocab[Xe];this.unk_token_id=te.unk_id,this.unk_token=this.vocab[te.unk_id],this.tokens_to_ids=new Map(this.vocab.map((Xe,Pt)=>[Xe,Pt])),this.bos_token=" ",this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=Ce,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.min_score=pMe(this.scores)[0],this.unk_score=this.min_score-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new Qh,this.trie.extend(this.vocab),this.fuse_unk=!0}populate_nodes(te){let Ce=te.chars,Be=1,Xe=0;for(;Xe<Ce.length;){let Pt=!1,At=[],Ft=Ce.slice(Xe).join(""),Mt=this.trie.common_prefix_search(Ft);for(let Wt of Mt){At.push(Wt);let Kt=this.tokens_to_ids.get(Wt),sr=this.scores[Kt],Yr=vR(Wt);te.insert(Xe,Yr,sr,Kt),!Pt&&Yr===Be&&(Pt=!0)}Pt||te.insert(Xe,Be,this.unk_score,this.unk_token_id),Xe+=Be}}tokenize(te){let Ce=new fme(te,this.bos_token_id,this.eos_token_id);return this.populate_nodes(Ce),Ce.tokens()}encode(te){let Ce=[];for(let Be of te){let Xe=this.tokenize(Be);Ce.push(...Xe)}return Ce}},fMe=IXe,a6e=class{constructor(te=(Be,Xe)=>Be>Xe,Ce=1/0){this._heap=[],this._comparator=te,this._max_size=Ce}get size(){return this._heap.length}is_empty(){return this.size===0}peek(){return this._heap[0]}push(...te){return this.extend(te)}extend(te){for(let Ce of te)if(this.size<this._max_size)this._heap.push(Ce),this._sift_up();else{let Be=this._smallest();this._comparator(Ce,this._heap[Be])&&(this._heap[Be]=Ce,this._sift_up_from(Be))}return this.size}pop(){let te=this.peek(),Ce=this.size-1;return Ce>0&&this._swap(0,Ce),this._heap.pop(),this._sift_down(),te}replace(te){let Ce=this.peek();return this._heap[0]=te,this._sift_down(),Ce}_parent(te){return(te+1>>>1)-1}_left(te){return(te<<1)+1}_right(te){return te+1<<1}_greater(te,Ce){return this._comparator(this._heap[te],this._heap[Ce])}_swap(te,Ce){let Be=this._heap[te];this._heap[te]=this._heap[Ce],this._heap[Ce]=Be}_sift_up(){this._sift_up_from(this.size-1)}_sift_up_from(te){for(;te>0&&this._greater(te,this._parent(te));)this._swap(te,this._parent(te)),te=this._parent(te)}_sift_down(){let te=0;for(;this._left(te)<this.size&&this._greater(this._left(te),te)||this._right(te)<this.size&&this._greater(this._right(te),te);){let Ce=this._right(te)<this.size&&this._greater(this._right(te),this._left(te))?this._right(te):this._left(te);this._swap(te,Ce),te=Ce}}_smallest(){return 2**Math.floor(Math.log2(this.size))-1}},mme=a6e,hme=class{constructor(te){this.capacity=te,this.cache=new Map}get(te){if(!this.cache.has(te))return;let Ce=this.cache.get(te);return this.cache.delete(te),this.cache.set(te,Ce),Ce}put(te,Ce){this.cache.has(te)&&this.cache.delete(te),this.cache.set(te,Ce),this.cache.size>this.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}},mMe=hme,hMe=class extends dme{constructor(te){super(te),this.tokens_to_ids=Zm(te.vocab),this.unk_token_id=this.tokens_to_ids.get(te.unk_token),this.unk_token=te.unk_token,this.vocab=new Array(this.tokens_to_ids.size);for(let[Be,Xe]of this.tokens_to_ids)this.vocab[Xe]=Be;let Ce=Array.isArray(te.merges[0]);this.merges=Ce?te.merges:te.merges.map(Be=>Be.split(" ",2)),this.bpe_ranks=new Map(this.merges.map((Be,Xe)=>[JSON.stringify(Be),Xe])),this.end_of_word_suffix=te.end_of_word_suffix,this.continuing_subword_suffix=te.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new mMe(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(te){if(te.length===0)return[];let Ce=this.cache.get(te);if(Ce!==void 0)return Ce;let Be=Array.from(te);this.end_of_word_suffix&&(Be[Be.length-1]+=this.end_of_word_suffix);let Xe=[];if(Be.length>1){let Pt=new mme((Mt,Wt)=>Mt.score<Wt.score),At={token:Be[0],bias:0,prev:null,next:null},Ft=At;for(let Mt=1;Mt<Be.length;++Mt){let Wt={bias:Mt/Be.length,token:Be[Mt],prev:Ft,next:null};Ft.next=Wt,this.add_node(Pt,Ft),Ft=Wt}for(;!Pt.is_empty();){let Mt=Pt.pop();if(Mt.deleted||!Mt.next||Mt.next.deleted)continue;if(Mt.deleted=!0,Mt.next.deleted=!0,Mt.prev){let Kt={...Mt.prev};Mt.prev.deleted=!0,Mt.prev=Kt,Kt.prev?Kt.prev.next=Kt:At=Kt}let Wt={token:Mt.token+Mt.next.token,bias:Mt.bias,prev:Mt.prev,next:Mt.next.next};Wt.prev?(Wt.prev.next=Wt,this.add_node(Pt,Wt.prev)):At=Wt,Wt.next&&(Wt.next.prev=Wt,this.add_node(Pt,Wt))}for(let Mt=At;Mt!==null;Mt=Mt.next)Xe.push(Mt.token)}else Xe=Be;if(this.continuing_subword_suffix)for(let Pt=0;Pt<Xe.length-1;++Pt)Xe[Pt]+=this.continuing_subword_suffix;return te.length<this.max_length_to_cache&&this.cache.put(te,Xe),Xe}add_node(te,Ce){let Be=this.bpe_ranks.get(JSON.stringify([Ce.token,Ce.next.token]));Be!==void 0&&(Ce.score=Be+Ce.bias,te.push(Ce))}encode(te){let Ce=[];for(let Be of te){if(this.ignore_merges&&this.tokens_to_ids.has(Be)){Ce.push(Be);continue}let Xe=this.bpe(Be);for(let Pt of Xe)if(this.tokens_to_ids.has(Pt))Ce.push(Pt);else if(this.byte_fallback){let At=Array.from(this.text_encoder.encode(Pt)).map(Ft=>`<0x${Ft.toString(16).toUpperCase().padStart(2,"0")}>`);At.every(Ft=>this.tokens_to_ids.has(Ft))?Ce.push(...At):Ce.push(this.unk_token)}else Ce.push(this.unk_token)}return Ce}},gMe=hMe,J5=class extends dme{constructor(te,Ce){super(te);let Be=te.vocab;this.tokens_to_ids=Zm(Ce.target_lang?Be[Ce.target_lang]:Be),this.bos_token=Ce.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=Ce.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=Ce.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=Ce.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=new Array(this.tokens_to_ids.size);for(let[Xe,Pt]of this.tokens_to_ids)this.vocab[Pt]=Xe}encode(te){return te}},bR=J5;function Ove(te,Ce){switch(te.type){case"WordPiece":return new _Me(te);case"Unigram":return new fMe(te,Ce.eos_token);case"BPE":return new gMe(te);default:if(te.vocab)return Array.isArray(te.vocab)?new fMe(te,Ce.eos_token):Object.hasOwn(te,"continuing_subword_prefix")&&Object.hasOwn(te,"unk_token")?Object.hasOwn(te,"merges")?new gMe(te):new _Me(te):new bR(te,{target_lang:Ce.target_lang,bos_token:Ce.bos_token,eos_token:Ce.eos_token,pad_token:Ce.pad_token,unk_token:Ce.unk_token});throw new Error(`Unknown TokenizerModel type: ${te?.type}`)}}var XN=Ove,U7=class extends E2{constructor(te){super(),this.config=te}_call(te,...Ce){return this.post_process(te,...Ce)}},eE=U7,$5=class extends eE{post_process(te,Ce=null,Be=!0){let Xe=Ce===null?this.config.single:this.config.pair,Pt=[],At=[];for(let Ft of Xe)"SpecialToken"in Ft?Be&&(Pt.push(Ft.SpecialToken.id),At.push(Ft.SpecialToken.type_id)):"Sequence"in Ft&&(Ft.Sequence.id==="A"?(Pt=cp(Pt,te),At=cp(At,new Array(te.length).fill(Ft.Sequence.type_id))):Ft.Sequence.id==="B"&&(Pt=cp(Pt,Ce),At=cp(At,new Array(Ce.length).fill(Ft.Sequence.type_id))));return{tokens:Pt,token_type_ids:At}}},Ole=$5,iI=class extends eE{post_process(te,Ce=null){return{tokens:Ce?cp(te,Ce):te}}},dht=iI,pht=class extends eE{constructor(te){super(te),this.sep=te.sep,this.cls=te.cls}post_process(te,Ce=null,Be=!0){Be&&(te=cp([this.cls[0]],te,[this.sep[0]]));let Xe=new Array(te.length).fill(0);if(Ce){let Pt=[],At=Be?[this.sep[0]]:[];te=cp(te,Pt,Ce,At),Xe=cp(Xe,new Array(Ce.length+Pt.length+At.length).fill(1))}return{tokens:te,token_type_ids:Xe}}},Lle=pht,NXe=class extends eE{constructor(te){super(te),this.sep=te.sep,this.cls=te.cls}post_process(te,Ce,Be=!0){Be&&(te=cp([this.cls[0]],te,[this.sep[0]]));let Xe=new Array(te.length).fill(0);if(Ce){let Pt=Be?[this.sep[0]]:[],At=Be?[this.sep[0]]:[];te=cp(te,Pt,Ce,At),Xe=cp(Xe,new Array(Ce.length+Pt.length+At.length).fill(1))}return{tokens:te,token_type_ids:Xe}}},PXe=NXe,BXe=class extends eE{constructor(te){super(te),this.processors=(te.processors??[]).map(Ce=>Gre(Ce))}post_process(te,Ce=null,Be=!0){let Xe={tokens:te};for(let Pt of this.processors)Xe=Pt.post_process(Xe.tokens,Ce,Be);return Xe}},gme=BXe;function Tb(te){if(te===null)return null;switch(te.type){case"TemplateProcessing":return new Ole(te);case"ByteLevel":return new dht(te);case"BertProcessing":return new Lle(te);case"RobertaProcessing":return new PXe(te);case"Sequence":return new gme(te);default:throw new Error(`Unknown PostProcessor type: ${te.type}`)}}var Gre=Tb,yMe=class extends E2{constructor(te){super(),this.config=te,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets="trim_offsets"in te?te.trim_offsets:!1}_call(te){return this.decode(te)}decode(te){return this.decode_chain(te).join("")}},J7=yMe,fA=class extends J7{constructor(te){super(te),this.byte_decoder=$_,this.text_decoder=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(te){let Ce=te.join(""),Be=new Uint8Array([...Ce].map(Xe=>this.byte_decoder[Xe]));return this.text_decoder.decode(Be)}decode_chain(te){let Ce=[],Be=[];for(let Xe of te)this.added_tokens.find(Pt=>Pt.content===Xe)!==void 0?(Be.length>0&&(Ce.push(this.convert_tokens_to_string(Be)),Be=[]),Ce.push(Xe)):Be.push(Xe);return Be.length>0&&Ce.push(this.convert_tokens_to_string(Be)),Ce}},AMe=fA,o6e=class extends J7{constructor(te){super(te),this.cleanup=te.cleanup}decode_chain(te){return te.map((Ce,Be)=>{if(Be!==0){let Xe=this.config.prefix;Xe&&Ce.startsWith(Xe)?Ce=Ce.replace(Xe,""):Ce=" "+Ce}return this.cleanup&&(Ce=sMe(Ce)),Ce})}},yme=o6e,vMe=class extends J7{constructor(te){super(te),this.replacement=te.replacement??"\u2581"}decode_chain(te){let Ce=[];for(let Be=0;Be<te.length;++Be){let Xe=te[Be].replaceAll(this.replacement," ");Be==0&&Xe.startsWith(" ")&&(Xe=Xe.substring(1)),Ce.push(Xe)}return Ce}},s6e=vMe,bMe=class extends J7{constructor(te){super(te),this.suffix=te.suffix??""}decode_chain(te){return te.map((Ce,Be)=>Ce.replaceAll(this.suffix,Be===te.length-1?"":" "))}},OXe=bMe,xMe=class extends J7{constructor(te){super(te),this.pad_token=te.pad_token??"",this.word_delimiter_token=te.word_delimiter_token??"",this.cleanup=te.cleanup}convert_tokens_to_string(te){if(te.length===0)return"";let Ce=[te[0]];for(let Xe=1;Xe<te.length;++Xe)te[Xe]!==Ce.at(-1)&&Ce.push(te[Xe]);let Be=Ce.filter(Xe=>Xe!==this.pad_token).join("");return this.cleanup&&(Be=sMe(Be).replaceAll(this.word_delimiter_token," ").trim()),Be}decode_chain(te){return[this.convert_tokens_to_string(te)]}},CMe=xMe,Ame=class extends J7{constructor(te){super(te),this.decoders=(te.decoders??[]).map(Ce=>xme(Ce))}decode_chain(te){return this.decoders.reduce((Ce,Be)=>Be.decode_chain(Ce),te)}},vme=Ame,EMe=class extends J7{decode_chain(te){let Ce=Xb(this.config.pattern),Be=this.config.content??"";return Ce===null?te:te.map(Xe=>Xe.replaceAll(Ce,Be))}},DMe=EMe,SMe=class extends J7{decode_chain(te){return[te.join("")]}},l6e=SMe,tC=class extends J7{constructor(te){super(te),this.content=te.content??"",this.start=te.start??0,this.stop=te.stop??0}decode_chain(te){return te.map(Ce=>{let Be=0;for(let Pt=0;Pt<this.start&&Ce[Pt]===this.content;++Pt)Be=Pt+1;let Xe=Ce.length;for(let Pt=0;Pt<this.stop;++Pt){let At=Ce.length-Pt-1;if(Ce[At]===this.content){Xe=At;continue}else break}return Ce.slice(Be,Xe)})}},c2=tC,Rle=class extends J7{constructor(te){super(te),this.text_decoder=new TextDecoder}decode_chain(te){let Ce=[],Be=[];for(let Xe of te){let Pt=null;if(Xe.length===6&&Xe.startsWith("<0x")&&Xe.endsWith(">")){let At=parseInt(Xe.slice(3,5),16);isNaN(At)||(Pt=At)}if(Pt!==null)Be.push(Pt);else{if(Be.length>0){let At=this.text_decoder.decode(Uint8Array.from(Be));Ce.push(At),Be=[]}Ce.push(Xe)}}if(Be.length>0){let Xe=this.text_decoder.decode(Uint8Array.from(Be));Ce.push(Xe),Be=[]}return Ce}},kMe=Rle;function bme(te){if(te===null)return null;switch(te.type){case"ByteLevel":return new AMe(te);case"WordPiece":return new yme(te);case"Metaspace":return new s6e(te);case"BPEDecoder":return new OXe(te);case"CTC":return new CMe(te);case"Sequence":return new vme(te);case"Replace":return new DMe(te);case"Fuse":return new l6e(te);case"Strip":return new c2(te);case"ByteFallback":return new kMe(te);default:throw new Error(`Unknown Decoder type: ${te.type}`)}}var xme=bme,TMe=class{constructor(te,Ce){let Be=wve(te,"Tokenizer",["model","decoder","post_processor","pre_tokenizer","normalizer"]);if(Be)throw new Error(Be);let Xe=wve(Ce,"Config");if(Xe)throw new Error(Xe);this.tokenizer=te,this.config=Ce,this.normalizer=TXe(this.tokenizer.normalizer),this.pre_tokenizer=CC(this.tokenizer.pre_tokenizer),this.model=XN(this.tokenizer.model,this.config),this.post_processor=Gre(this.tokenizer.post_processor),this.decoder=xme(this.tokenizer.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[],this.tokenizer.added_tokens.forEach(Pt=>{let At=new tht(Pt);this.added_tokens.push(At),this.model.tokens_to_ids.set(At.content,At.id),this.model.vocab[At.id]=At.content,At.special&&(this.special_tokens.push(At.content),this.all_special_ids.push(At.id))}),(this.config.additional_special_tokens??[]).forEach(Pt=>{this.special_tokens.includes(Pt)||this.special_tokens.push(Pt)}),this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.added_tokens_splitter=new AR(this.added_tokens.map(Pt=>Pt.content)),this.added_tokens_map=new Map(this.added_tokens.map(Pt=>[Pt.content,Pt])),this.remove_space=this.config.remove_space,this.clean_up_tokenization_spaces=this.config.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=this.config.do_lowercase_and_remove_accent??!1}encode(te,{text_pair:Ce=null,add_special_tokens:Be=!0,return_token_type_ids:Xe=null}={}){let{tokens:Pt,token_type_ids:At}=this.tokenize_helper(te,{text_pair:Ce,add_special_tokens:Be}),Ft=this.model.convert_tokens_to_ids(Pt),Mt={ids:Ft,tokens:Pt,attention_mask:new Array(Ft.length).fill(1)};return Xe&&At&&(Mt.token_type_ids=At),Mt}decode(te,Ce={}){if(!Array.isArray(te)||te.length===0||!f_(te[0]))throw Error("token_ids must be a non-empty array of integers.");let Be=this.model.convert_ids_to_tokens(te);Ce.skip_special_tokens&&(Be=Be.filter(Pt=>!this.special_tokens.includes(Pt)));let Xe=this.decoder?this.decoder(Be):Be.join(" ");return this.decoder&&this.decoder.end_of_word_suffix&&(Xe=Xe.replaceAll(this.decoder.end_of_word_suffix," "),Ce.skip_special_tokens&&(Xe=Xe.trim())),(Ce.clean_up_tokenization_spaces??this.clean_up_tokenization_spaces)&&(Xe=sMe(Xe)),Xe}tokenize(te,{text_pair:Ce=null,add_special_tokens:Be=!1}={}){return this.tokenize_helper(te,{text_pair:Ce,add_special_tokens:Be}).tokens}encode_text(te){if(te===null)return null;let Ce=this.added_tokens_splitter.split(te);return Ce.forEach((Be,Xe)=>{let Pt=this.added_tokens_map.get(Be);Pt&&(Pt.lstrip&&Xe>0&&(Ce[Xe-1]=Ce[Xe-1].trimEnd()),Pt.rstrip&&Xe<Ce.length-1&&(Ce[Xe+1]=Ce[Xe+1].trimStart()))}),Ce.flatMap((Be,Xe)=>{if(Be.length===0)return[];if(this.added_tokens_map.has(Be))return[Be];if(this.remove_space===!0&&(Be=Be.trim().split(/\s+/).join(" ")),this.do_lowercase_and_remove_accent&&(Be=Tve(Be)),this.normalizer!==null&&(Be=this.normalizer(Be)),Be.length===0)return[];let Pt=this.pre_tokenizer!==null?this.pre_tokenizer(Be,{section_index:Xe}):[Be];return this.model(Pt)})}tokenize_helper(te,{text_pair:Ce=null,add_special_tokens:Be=!0}){let Xe=this.encode_text(te),Pt=this.encode_text(Ce||null);return this.post_processor?this.post_processor(Xe,Pt,Be):{tokens:cp(Xe??[],Pt??[])}}token_to_id(te){return this.model.tokens_to_ids.get(te)}id_to_token(te){return this.model.vocab[te]}get_added_tokens_decoder(){let te=new Map;for(let Ce of this.added_tokens)te.set(Ce.id,Ce);return te}},LXe=TMe,ck=class{type="huggingface";name;modelId;logger;options;tokenizer=null;cacheDir;safeModelName;constructor(te,Ce,Be={}){this.modelId=te,this.logger=Ce,this.options=Be,this.cacheDir=Be.cacheDir||(0,VD.join)((0,XFe.homedir)(),".claude-code-router",".huggingface"),this.safeModelName=te.replace(/\//g,"_").replace(/[^a-zA-Z0-9_-]/g,"_"),this.name=`huggingface-${te.split("/").pop()}`}getCachePaths(){let te=(0,VD.join)(this.cacheDir,this.safeModelName);return{modelDir:te,tokenizerJson:(0,VD.join)(te,"tokenizer.json"),tokenizerConfig:(0,VD.join)(te,"tokenizer_config.json")}}ensureDir(te){(0,M$.existsSync)(te)||(0,M$.mkdirSync)(te,{recursive:!0})}async loadFromCache(){try{let te=this.getCachePaths();if(!(0,M$.existsSync)(te.tokenizerJson)||!(0,M$.existsSync)(te.tokenizerConfig))return null;let[Ce,Be]=await Promise.all([o1.promises.readFile(te.tokenizerJson,"utf-8"),o1.promises.readFile(te.tokenizerConfig,"utf-8")]);return{tokenizerJson:JSON.parse(Ce),tokenizerConfig:JSON.parse(Be)}}catch(te){return this.logger?.warn(`Failed to load from cache: ${te.message}`),null}}async downloadAndCache(){let te=this.getCachePaths(),Ce={json:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer.json`,config:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer_config.json`};this.logger?.info(`Downloading tokenizer files for ${this.modelId}`);let Be=new AbortController,Xe=setTimeout(()=>Be.abort(),this.options.timeout||3e4);try{let[Pt,At]=await Promise.all([fetch(Ce.json,{signal:Be.signal}),fetch(Ce.config,{signal:Be.signal})]);if(!Pt.ok)throw new Error(`Failed to fetch tokenizer.json: ${Pt.statusText}`);let[Ft,Mt]=await Promise.all([Pt.json(),At.ok?At.json():Promise.resolve({})]);return this.ensureDir(te.modelDir),await Promise.all([o1.promises.writeFile(te.tokenizerJson,JSON.stringify(Ft,null,2)),o1.promises.writeFile(te.tokenizerConfig,JSON.stringify(Mt,null,2))]),{tokenizerJson:Ft,tokenizerConfig:Mt}}finally{clearTimeout(Xe)}}async initialize(){try{this.logger?.info(`Initializing HuggingFace tokenizer: ${this.modelId}`);let te=this.getCachePaths();this.ensureDir(this.cacheDir);let Ce=await this.loadFromCache()||await this.downloadAndCache();this.tokenizer=new LXe(Ce.tokenizerJson,Ce.tokenizerConfig),this.logger?.info(`Tokenizer initialized: ${this.name}`)}catch(te){throw this.logger?.error(`Failed to initialize tokenizer: ${te.message}`),new Error(`Failed to initialize HuggingFace tokenizer for ${this.modelId}: ${te.message}`)}}async countTokens(te){if(!this.tokenizer)throw new Error("Tokenizer not initialized");try{let Ce=this.extractTextFromRequest(te);return this.tokenizer.encode(Ce).ids.length}catch(Ce){throw this.logger?.error(`Error counting tokens: ${Ce.message}`),Ce}}isInitialized(){return this.tokenizer!==null}encodeText(te){if(!this.tokenizer)throw new Error("Tokenizer not initialized");return this.tokenizer.encode(te).ids}dispose(){this.tokenizer=null}extractTextFromRequest(te){let Ce=[],{messages:Be,system:Xe,tools:Pt}=te;if(Array.isArray(Be)){for(let At of Be)if(typeof At.content=="string")Ce.push(At.content);else if(Array.isArray(At.content))for(let Ft of At.content)Ft.type==="text"&&Ft.text?Ce.push(Ft.text):Ft.type==="tool_use"&&Ft.input?Ce.push(JSON.stringify(Ft.input)):Ft.type==="tool_result"&&Ce.push(typeof Ft.content=="string"?Ft.content:JSON.stringify(Ft.content))}if(typeof Xe=="string")Ce.push(Xe);else if(Array.isArray(Xe)){for(let At of Xe)if(At.type==="text"){if(typeof At.text=="string")Ce.push(At.text);else if(Array.isArray(At.text))for(let Ft of At.text)Ft&&Ce.push(Ft)}}if(Pt)for(let At of Pt)At.name&&Ce.push(At.name),At.description&&Ce.push(At.description),At.input_schema&&Ce.push(JSON.stringify(At.input_schema));return Ce.join(" ")}},wMe=class{type="api";name;config;logger;options;constructor(te,Ce,Be={}){if(!te.url||!te.apiKey)throw new Error("API tokenizer requires url and apiKey");this.config={url:te.url,apiKey:te.apiKey,requestFormat:te.requestFormat||"standard",responseField:te.responseField||"token_count",headers:te.headers||{}},this.logger=Ce,this.options=Be;try{let Xe=new URL(te.url);this.name=`api-${Xe.hostname}`}catch{this.name=`api-${te.url}`}}async initialize(){try{new URL(this.config.url)}catch{throw new Error(`Invalid API URL: ${this.config.url}`)}}async countTokens(te){try{let Ce=this.formatRequestBody(te),Be={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},Xe=new AbortController,Pt=setTimeout(()=>Xe.abort(),this.options.timeout||3e4),At=await fetch(this.config.url,{method:"POST",headers:Be,body:JSON.stringify(Ce),signal:Xe.signal});if(clearTimeout(Pt),!At.ok)throw new Error(`API tokenizer request failed: ${At.status} ${At.statusText}`);let Ft=await At.json();return this.extractTokenCount(Ft)}catch(Ce){throw Ce.name==="AbortError"?new Error("API tokenizer request timed out"):Ce}}isInitialized(){return!0}dispose(){}formatRequestBody(te){switch(this.config.requestFormat){case"standard":return te;case"openai":return{model:"gpt-3.5-turbo",messages:this.extractMessagesAsOpenAIFormat(te)};case"anthropic":return{messages:te.messages||[],system:te.system,tools:te.tools};case"custom":return{text:this.extractConcatenatedText(te)};default:return te}}extractMessagesAsOpenAIFormat(te){return te.messages?te.messages.map(Ce=>({role:Ce.role,content:this.extractTextFromMessage(Ce)})):[]}extractTextFromMessage(te){return typeof te.content=="string"?te.content:Array.isArray(te.content)?te.content.map(Ce=>Ce.type==="text"&&Ce.text?Ce.text:Ce.type==="tool_use"&&Ce.input?JSON.stringify(Ce.input):Ce.type==="tool_result"?typeof Ce.content=="string"?Ce.content:JSON.stringify(Ce.content):"").join(" "):""}extractConcatenatedText(te){let Ce=[];return te.messages&&te.messages.forEach(Be=>{Ce.push(this.extractTextFromMessage(Be))}),typeof te.system=="string"?Ce.push(te.system):Array.isArray(te.system)&&te.system.forEach(Be=>{Be.type==="text"&&(typeof Be.text=="string"?Ce.push(Be.text):Array.isArray(Be.text)&&Be.text.forEach(Xe=>{Xe&&Ce.push(Xe)}))}),te.tools&&te.tools.forEach(Be=>{Be.name&&Ce.push(Be.name),Be.description&&Ce.push(Be.description),Be.input_schema&&Ce.push(JSON.stringify(Be.input_schema))}),Ce.join(" ")}extractTokenCount(te){try{let Ce=this.config.responseField,Be=Ce.split("."),Xe=te;for(let Pt of Be){if(Xe==null)throw new Error(`Field path '${Ce}' not found in response`);Xe=Xe[Pt]}if(typeof Xe!="number")throw new Error(`Expected number at field path '${Ce}', got ${typeof Xe}`);return Xe}catch(Ce){throw this.logger?.error(`Failed to extract token count from API response: ${Ce.message}. Response: ${JSON.stringify(te)}`),new Error(`Invalid response from API tokenizer: ${Ce.message}`)}}},Lve=class{tokenizers=new Map;configService;logger;options;fallbackTokenizer;constructor(te,Ce,Be={}){this.configService=te,this.logger=Ce,this.options={timeout:Be.timeout??3e4,...Be}}async initialize(){try{this.fallbackTokenizer=new Jre("cl100k_base"),await this.fallbackTokenizer.initialize(),this.tokenizers.set("fallback",this.fallbackTokenizer),this.logger?.info("TokenizerService initialized successfully")}catch(te){throw this.logger?.error(`TokenizerService initialization error: ${te.message}`),te}}async getTokenizer(te){let Ce=this.getCacheKey(te);if(this.tokenizers.has(Ce))return this.tokenizers.get(Ce);let Be;try{switch(te.type){case"tiktoken":Be=new Jre(te.encoding||"cl100k_base");break;case"huggingface":this.logger?.info(`Initializing HuggingFace tokenizer for model: ${te.model}`),Be=new ck(te.model,this.logger,{timeout:this.options.timeout});break;case"api":Be=new wMe(te,this.logger,{timeout:this.options.timeout});break;default:throw new Error(`Unknown tokenizer type: ${te.type}`)}return this.logger?.info(`Calling initialize() on ${te.type} tokenizer...`),await Be.initialize(),this.tokenizers.set(Ce,Be),this.logger?.info(`Tokenizer initialized successfully: ${te.type} (${Ce})`),Be}catch(Xe){return this.logger?.error(`Failed to initialize ${te.type} tokenizer: ${Xe.message}`),this.logger?.error(`Error stack: ${Xe.stack}`),this.fallbackTokenizer||await this.initialize(),this.fallbackTokenizer}}async countTokens(te,Ce){let Be=Ce?await this.getTokenizer(Ce):this.fallbackTokenizer;return{tokenCount:await Be.countTokens(te),tokenizerUsed:Be.name,cached:!1}}getTokenizerConfigForModel(te,Ce){let Be=(this.configService.get("providers")||[]).find(Xe=>Xe.name===te);if(Be?.tokenizer)return Be.tokenizer.models?.[Ce]?Be.tokenizer.models[Ce]:Be.tokenizer.default}dispose(){this.tokenizers.forEach(te=>{try{te.dispose()}catch(Ce){this.logger?.error(`Error disposing tokenizer: ${Ce}`)}}),this.tokenizers.clear()}getCacheKey(te){switch(te.type){case"tiktoken":return`tiktoken:${te.encoding||"cl100k_base"}`;case"huggingface":return`hf:${te.model}`;case"api":return`api:${te.url}`;default:return`unknown:${JSON.stringify(te)}`}}},VY=uft(),FMe=class{capacity;cache;constructor(te){this.capacity=te,this.cache=new Map}get(te){if(!this.cache.has(te))return;let Ce=this.cache.get(te);return this.cache.delete(te),this.cache.set(te,Ce),Ce}put(te,Ce){if(this.cache.has(te))this.cache.delete(te);else if(this.cache.size>=this.capacity){let Be=this.cache.keys().next().value;Be!==void 0&&this.cache.delete(Be)}this.cache.set(te,Ce)}values(){return Array.from(this.cache.values())}},xR=new FMe(100),Cme=require("fs/promises"),z5=require("fs/promises"),IMe=require("path"),Eme=vZe(),c6e=u6t(),oy=(0,VY.get_encoding)("cl100k_base"),zs=(te,Ce,Be)=>{let Xe=0;return Array.isArray(te)&&te.forEach(Pt=>{typeof Pt.content=="string"?Xe+=oy.encode(Pt.content).length:Array.isArray(Pt.content)&&Pt.content.forEach(At=>{At.type==="text"?Xe+=oy.encode(At.text).length:At.type==="tool_use"?Xe+=oy.encode(JSON.stringify(At.input)).length:At.type==="tool_result"&&(Xe+=oy.encode(typeof At.content=="string"?At.content:JSON.stringify(At.content)).length)})}),typeof Ce=="string"?Xe+=oy.encode(Ce).length:Array.isArray(Ce)&&Ce.forEach(Pt=>{Pt.type==="text"&&(typeof Pt.text=="string"?Xe+=oy.encode(Pt.text).length:Array.isArray(Pt.text)&&Pt.text.forEach(At=>{Xe+=oy.encode(At||"").length}))}),Be&&Be.forEach(Pt=>{Pt.description&&(Xe+=oy.encode(Pt.name+Pt.description).length),Pt.input_schema&&(Xe+=oy.encode(JSON.stringify(Pt.input_schema)).length)}),Xe},Wre=async(te,Ce)=>{if(te.sessionId){let Be=await ib(te.sessionId);if(Be){let Xe=(0,IMe.join)(Eme.HOME_DIR,Be,"config.json"),Pt=(0,IMe.join)(Eme.HOME_DIR,Be,`${te.sessionId}.json`);try{let At=JSON.parse(await(0,Cme.readFile)(Pt,"utf8"));if(At&&At.Router)return At.Router}catch{}try{let At=JSON.parse(await(0,Cme.readFile)(Xe,"utf8"));if(At&&At.Router)return At.Router}catch{}}}};function wf(te){let Ce=te||"";return Ce.includes(",")&&(Ce=Ce.split(",").pop()||Ce),Ce.includes("/")&&(Ce=Ce.split("/").pop()||Ce),Ce.includes(":")&&(Ce=Ce.split(":")[0]),Ce.trim().toLowerCase()}function tA(te){let Ce=wf(te),Be=Ce.match(/claude-(?:\d+-\d+-|\d+-)?(sonnet|opus|haiku)(?:-|$)/i)||Ce.match(/claude-(sonnet|opus|haiku)(?:-|$)/i);return Be?Be[1].toLowerCase():null}function up(te,Ce){if(!Ce||!te)return null;let Be=wf(te);if(Ce[te])return Ce[te];if(Ce[Be])return Ce[Be];let Xe=tA(te);if(Xe&&Ce[Xe])return Ce[Xe];for(let[Pt,At]of Object.entries(Ce)){let Ft=wf(Pt);if(Ft&&Be.includes(Ft))return At}return null}function ju(te,Ce,Be){if(!te?.includes(","))return te;let[Xe,...Pt]=te.split(","),At=Xe.trim(),Ft=Pt.join(",").trim();if(!Be&&!Pre().isAvailable(At,Ft))return null;let Mt=Ce.find(Kt=>Kt.name.toLowerCase()===At.toLowerCase()),Wt=Mt?.models?.find(Kt=>String(Kt).toLowerCase()===Ft.toLowerCase());return Mt&&Wt?`${Mt.name},${Wt}`:te}function xG(te){return te.body.messages?.some(Ce=>Ce.role==="user"&&Array.isArray(Ce.content)&&Ce.content.some(Be=>Be.type==="image"||Be.type==="image_url"||Array.isArray(Be?.content)&&Be.content.some(Xe=>Xe.type==="image"||Xe.type==="image_url")))}function u2(te){let Ce=wf(te);return[/claude/i,/gemini/i,/gpt-4o/i,/gpt-4\.1/i,/gpt-4-vision/i,/qwen.*vl/i,/glm-4v/i,/grok.*vision/i,/pixtral/i,/llava/i].some(Be=>Be.test(Ce))}function RXe(te,Ce,Be,Xe,Pt){let At=Be.longContextThreshold||6e4;if(Ce>2e5&&Be.extendedContext){let Wt=ju(Be.extendedContext,Xe);if(Wt)return te.log.info(`Family: using extended context model (1M+), tokens: ${Ce}`),{model:Wt,scenarioType:"extendedContext"};te.log.warn("Family: extendedContext model unavailable (fail pool), skipping")}let Ft=Pt&&Pt.input_tokens>At&&Ce>2e4,Mt=Ce>At;if((Ft||Mt)&&Be.longContext){let Wt=ju(Be.longContext,Xe);if(Wt)return te.log.info(`Family: using long context model, tokens: ${Ce}`),{model:Wt,scenarioType:"longContext"};te.log.warn("Family: longContext model unavailable (fail pool), skipping")}if(Array.isArray(te.body.tools)&&te.body.tools.some(Wt=>Wt.type?.startsWith("web_search"))&&Be.webSearch){let Wt=ju(Be.webSearch,Xe);if(Wt)return{model:Wt,scenarioType:"webSearch"};te.log.warn("Family: webSearch model unavailable (fail pool), skipping")}if(te.body.thinking&&Be.think){let Wt=ju(Be.think,Xe);if(Wt)return{model:Wt,scenarioType:"think"};te.log.warn("Family: think model unavailable (fail pool), skipping")}if(Be.default){let Wt=ju(Be.default,Xe);if(Wt)return{model:Wt,scenarioType:"default"};te.log.warn("Family: default model unavailable (fail pool), skipping")}return null}var u6e=async(te,Ce,Be,Xe)=>{let Pt=await Wre(te,Be),At=Be.get("providers")||[],Ft=Pt||Be.get("Router");if(te.body.model.includes(",")){let mt=ju(te.body.model,At);if(mt)return{model:mt,scenarioType:"default"};te.log.warn(`Explicit model ${te.body.model} unavailable (fail pool), trying alternatives`)}let Mt=tA(te.body.model),Wt=Ft?.families?.[Mt||""];if(Wt){te.log.info(`Using model family routing for: ${Mt}`),te.modelFamily=Mt,te.familyFallback=Wt.fallback;let mt=RXe(te,Ce,Wt,At,Xe);if(mt)return mt}let Kt=up(te.body.model,Ft?.models);if(Kt){let mt=ju(Kt,At);if(mt)return te.log.info(`Using mapped model for ${te.body.model}: ${Kt}`),{model:mt,scenarioType:"modelMapping"};te.log.warn(`Mapped model ${Kt} unavailable (fail pool), skipping`)}let sr=Ft?.extendedContextThreshold||2e5;if(Ce>sr&&Ft?.extendedContext)return te.log.info(`Using extended context (1M) model due to token count: ${Ce}, threshold: ${sr}`),{model:Ft.extendedContext,scenarioType:"extendedContext"};let Yr=Ft?.longContextThreshold||6e4,Wr=Xe&&Xe.input_tokens>Yr&&Ce>2e4,tr=Ce>Yr;if((Wr||tr)&&Ft?.longContext)return te.log.info(`Using long context model due to token count: ${Ce}, threshold: ${Yr}`),{model:Ft.longContext,scenarioType:"longContext"};if(te.body?.system?.length>1&&te.body?.system[1]?.text?.startsWith("<CCR-SUBAGENT-MODEL>")){let mt=te.body?.system[1].text.match(/<CCR-SUBAGENT-MODEL>(.*?)<\/CCR-SUBAGENT-MODEL>/s);if(mt)return te.body.system[1].text=te.body.system[1].text.replace(`<CCR-SUBAGENT-MODEL>${mt[1]}</CCR-SUBAGENT-MODEL>`,""),{model:mt[1],scenarioType:"default"}}let Dr=Be.get("Router");return te.body.model?.includes("claude")&&te.body.model?.includes("haiku")&&Dr?.background?(te.log.info(`Using background model for ${te.body.model}`),{model:Dr.background,scenarioType:"background"}):Array.isArray(te.body.tools)&&te.body.tools.some(mt=>mt.type?.startsWith("web_search"))&&Ft?.webSearch?{model:Ft.webSearch,scenarioType:"webSearch"}:te.body.thinking&&Ft?.think?(te.log.info(`Using think model for ${te.body.thinking}`),{model:Ft.think,scenarioType:"think"}):{model:Ft?.default,scenarioType:"default"}},Vre=async(te,Ce,Be)=>{let{configService:Xe,event:Pt}=Be;if(te.originalModel=te.body.model,te.body.metadata?.user_id){let Wr=te.body.metadata.user_id.split("_session_");Wr.length>1&&(te.sessionId=Wr[1])}let At=await Wre(te,Xe)||Xe.get("Router"),Ft=Xe.get("providers")||[],Mt=xR.get(te.sessionId),{messages:Wt,system:Kt=[],tools:sr}=te.body,Yr=Xe.get("REWRITE_SYSTEM_PROMPT");if(Yr&&Kt.length>1&&Kt[1]?.text?.includes("<env>")){let Wr=await(0,Cme.readFile)(Yr,"utf-8");Kt[1].text=`${Wr}<env>${Kt[1].text.split("<env>").pop()}`}try{let[Wr,tr]=te.body.model.split(","),Dr=Be.tokenizerService?.getTokenizerConfigForModel(Wr,tr),mt;Be.tokenizerService?mt=(await Be.tokenizerService.countTokens({messages:Wt,system:Kt,tools:sr},Dr)).tokenCount:mt=zs(Wt,Kt,sr),te.tokenCount=mt;let bn,$r=Xe.get("CUSTOM_ROUTER_PATH");if($r)try{bn=await require($r)(te,Xe.getAll(),{event:Pt})}catch(Tr){te.log.error(`failed to load custom router: ${Tr.message}`)}if(bn)te.scenarioType="default";else{let Tr=await u6e(te,mt,Xe,Mt);bn=Tr.model,te.scenarioType=Tr.scenarioType}if(At?.image&&bn!==At.image&&xG(te)&&!u2(bn)){let Tr=ju(At.image,Ft);Tr?(te.log.info(`Using image model fallback for ${bn}`),bn=Tr,te.scenarioType="image"):te.log.warn(`Image model ${At.image} unavailable (fail pool), keeping ${bn}`)}te.body.model=bn}catch(Wr){te.log.error(`Error in router middleware: ${Wr.message}`),te.body.model=At?.default,te.scenarioType="default"}},Mle=new c6e.LRUCache({max:1e3}),ib=async te=>{if(Mle.has(te)){let Ce=Mle.get(te);return!Ce||Ce===""?null:Ce}try{let Ce=await(0,z5.opendir)(Eme.CLAUDE_PROJECTS_DIR),Be=[];for await(let At of Ce)At.isDirectory()&&Be.push(At.name);let Xe=Be.map(async At=>{let Ft=(0,IMe.join)(Eme.CLAUDE_PROJECTS_DIR,At,`${te}.jsonl`);try{return(await(0,z5.stat)(Ft)).isFile()?At:null}catch{return null}}),Pt=await Promise.all(Xe);for(let At of Pt)if(At)return Mle.set(te,At),At;return Mle.set(te,""),null}catch(Ce){return console.error("Error searching for project by session:",Ce),Mle.set(te,""),null}},Rve=class{plugins=new Map;pluginInstances=new Map;registerPlugin(te,Ce={}){this.pluginInstances.set(te.name,te),this.plugins.set(te.name,{name:te.name,enabled:Ce.enabled!==!1,options:Ce})}async enablePlugin(te,Ce){let Be=this.plugins.get(te),Xe=this.pluginInstances.get(te);if(!Be||!Xe)throw new Error(`Plugin ${te} not found`);Be.enabled&&await Ce.register(Xe.register,Be.options)}async enablePlugins(te){for(let[Ce,Be]of this.plugins)if(Be.enabled)try{await this.enablePlugin(Ce,te)}catch(Xe){let Pt=Xe instanceof Error?Xe.message:String(Xe);te.log?.error(`Failed to enable plugin ${Ce}: ${Pt}`)}}getPlugins(){return Array.from(this.plugins.values())}getPlugin(te){return this.pluginInstances.get(te)}hasPlugin(te){return this.pluginInstances.has(te)}isPluginEnabled(te){return this.plugins.get(te)?.enabled||!1}setPluginEnabled(te,Ce){let Be=this.plugins.get(te);Be&&(Be.enabled=Ce)}removePlugin(te){this.plugins.delete(te),this.pluginInstances.delete(te)}clear(){this.plugins.clear(),this.pluginInstances.clear()}},Ff=new Rve,Mve=Q(Ire(),1),t9=class extends TransformStream{buffer="";currentEvent={};constructor(){super({transform:(te,Ce)=>{this.buffer+=te;let Be=this.buffer.split(`
1286
1286
  `);this.buffer=Be.pop()||"";for(let Xe of Be){let Pt=this.processLine(Xe);Pt&&Ce.enqueue(Pt)}},flush:te=>{if(this.buffer.trim()){let Ce=[];this.processLine(this.buffer.trim(),Ce),Ce.forEach(Be=>te.enqueue(Be))}Object.keys(this.currentEvent).length>0&&te.enqueue(this.currentEvent)}})}processLine(te,Ce){if(!te.trim()){if(Object.keys(this.currentEvent).length>0){let Be={...this.currentEvent};return this.currentEvent={},Ce?(Ce.push(Be),null):Be}return null}if(te.startsWith("event:"))this.currentEvent.event=te.slice(6).trim();else if(te.startsWith("data:")){let Be=te.slice(5).trim();if(Be==="[DONE]")this.currentEvent.data={type:"done"};else try{this.currentEvent.data=JSON.parse(Be)}catch{this.currentEvent.data={raw:Be,error:"JSON parse failed"}}}else te.startsWith("id:")?this.currentEvent.id=te.slice(3).trim():te.startsWith("retry:")&&(this.currentEvent.retry=parseInt(te.slice(6).trim()));return null}},j$=class extends TransformStream{constructor(){super({transform:(te,Ce)=>{let Be="";te.event&&(Be+=`event: ${te.event}
1287
1287
  `),te.id&&(Be+=`id: ${te.id}
1288
1288
  `),te.retry&&(Be+=`retry: ${te.retry}
@@ -1795,7 +1795,7 @@ https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys`};var ee
1795
1795
  ${this.toMarkdown(b,g+1)}`:`${y}- ${b}`).join(`
1796
1796
  `):typeof d=="object"&&d!==null?Object.entries(d).map(([b,D])=>typeof D=="object"&&D!==null?`${y}${b}:
1797
1797
  ${this.toMarkdown(D,g+1)}`:`${y}${b}: ${D}`).join(`
1798
- `):`${y}${d}`}async output(d,g={}){try{let y=this.formatData(d,g);switch(this.config.level||"log"){case"info":console.info(y);break;case"warn":console.warn(y);break;case"error":console.error(y);break;case"debug":console.debug(y);break;case"log":default:console.log(y);break}return!0}catch(y){return console.error("[ConsoleOutputHandler] Output failed:",y),!1}}}}),SIt,kIt=Y3(()=>{"use strict";SIt=class{type="webhook";config;defaultTimeout=3e4;constructor(d){if(!d.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...d}}buildHeaders(){let d={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(d.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let g=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");d.Authorization=`Basic ${g}`}break;case"custom":this.config.auth.custom&&(d[this.config.auth.custom.header]=this.config.auth.custom.value);break}return d}buildBody(d,g){let{format:y="json",timestamp:b=!0,prefix:D,metadata:S}=g||{},E={data:d};return b&&(E.timestamp=new Date().toISOString()),D&&(E.prefix=D),S&&Object.keys(S).length>0&&(E.metadata=S),E}async sendRequest(d,g,y,b,D){let S=new AbortController,E=setTimeout(()=>S.abort(),D);try{let I=await fetch(d,{method:g,headers:y,body:JSON.stringify(b),signal:S.signal});if(clearTimeout(E),!I.ok)throw new Error(`HTTP ${I.status}: ${I.statusText}`);return I}catch(I){throw clearTimeout(E),I}}delay(d){return new Promise(g=>setTimeout(g,d))}async sendWithRetry(d,g,y,b,D,S){let E=null;for(let I=1;I<=S.maxAttempts;I++)try{return await this.sendRequest(d,g,y,b,D)}catch(N){if(E=N,I===S.maxAttempts)break;let L=S.backoffMs*Math.pow(2,I-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${I}/${S.maxAttempts}), retrying in ${L}ms...`,N.message),await this.delay(L)}throw E}async output(d,g={}){let y=g.timeout||this.defaultTimeout;try{let b=this.buildHeaders(),D=this.buildBody(d,g),S=await this.sendWithRetry(this.config.url,this.config.method,b,D,y,this.config.retry);return!0}catch(b){let D=b instanceof Error?b.message:String(b);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${D}`),!1;throw new Error(`Webhook output failed: ${D}`)}}}}),TIt,wIt=Y3(()=>{"use strict";TIt=class{type="temp-file";config;baseDir;constructor(d={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...d};let g=(0,MJt.tmpdir)();this.baseDir=(0,NTt.join)(g,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,wxt.existsSync)(this.baseDir)||(0,wxt.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(d){try{let g=d.match(/_session_([a-f0-9-]+)/i);return g?g[1]:null}catch{return null}}getFilePath(d){let g=this.config.prefix||"session",y=this.config.extension?`.${this.config.extension}`:"",b;if(this.config.includeTimestamp){let D=Date.now();b=`${g}-${d}-${D}${y}`}else b=`${g}-${d}${y}`;return(0,NTt.join)(this.baseDir,b)}async output(d,g={}){try{let y=g.metadata?.sessionId;if(!y)return!1;let b={...d,timestamp:Date.now(),sessionId:y},D=this.getFilePath(y);return(0,wxt.writeFileSync)(D,JSON.stringify(b,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),twt,fZe,xzt=Y3(()=>{"use strict";DIt(),kIt(),wIt(),twt=class{handlers=new Map;defaultOptions={};registerHandler(d,g){this.handlers.set(d,g)}registerHandlers(d){for(let g of d)if(g.enabled!==!1)try{let y=this.createHandler(g),b=g.type+"_"+Date.now();this.registerHandler(b,y)}catch(y){console.error(`[OutputManager] Failed to register ${g.type} handler:`,y)}}createHandler(d){switch(d.type){case"console":return new EIt(d.config);case"webhook":return new SIt(d.config);case"temp-file":return new TIt(d.config);default:throw new Error(`Unknown output handler type: ${d.type}`)}}unregisterHandler(d){return this.handlers.delete(d)}getHandler(d){return this.handlers.get(d)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(d){this.defaultOptions={...this.defaultOptions,...d}}getDefaultOptions(){return{...this.defaultOptions}}async output(d,g){let y={...this.defaultOptions,...g},b={success:[],failed:[]},D=Array.from(this.handlers.entries()).map(async([S,E])=>{try{await E.output(d,y)?b.success.push(S):b.failed.push(S)}catch(I){console.error(`[OutputManager] Handler ${S} failed:`,I),b.failed.push(S)}});return await Promise.all(D),b}async outputTo(d,g,y){let b={...this.defaultOptions,...y},D={success:[],failed:[]},S=d.map(async E=>{let I=this.handlers.get(E);if(!I){console.warn(`[OutputManager] Handler ${E} not found`),D.failed.push(E);return}try{await I.output(g,b)?D.success.push(E):D.failed.push(E)}catch(N){console.error(`[OutputManager] Handler ${E} failed:`,N),D.failed.push(E)}});return await Promise.all(S),D}async outputToType(d,g,y){let b=Array.from(this.handlers.entries()).filter(([D,S])=>S.type===d).map(([D])=>D);return this.outputTo(b,g,y)}},fZe=new twt}),Czt=Bfe(i3t(),1),rwt=class{config={};options;constructor(d={jsonPath:"./config.json"}){this.options={envPath:d.envPath||".env",jsonPath:d.jsonPath,useEnvFile:!1,useJsonFile:d.useJsonFile!==!1,useEnvironmentVariables:d.useEnvironmentVariables!==!1,...d},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 d=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,PTt.join)(process.cwd(),this.options.jsonPath);if((0,Fxt.existsSync)(d))try{let g=(0,Fxt.readFileSync)(d,"utf-8"),y=Czt.default.parse(g);this.config={...this.config,...y},console.log(`Loaded JSON config from: ${d}`)}catch(g){console.warn(`Failed to load JSON config from ${d}:`,g)}else console.warn(`JSON config file not found: ${d}`)}loadEnvConfig(){let d=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,PTt.join)(process.cwd(),this.options.envPath);if((0,Fxt.existsSync)(d))try{let g=(0,UJt.config)({path:d});g.parsed&&(this.config={...this.config,...this.parseEnvConfig(g.parsed)})}catch(g){console.warn(`Failed to load .env config from ${d}:`,g)}}loadEnvironmentVariables(){let d=this.parseEnvConfig(process.env);this.config={...this.config,...d}}parseEnvConfig(d){let g={};return Object.assign(g,d),g}isAbsolutePath(d){return d.startsWith("/")||d.includes(":")}get(d,g){let y=this.config[d];return y!==void 0?y:g}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(d){return this.config[d]!==void 0}set(d,g){this.config[d]=g}reload(){this.config={},this.loadConfig()}getConfigSummary(){let d=[];return this.options.initialConfig&&d.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&d.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&d.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&d.push("Environment Variables"),`Config sources: ${d.join(", ")}`}};function yY(d,g=500,y="internal_error",b="api_error"){let D=new Error(d);return D.statusCode=g,D.code=y,D.type=b,D}async function Ezt(d,g,y){g.log.error(d);let b=d.statusCode||500,D={error:{message:d.message+d.stack||"Internal Server Error",type:d.type||"api_error",code:d.code||"internal_error"}};return y.code(b).send(D)}function Dzt(d,g,y,b,D){let S=new Headers({"Content-Type":"application/json"});y.headers&&Object.entries(y.headers).forEach(([L,R])=>{R&&S.set(L,R)});let E,I=AbortSignal.timeout(y.TIMEOUT??60*1e3*60);if(y.signal){let L=new AbortController,R=()=>L.abort();y.signal.addEventListener("abort",R),I.addEventListener("abort",R),E=L.signal}else E=I;let N={method:"POST",headers:S,body:JSON.stringify(g),signal:E};return y.httpsProxy&&(N.dispatcher=new JJt.ProxyAgent(new URL(y.httpsProxy).toString())),D?.debug({reqId:b.req.id,request:N,headers:Object.fromEntries(S.entries()),requestUrl:typeof d=="string"?d:d.toString(),useProxy:y.httpsProxy},"final request"),fetch(typeof d=="string"?d:d.toString(),N)}var Szt="1.0.63",kzt=Bfe(m$t(),1),Tzt={enabled:!0,failureThreshold:3,probeIntervalMinutes:5,halfOpenSuccessThreshold:2},wzt=class{states=new kzt.Map;config;probeTimer;constructor(d){this.config={...Tzt,...d}}getKey(d,g){return`${d},${g}`}recordSuccess(d,g){if(!this.config.enabled)return;let y=this.getKey(d,g),b=this.states.get(y);b&&(b.successCount++,b.status==="half-open"?b.successCount>=this.config.halfOpenSuccessThreshold&&this.states.delete(y):b.status==="open"&&(b.status="half-open",b.successCount=1,b.failureCount=0))}recordFailure(d,g,y){if(!this.config.enabled)return;let b=this.getKey(d,g),D=this.states.get(b);D||(D={provider:d,model:g,status:"closed",failureCount:0,successCount:0,lastFailureTime:0,lastProbeTime:0},this.states.set(b,D)),D.failureCount++,D.lastFailureTime=Date.now(),D.lastError=y,D.status==="half-open"?(D.status="open",D.successCount=0,D.lastProbeTime=0):D.status==="closed"&&D.failureCount>=this.config.failureThreshold&&(D.status="open",D.lastProbeTime=0)}getState(d,g){return this.states.get(this.getKey(d,g))}isAvailable(d,g){if(!this.config.enabled)return!0;let y=this.getState(d,g);return y?y.status!=="open":!0}getPriority(d,g){if(!this.config.enabled)return 0;let y=this.getState(d,g);if(!y)return 0;switch(y.status){case"closed":return 0;case"half-open":return 1;case"open":return 2}}getHealthyModels(){return[]}getFailPoolModels(){let d=[];for(let[g,y]of this.states)y.status==="open"&&d.push(g);return d}getHalfOpenModels(){let d=[];for(let[g,y]of this.states)y.status==="half-open"&&d.push(g);return d}needsProbe(d){return Date.now()-d.lastProbeTime>=this.config.probeIntervalMinutes*60*1e3}markProbeAttempt(d,g){let y=this.getKey(d,g),b=this.states.get(y);b&&b.status==="open"&&(b.lastProbeTime=Date.now())}clear(){this.states.clear()}getAllStates(){return Array.from(this.states.values())}stopProbeTimer(){this.probeTimer&&(clearInterval(this.probeTimer),this.probeTimer=void 0)}},jxt=null;function FIt(d){return jxt||(jxt=new wzt(d)),jxt}async function Fzt(d,g,y,b){let D=d.body,S=d.provider,E=y.providerService.getProvider(S);if(!E)throw yY(`Provider '${S}' not found`,404,"provider_not_found");try{let{requestBody:I,config:N,bypass:L}=await IIt(D,E,b,d.headers,{req:d}),R=await NIt(I,N,E,y,L,b,{req:d}),j=await PIt(I,R,E,b,L,{req:d});return BIt(j,g,D)}catch(I){if(I.code==="provider_response_error"){let N=await Izt(d,g,y,b,I);if(N)return N}throw I}}async function Izt(d,g,y,b,D){let S=d.scenarioType||"default",E=d.familyFallback,I=y.configService.get("fallback"),N=FIt(),L=[];if(E?.[S]?L=E[S]:I?.[S]&&(L=I[S]),!Array.isArray(L)||L.length===0)return null;let R=d.provider||"",j=d.body.model||"";N.recordFailure(R,j,D?.message),d.log.warn(`Request failed for ${d.scenarioType}, trying ${L.length} fallback models`);let Q=L.sort((M,U)=>{let[O,q]=M.split(","),[J,H]=U.split(",");return N.getPriority(O,q)-N.getPriority(J,H)});for(let M of Q)try{let[U,...O]=M.split(","),q=O.join(",");if(!N.isAvailable(U,q)){d.log.warn(`Fallback model ${M} unavailable (fail pool), skipping`);continue}d.log.info(`Trying fallback model: ${M}`);let J={...d.body};J.model=q;let H={...d,provider:U,body:J},ee=y.providerService.getProvider(U);if(!ee){d.log.warn(`Fallback provider '${U}' not found, skipping`);continue}let{requestBody:W,config:se,bypass:_e}=await IIt(J,ee,b,d.headers,{req:H}),oe=await NIt(W,se,ee,y,_e,b,{req:H}),fe=await PIt(W,oe,ee,b,_e,{req:H});return d.log.info(`Fallback model ${M} succeeded`),N.recordSuccess(U,q),BIt(fe,g,J)}catch(U){let[O,...q]=M.split(","),J=q.join(",");N.recordFailure(O,J,U.message),d.log.warn(`Fallback model ${M} failed: ${U.message}`);continue}return d.log.error(`All fallback models failed for ${S}`),null}async function IIt(d,g,y,b,D){let S=JSON.parse(JSON.stringify(d)),E={},I=!1;if(I=Nzt(g,y,d),I&&(b instanceof Headers?b.delete("content-length"):delete b["content-length"],E.headers=b),!I&&typeof y.transformRequestOut=="function"){let N=await y.transformRequestOut(S);N.body?(S=N.body,E=N.config||{}):S=N}if(!I&&g.transformer?.use?.length)for(let N of g.transformer.use){if(!N||typeof N.transformRequestIn!="function")continue;let L=await N.transformRequestIn(S,g,D);L.body?(S=L.body,E={...E,...L.config}):S=L}if(!I&&g.transformer?.[d.model]?.use?.length)for(let N of g.transformer[d.model].use)!N||typeof N.transformRequestIn!="function"||(S=await N.transformRequestIn(S,g,D));return{requestBody:S,config:E,bypass:I}}function Nzt(d,g,y){return d.transformer?.use?.length===1&&d.transformer.use[0].name===g.name&&(!d.transformer?.[y.model]?.use.length||d.transformer?.[y.model]?.use.length===1&&d.transformer?.[y.model]?.use[0].name===g.name)}async function NIt(d,g,y,b,D,S,E){let I=g.url||new URL(y.baseUrl);if(D&&typeof S.auth=="function"){let R=await S.auth(d,y);if(R.body){d=R.body;let j=g.headers||{};R.config?.headers&&(j={...j,...R.config.headers},delete j.host,delete R.config.headers),g={...g,...R.config,headers:j}}else d=R}let N={Authorization:`Bearer ${y.apiKey}`,...g?.headers||{}};for(let R in N)(N[R]==="undefined"||["authorization","Authorization"].includes(R)&&N[R]?.includes("undefined"))&&delete N[R];let L=await Dzt(I,d,{httpsProxy:b.configService.getHttpsProxy(),...g,headers:JSON.parse(JSON.stringify(N))},E,b.log);if(!L.ok){let R=await L.text();throw b.log.error(`[provider_response_error] Error from provider(${y.name},${d.model}: ${L.status}): ${R}`),yY(`Error from provider(${y.name},${d.model}: ${L.status}): ${R}`,L.status,"provider_response_error")}return L}async function PIt(d,g,y,b,D,S){let E=g;if(!D&&y.transformer?.use?.length)for(let I of Array.from(y.transformer.use).reverse())!I||typeof I.transformResponseOut!="function"||(E=await I.transformResponseOut(E,S));if(!D&&y.transformer?.[d.model]?.use?.length)for(let I of Array.from(y.transformer[d.model].use).reverse())!I||typeof I.transformResponseOut!="function"||(E=await I.transformResponseOut(E,S));return!D&&b.transformResponseIn&&(E=await b.transformResponseIn(E,S)),E}function BIt(d,g,y){return d.ok||g.code(d.status),y.stream===!0?(g.header("Content-Type","text/event-stream"),g.header("Cache-Control","no-cache"),g.header("Connection","keep-alive"),g.send(d.body)):d.json()}var nwt=async d=>{d.get("/",async()=>({message:"LLMs API",version:Szt})),d.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let g=d.transformerService.getTransformersWithEndpoint();for(let{transformer:y}of g)y.endPoint&&d.post(y.endPoint,async(b,D)=>Fzt(b,D,d,y));d.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(y,b)=>{let{name:D,baseUrl:S,apiKey:E,models:I}=y.body;if(!D?.trim())throw yY("Provider name is required",400,"invalid_request");if(!S||!Pzt(S))throw yY("Valid base URL is required",400,"invalid_request");if(!E?.trim())throw yY("API key is required",400,"invalid_request");if(!I||!Array.isArray(I)||I.length===0)throw yY("At least one model is required",400,"invalid_request");if(d.providerService.getProvider(y.body.name))throw yY(`Provider with name '${y.body.name}' already exists`,400,"provider_exists");return d.providerService.registerProvider(y.body)}),d.get("/providers",async()=>d.providerService.getProviders()),d.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async y=>{let b=d.providerService.getProvider(y.params.id);if(!b)throw yY("Provider not found",404,"provider_not_found");return b}),d.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(y,b)=>{let D=d.providerService.updateProvider(y.params.id,y.body);if(!D)throw yY("Provider not found",404,"provider_not_found");return D}),d.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async y=>{if(!d.providerService.deleteProvider(y.params.id))throw yY("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),d.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(y,b)=>{if(!d.providerService.toggleProvider(y.params.id,y.body.enabled))throw yY("Provider not found",404,"provider_not_found");return{message:`Provider ${y.body.enabled?"enabled":"disabled"} successfully`}})};function Pzt(d){try{return new URL(d),!0}catch{return!1}}var iwt=class{constructor(d,g,y){this.configService=d,this.transformerService=g,this.logger=y,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let d=this.configService.get("providers");if(d&&Array.isArray(d)){this.initializeFromProvidersArray(d);return}}initializeFromProvidersArray(d){d.forEach(g=>{try{if(!g.name||!g.api_base_url||!g.api_key)return;let y={};g.transformer&&Object.keys(g.transformer).forEach(b=>{b==="use"?Array.isArray(g.transformer.use)&&(y.use=g.transformer.use.map(D=>{if(Array.isArray(D)&&typeof D[0]=="string"){let S=this.transformerService.getTransformer(D[0]);if(S)return new S(D[1])}if(typeof D=="string"){let S=this.transformerService.getTransformer(D);return typeof S=="function"?new S:S}}).filter(D=>typeof D<"u")):Array.isArray(g.transformer[b]?.use)&&(y[b]={use:g.transformer[b].use.map(D=>{if(Array.isArray(D)&&typeof D[0]=="string"){let S=this.transformerService.getTransformer(D[0]);if(S)return new S(D[1])}if(typeof D=="string"){let S=this.transformerService.getTransformer(D);return typeof S=="function"?new S:S}}).filter(D=>typeof D<"u")})}),this.registerProvider({name:g.name,baseUrl:g.api_base_url,apiKey:g.api_key,models:g.models||[],transformer:g.transformer?y:void 0}),this.logger.info(`${g.name} provider registered`)}catch(y){this.logger.error(`${g.name} provider registered error: ${y}`)}})}registerProvider(d){let g={...d};return this.providers.set(g.name,g),d.models.forEach(y=>{let b=`${g.name},${y}`,D={provider:g.name,model:y,fullModel:b};this.modelRoutes.set(b,D),this.modelRoutes.has(y)||this.modelRoutes.set(y,D)}),g}getProviders(){return Array.from(this.providers.values())}getProvider(d){return this.providers.get(d)}updateProvider(d,g){let y=this.providers.get(d);if(!y)return null;let b={...y,...g,updatedAt:new Date};return this.providers.set(d,b),g.models&&(y.models.forEach(D=>{let S=`${y.name},${D}`;this.modelRoutes.delete(S),this.modelRoutes.delete(D)}),g.models.forEach(D=>{let S=`${y.name},${D}`,E={provider:y.name,model:D,fullModel:S};this.modelRoutes.set(S,E),this.modelRoutes.has(D)||this.modelRoutes.set(D,E)})),b}deleteProvider(d){let g=this.providers.get(d);return g?(g.models.forEach(y=>{let b=`${g.name},${y}`;this.modelRoutes.delete(b),this.modelRoutes.delete(y)}),this.providers.delete(d),!0):!1}toggleProvider(d,g){return!!this.providers.get(d)}resolveModelRoute(d){let g=this.modelRoutes.get(d);if(!g)return null;let y=this.providers.get(g.provider);return y?{provider:y,originalModel:d,targetModel:g.model}:null}getAvailableModelNames(){let d=[];return this.providers.forEach(g=>{g.models.forEach(y=>{d.push(y),d.push(`${g.name},${y}`)})}),d}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(d){return d?Array.isArray(d)?d.reduce((g,y)=>{if(Array.isArray(y)){let[b,D={}]=y;g[b]=D}else g[y]={};return g},{}):d:{}}async getAvailableModels(){let d=[];return this.providers.forEach(g=>{g.models.forEach(y=>{d.push({id:y,object:"model",owned_by:g.name,provider:g.name}),d.push({id:`${g.name},${y}`,object:"model",owned_by:g.name,provider:g.name})})}),{object:"list",data:d}}},zO=[];for(let d=0;d<256;++d)zO.push((d+256).toString(16).slice(1));function Bzt(d,g=0){return(zO[d[g+0]]+zO[d[g+1]]+zO[d[g+2]]+zO[d[g+3]]+"-"+zO[d[g+4]]+zO[d[g+5]]+"-"+zO[d[g+6]]+zO[d[g+7]]+"-"+zO[d[g+8]]+zO[d[g+9]]+"-"+zO[d[g+10]]+zO[d[g+11]]+zO[d[g+12]]+zO[d[g+13]]+zO[d[g+14]]+zO[d[g+15]]).toLowerCase()}var sft=new Uint8Array(256),qpt=sft.length;function Ozt(){return qpt>sft.length-16&&((0,$Jt.randomFillSync)(sft),qpt=0),sft.slice(qpt,qpt+=16)}var awt={randomUUID:zJt.randomUUID};function Lzt(d,g,y){if(awt.randomUUID&&!g&&!d)return awt.randomUUID();d=d||{};let b=d.random??d.rng?.()??Ozt();if(b.length<16)throw new Error("Random bytes length must be >= 16");if(b[6]=b[6]&15|64,b[8]=b[8]&63|128,g){if(y=y||0,y<0||y+16>g.length)throw new RangeError(`UUID byte range ${y}:${y+15} is out of buffer bounds`);for(let D=0;D<16;++D)g[y+D]=b[D];return g}return Bzt(b)}var yZe=Lzt,Rzt=d=>d<=0?"none":d<=1024?"low":d<=8192?"medium":"high",Mzt=(d,g)=>(d.includes("base64")&&(d=d.split("base64").pop(),d.startsWith(",")&&(d=d.slice(1))),`data:${g};base64,${d}`),jzt=class{constructor(d){this.options=d,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(d,g){let y={};return this.useBearer?(y.authorization=`Bearer ${g.apiKey}`,y["x-api-key"]=void 0):(y["x-api-key"]=g.apiKey,y.authorization=void 0),{body:d,config:{headers:y}}}async transformRequestOut(d){let g=[];if(d.system){if(typeof d.system=="string")g.push({role:"system",content:d.system});else if(Array.isArray(d.system)&&d.system.length){let b=d.system.filter(D=>D.type==="text"&&D.text).map(D=>({type:"text",text:D.text,cache_control:D.cache_control}));g.push({role:"system",content:b})}}JSON.parse(JSON.stringify(d.messages||[]))?.forEach(b=>{if(b.role==="user"||b.role==="assistant"){if(typeof b.content=="string"){g.push({role:b.role,content:b.content});return}if(Array.isArray(b.content)){if(b.role==="user"){let D=b.content.filter(E=>E.type==="tool_result"&&E.tool_use_id);D.length&&D.forEach(E=>{let I={role:"tool",content:typeof E.content=="string"?E.content:JSON.stringify(E.content),tool_call_id:E.tool_use_id,cache_control:E.cache_control};g.push(I)});let S=b.content.filter(E=>E.type==="text"&&E.text||E.type==="image"&&E.source);S.length&&g.push({role:"user",content:S.map(E=>E?.type==="image"?{type:"image_url",image_url:{url:E.source?.type==="base64"?Mzt(E.source.data,E.source.media_type):E.source.url},media_type:E.source.media_type}:E)})}else if(b.role==="assistant"){let D={role:"assistant",content:""},S=b.content.filter(N=>N.type==="text"&&N.text);S.length&&(D.content=S.map(N=>N.text).join(`
1798
+ `):`${y}${d}`}async output(d,g={}){try{let y=this.formatData(d,g);switch(this.config.level||"log"){case"info":console.info(y);break;case"warn":console.warn(y);break;case"error":console.error(y);break;case"debug":console.debug(y);break;case"log":default:console.log(y);break}return!0}catch(y){return console.error("[ConsoleOutputHandler] Output failed:",y),!1}}}}),SIt,kIt=Y3(()=>{"use strict";SIt=class{type="webhook";config;defaultTimeout=3e4;constructor(d){if(!d.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...d}}buildHeaders(){let d={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(d.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let g=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");d.Authorization=`Basic ${g}`}break;case"custom":this.config.auth.custom&&(d[this.config.auth.custom.header]=this.config.auth.custom.value);break}return d}buildBody(d,g){let{format:y="json",timestamp:b=!0,prefix:D,metadata:S}=g||{},E={data:d};return b&&(E.timestamp=new Date().toISOString()),D&&(E.prefix=D),S&&Object.keys(S).length>0&&(E.metadata=S),E}async sendRequest(d,g,y,b,D){let S=new AbortController,E=setTimeout(()=>S.abort(),D);try{let I=await fetch(d,{method:g,headers:y,body:JSON.stringify(b),signal:S.signal});if(clearTimeout(E),!I.ok)throw new Error(`HTTP ${I.status}: ${I.statusText}`);return I}catch(I){throw clearTimeout(E),I}}delay(d){return new Promise(g=>setTimeout(g,d))}async sendWithRetry(d,g,y,b,D,S){let E=null;for(let I=1;I<=S.maxAttempts;I++)try{return await this.sendRequest(d,g,y,b,D)}catch(N){if(E=N,I===S.maxAttempts)break;let L=S.backoffMs*Math.pow(2,I-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${I}/${S.maxAttempts}), retrying in ${L}ms...`,N.message),await this.delay(L)}throw E}async output(d,g={}){let y=g.timeout||this.defaultTimeout;try{let b=this.buildHeaders(),D=this.buildBody(d,g),S=await this.sendWithRetry(this.config.url,this.config.method,b,D,y,this.config.retry);return!0}catch(b){let D=b instanceof Error?b.message:String(b);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${D}`),!1;throw new Error(`Webhook output failed: ${D}`)}}}}),TIt,wIt=Y3(()=>{"use strict";TIt=class{type="temp-file";config;baseDir;constructor(d={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...d};let g=(0,MJt.tmpdir)();this.baseDir=(0,NTt.join)(g,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,wxt.existsSync)(this.baseDir)||(0,wxt.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(d){try{let g=d.match(/_session_([a-f0-9-]+)/i);return g?g[1]:null}catch{return null}}getFilePath(d){let g=this.config.prefix||"session",y=this.config.extension?`.${this.config.extension}`:"",b;if(this.config.includeTimestamp){let D=Date.now();b=`${g}-${d}-${D}${y}`}else b=`${g}-${d}${y}`;return(0,NTt.join)(this.baseDir,b)}async output(d,g={}){try{let y=g.metadata?.sessionId;if(!y)return!1;let b={...d,timestamp:Date.now(),sessionId:y},D=this.getFilePath(y);return(0,wxt.writeFileSync)(D,JSON.stringify(b,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),twt,fZe,xzt=Y3(()=>{"use strict";DIt(),kIt(),wIt(),twt=class{handlers=new Map;defaultOptions={};registerHandler(d,g){this.handlers.set(d,g)}registerHandlers(d){for(let g of d)if(g.enabled!==!1)try{let y=this.createHandler(g),b=g.type+"_"+Date.now();this.registerHandler(b,y)}catch(y){console.error(`[OutputManager] Failed to register ${g.type} handler:`,y)}}createHandler(d){switch(d.type){case"console":return new EIt(d.config);case"webhook":return new SIt(d.config);case"temp-file":return new TIt(d.config);default:throw new Error(`Unknown output handler type: ${d.type}`)}}unregisterHandler(d){return this.handlers.delete(d)}getHandler(d){return this.handlers.get(d)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(d){this.defaultOptions={...this.defaultOptions,...d}}getDefaultOptions(){return{...this.defaultOptions}}async output(d,g){let y={...this.defaultOptions,...g},b={success:[],failed:[]},D=Array.from(this.handlers.entries()).map(async([S,E])=>{try{await E.output(d,y)?b.success.push(S):b.failed.push(S)}catch(I){console.error(`[OutputManager] Handler ${S} failed:`,I),b.failed.push(S)}});return await Promise.all(D),b}async outputTo(d,g,y){let b={...this.defaultOptions,...y},D={success:[],failed:[]},S=d.map(async E=>{let I=this.handlers.get(E);if(!I){console.warn(`[OutputManager] Handler ${E} not found`),D.failed.push(E);return}try{await I.output(g,b)?D.success.push(E):D.failed.push(E)}catch(N){console.error(`[OutputManager] Handler ${E} failed:`,N),D.failed.push(E)}});return await Promise.all(S),D}async outputToType(d,g,y){let b=Array.from(this.handlers.entries()).filter(([D,S])=>S.type===d).map(([D])=>D);return this.outputTo(b,g,y)}},fZe=new twt}),Czt=Bfe(i3t(),1),rwt=class{config={};options;constructor(d={jsonPath:"./config.json"}){this.options={envPath:d.envPath||".env",jsonPath:d.jsonPath,useEnvFile:!1,useJsonFile:d.useJsonFile!==!1,useEnvironmentVariables:d.useEnvironmentVariables!==!1,...d},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 d=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,PTt.join)(process.cwd(),this.options.jsonPath);if((0,Fxt.existsSync)(d))try{let g=(0,Fxt.readFileSync)(d,"utf-8"),y=Czt.default.parse(g);this.config={...this.config,...y},console.log(`Loaded JSON config from: ${d}`)}catch(g){console.warn(`Failed to load JSON config from ${d}:`,g)}else console.warn(`JSON config file not found: ${d}`)}loadEnvConfig(){let d=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,PTt.join)(process.cwd(),this.options.envPath);if((0,Fxt.existsSync)(d))try{let g=(0,UJt.config)({path:d});g.parsed&&(this.config={...this.config,...this.parseEnvConfig(g.parsed)})}catch(g){console.warn(`Failed to load .env config from ${d}:`,g)}}loadEnvironmentVariables(){let d=this.parseEnvConfig(process.env);this.config={...this.config,...d}}parseEnvConfig(d){let g={};return Object.assign(g,d),g}isAbsolutePath(d){return d.startsWith("/")||d.includes(":")}get(d,g){let y=this.config[d];return y!==void 0?y:g}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(d){return this.config[d]!==void 0}set(d,g){this.config[d]=g}reload(){this.config={},this.loadConfig()}getConfigSummary(){let d=[];return this.options.initialConfig&&d.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&d.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&d.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&d.push("Environment Variables"),`Config sources: ${d.join(", ")}`}};function yY(d,g=500,y="internal_error",b="api_error"){let D=new Error(d);return D.statusCode=g,D.code=y,D.type=b,D}async function Ezt(d,g,y){g.log.error(d);let b=d.statusCode||500,D={error:{message:d.message+d.stack||"Internal Server Error",type:d.type||"api_error",code:d.code||"internal_error"}};return y.code(b).send(D)}function Dzt(d,g,y,b,D){let S=new Headers({"Content-Type":"application/json"});y.headers&&Object.entries(y.headers).forEach(([L,R])=>{R&&S.set(L,R)});let E,I=AbortSignal.timeout(y.TIMEOUT??60*1e3*60);if(y.signal){let L=new AbortController,R=()=>L.abort();y.signal.addEventListener("abort",R),I.addEventListener("abort",R),E=L.signal}else E=I;let N={method:"POST",headers:S,body:JSON.stringify(g),signal:E};return y.httpsProxy&&(N.dispatcher=new JJt.ProxyAgent(new URL(y.httpsProxy).toString())),D?.debug({reqId:b.req.id,request:N,headers:Object.fromEntries(S.entries()),requestUrl:typeof d=="string"?d:d.toString(),useProxy:y.httpsProxy},"final request"),fetch(typeof d=="string"?d:d.toString(),N)}var Szt="1.0.64",kzt=Bfe(m$t(),1),Tzt={enabled:!0,failureThreshold:3,probeIntervalMinutes:5,halfOpenSuccessThreshold:2},wzt=class{states=new kzt.Map;config;probeTimer;constructor(d){this.config={...Tzt,...d}}getKey(d,g){return`${d},${g}`}recordSuccess(d,g){if(!this.config.enabled)return;let y=this.getKey(d,g),b=this.states.get(y);b&&(b.successCount++,b.status==="half-open"?b.successCount>=this.config.halfOpenSuccessThreshold&&this.states.delete(y):b.status==="open"&&(b.status="half-open",b.successCount=1,b.failureCount=0))}recordFailure(d,g,y){if(!this.config.enabled)return;let b=this.getKey(d,g),D=this.states.get(b);D||(D={provider:d,model:g,status:"closed",failureCount:0,successCount:0,lastFailureTime:0,lastProbeTime:0},this.states.set(b,D)),D.failureCount++,D.lastFailureTime=Date.now(),D.lastError=y,D.status==="half-open"?(D.status="open",D.successCount=0,D.lastProbeTime=0):D.status==="closed"&&D.failureCount>=this.config.failureThreshold&&(D.status="open",D.lastProbeTime=0)}getState(d,g){return this.states.get(this.getKey(d,g))}isAvailable(d,g){if(!this.config.enabled)return!0;let y=this.getState(d,g);return y?y.status!=="open":!0}getPriority(d,g){if(!this.config.enabled)return 0;let y=this.getState(d,g);if(!y)return 0;switch(y.status){case"closed":return 0;case"half-open":return 1;case"open":return 2}}getHealthyModels(){return[]}getFailPoolModels(){let d=[];for(let[g,y]of this.states)y.status==="open"&&d.push(g);return d}getHalfOpenModels(){let d=[];for(let[g,y]of this.states)y.status==="half-open"&&d.push(g);return d}needsProbe(d){return Date.now()-d.lastProbeTime>=this.config.probeIntervalMinutes*60*1e3}markProbeAttempt(d,g){let y=this.getKey(d,g),b=this.states.get(y);b&&b.status==="open"&&(b.lastProbeTime=Date.now())}clear(){this.states.clear()}getAllStates(){return Array.from(this.states.values())}stopProbeTimer(){this.probeTimer&&(clearInterval(this.probeTimer),this.probeTimer=void 0)}},jxt=null;function FIt(d){return jxt||(jxt=new wzt(d)),jxt}async function Fzt(d,g,y,b){let D=d.body,S=d.provider,E=y.providerService.getProvider(S);if(!E)throw yY(`Provider '${S}' not found`,404,"provider_not_found");try{let{requestBody:I,config:N,bypass:L}=await IIt(D,E,b,d.headers,{req:d}),R=await NIt(I,N,E,y,L,b,{req:d}),j=await PIt(I,R,E,b,L,{req:d});return BIt(j,g,D)}catch(I){if(I.code==="provider_response_error"){let N=await Izt(d,g,y,b,I);if(N)return N}throw I}}async function Izt(d,g,y,b,D){let S=d.scenarioType||"default",E=d.familyFallback,I=y.configService.get("fallback"),N=FIt(),L=[];if(E?.[S]?L=E[S]:I?.[S]&&(L=I[S]),!Array.isArray(L)||L.length===0)return null;let R=d.provider||"",j=d.body.model||"";N.recordFailure(R,j,D?.message),d.log.warn(`Request failed for ${d.scenarioType}, trying ${L.length} fallback models`);let Q=L.sort((M,U)=>{let[O,q]=M.split(","),[J,H]=U.split(",");return N.getPriority(O,q)-N.getPriority(J,H)});for(let M of Q)try{let[U,...O]=M.split(","),q=O.join(",");if(!N.isAvailable(U,q)){d.log.warn(`Fallback model ${M} unavailable (fail pool), skipping`);continue}d.log.info(`Trying fallback model: ${M}`);let J={...d.body};J.model=q;let H={...d,provider:U,body:J},ee=y.providerService.getProvider(U);if(!ee){d.log.warn(`Fallback provider '${U}' not found, skipping`);continue}let{requestBody:W,config:se,bypass:_e}=await IIt(J,ee,b,d.headers,{req:H}),oe=await NIt(W,se,ee,y,_e,b,{req:H}),fe=await PIt(W,oe,ee,b,_e,{req:H});return d.log.info(`Fallback model ${M} succeeded`),N.recordSuccess(U,q),BIt(fe,g,J)}catch(U){let[O,...q]=M.split(","),J=q.join(",");N.recordFailure(O,J,U.message),d.log.warn(`Fallback model ${M} failed: ${U.message}`);continue}return d.log.error(`All fallback models failed for ${S}`),null}async function IIt(d,g,y,b,D){let S=JSON.parse(JSON.stringify(d)),E={},I=!1;if(I=Nzt(g,y,d),I&&(b instanceof Headers?b.delete("content-length"):delete b["content-length"],E.headers=b),!I&&typeof y.transformRequestOut=="function"){let N=await y.transformRequestOut(S);N.body?(S=N.body,E=N.config||{}):S=N}if(!I&&g.transformer?.use?.length)for(let N of g.transformer.use){if(!N||typeof N.transformRequestIn!="function")continue;let L=await N.transformRequestIn(S,g,D);L.body?(S=L.body,E={...E,...L.config}):S=L}if(!I&&g.transformer?.[d.model]?.use?.length)for(let N of g.transformer[d.model].use)!N||typeof N.transformRequestIn!="function"||(S=await N.transformRequestIn(S,g,D));return{requestBody:S,config:E,bypass:I}}function Nzt(d,g,y){return d.transformer?.use?.length===1&&d.transformer.use[0].name===g.name&&(!d.transformer?.[y.model]?.use.length||d.transformer?.[y.model]?.use.length===1&&d.transformer?.[y.model]?.use[0].name===g.name)}async function NIt(d,g,y,b,D,S,E){let I=g.url||new URL(y.baseUrl);if(D&&typeof S.auth=="function"){let R=await S.auth(d,y);if(R.body){d=R.body;let j=g.headers||{};R.config?.headers&&(j={...j,...R.config.headers},delete j.host,delete R.config.headers),g={...g,...R.config,headers:j}}else d=R}let N={Authorization:`Bearer ${y.apiKey}`,...g?.headers||{}};for(let R in N)(N[R]==="undefined"||["authorization","Authorization"].includes(R)&&N[R]?.includes("undefined"))&&delete N[R];let L=await Dzt(I,d,{httpsProxy:b.configService.getHttpsProxy(),...g,headers:JSON.parse(JSON.stringify(N))},E,b.log);if(!L.ok){let R=await L.text();throw b.log.error(`[provider_response_error] Error from provider(${y.name},${d.model}: ${L.status}): ${R}`),yY(`Error from provider(${y.name},${d.model}: ${L.status}): ${R}`,L.status,"provider_response_error")}return L}async function PIt(d,g,y,b,D,S){let E=g;if(!D&&y.transformer?.use?.length)for(let I of Array.from(y.transformer.use).reverse())!I||typeof I.transformResponseOut!="function"||(E=await I.transformResponseOut(E,S));if(!D&&y.transformer?.[d.model]?.use?.length)for(let I of Array.from(y.transformer[d.model].use).reverse())!I||typeof I.transformResponseOut!="function"||(E=await I.transformResponseOut(E,S));return!D&&b.transformResponseIn&&(E=await b.transformResponseIn(E,S)),E}function BIt(d,g,y){return d.ok||g.code(d.status),y.stream===!0?(g.header("Content-Type","text/event-stream"),g.header("Cache-Control","no-cache"),g.header("Connection","keep-alive"),g.send(d.body)):d.json()}var nwt=async d=>{d.get("/",async()=>({message:"LLMs API",version:Szt})),d.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let g=d.transformerService.getTransformersWithEndpoint();for(let{transformer:y}of g)y.endPoint&&d.post(y.endPoint,async(b,D)=>Fzt(b,D,d,y));d.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(y,b)=>{let{name:D,baseUrl:S,apiKey:E,models:I}=y.body;if(!D?.trim())throw yY("Provider name is required",400,"invalid_request");if(!S||!Pzt(S))throw yY("Valid base URL is required",400,"invalid_request");if(!E?.trim())throw yY("API key is required",400,"invalid_request");if(!I||!Array.isArray(I)||I.length===0)throw yY("At least one model is required",400,"invalid_request");if(d.providerService.getProvider(y.body.name))throw yY(`Provider with name '${y.body.name}' already exists`,400,"provider_exists");return d.providerService.registerProvider(y.body)}),d.get("/providers",async()=>d.providerService.getProviders()),d.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async y=>{let b=d.providerService.getProvider(y.params.id);if(!b)throw yY("Provider not found",404,"provider_not_found");return b}),d.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(y,b)=>{let D=d.providerService.updateProvider(y.params.id,y.body);if(!D)throw yY("Provider not found",404,"provider_not_found");return D}),d.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async y=>{if(!d.providerService.deleteProvider(y.params.id))throw yY("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),d.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(y,b)=>{if(!d.providerService.toggleProvider(y.params.id,y.body.enabled))throw yY("Provider not found",404,"provider_not_found");return{message:`Provider ${y.body.enabled?"enabled":"disabled"} successfully`}})};function Pzt(d){try{return new URL(d),!0}catch{return!1}}var iwt=class{constructor(d,g,y){this.configService=d,this.transformerService=g,this.logger=y,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let d=this.configService.get("providers");if(d&&Array.isArray(d)){this.initializeFromProvidersArray(d);return}}initializeFromProvidersArray(d){d.forEach(g=>{try{if(!g.name||!g.api_base_url||!g.api_key)return;let y={};g.transformer&&Object.keys(g.transformer).forEach(b=>{b==="use"?Array.isArray(g.transformer.use)&&(y.use=g.transformer.use.map(D=>{if(Array.isArray(D)&&typeof D[0]=="string"){let S=this.transformerService.getTransformer(D[0]);if(S)return new S(D[1])}if(typeof D=="string"){let S=this.transformerService.getTransformer(D);return typeof S=="function"?new S:S}}).filter(D=>typeof D<"u")):Array.isArray(g.transformer[b]?.use)&&(y[b]={use:g.transformer[b].use.map(D=>{if(Array.isArray(D)&&typeof D[0]=="string"){let S=this.transformerService.getTransformer(D[0]);if(S)return new S(D[1])}if(typeof D=="string"){let S=this.transformerService.getTransformer(D);return typeof S=="function"?new S:S}}).filter(D=>typeof D<"u")})}),this.registerProvider({name:g.name,baseUrl:g.api_base_url,apiKey:g.api_key,models:g.models||[],transformer:g.transformer?y:void 0}),this.logger.info(`${g.name} provider registered`)}catch(y){this.logger.error(`${g.name} provider registered error: ${y}`)}})}registerProvider(d){let g={...d};return this.providers.set(g.name,g),d.models.forEach(y=>{let b=`${g.name},${y}`,D={provider:g.name,model:y,fullModel:b};this.modelRoutes.set(b,D),this.modelRoutes.has(y)||this.modelRoutes.set(y,D)}),g}getProviders(){return Array.from(this.providers.values())}getProvider(d){return this.providers.get(d)}updateProvider(d,g){let y=this.providers.get(d);if(!y)return null;let b={...y,...g,updatedAt:new Date};return this.providers.set(d,b),g.models&&(y.models.forEach(D=>{let S=`${y.name},${D}`;this.modelRoutes.delete(S),this.modelRoutes.delete(D)}),g.models.forEach(D=>{let S=`${y.name},${D}`,E={provider:y.name,model:D,fullModel:S};this.modelRoutes.set(S,E),this.modelRoutes.has(D)||this.modelRoutes.set(D,E)})),b}deleteProvider(d){let g=this.providers.get(d);return g?(g.models.forEach(y=>{let b=`${g.name},${y}`;this.modelRoutes.delete(b),this.modelRoutes.delete(y)}),this.providers.delete(d),!0):!1}toggleProvider(d,g){return!!this.providers.get(d)}resolveModelRoute(d){let g=this.modelRoutes.get(d);if(!g)return null;let y=this.providers.get(g.provider);return y?{provider:y,originalModel:d,targetModel:g.model}:null}getAvailableModelNames(){let d=[];return this.providers.forEach(g=>{g.models.forEach(y=>{d.push(y),d.push(`${g.name},${y}`)})}),d}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(d){return d?Array.isArray(d)?d.reduce((g,y)=>{if(Array.isArray(y)){let[b,D={}]=y;g[b]=D}else g[y]={};return g},{}):d:{}}async getAvailableModels(){let d=[];return this.providers.forEach(g=>{g.models.forEach(y=>{d.push({id:y,object:"model",owned_by:g.name,provider:g.name}),d.push({id:`${g.name},${y}`,object:"model",owned_by:g.name,provider:g.name})})}),{object:"list",data:d}}},zO=[];for(let d=0;d<256;++d)zO.push((d+256).toString(16).slice(1));function Bzt(d,g=0){return(zO[d[g+0]]+zO[d[g+1]]+zO[d[g+2]]+zO[d[g+3]]+"-"+zO[d[g+4]]+zO[d[g+5]]+"-"+zO[d[g+6]]+zO[d[g+7]]+"-"+zO[d[g+8]]+zO[d[g+9]]+"-"+zO[d[g+10]]+zO[d[g+11]]+zO[d[g+12]]+zO[d[g+13]]+zO[d[g+14]]+zO[d[g+15]]).toLowerCase()}var sft=new Uint8Array(256),qpt=sft.length;function Ozt(){return qpt>sft.length-16&&((0,$Jt.randomFillSync)(sft),qpt=0),sft.slice(qpt,qpt+=16)}var awt={randomUUID:zJt.randomUUID};function Lzt(d,g,y){if(awt.randomUUID&&!g&&!d)return awt.randomUUID();d=d||{};let b=d.random??d.rng?.()??Ozt();if(b.length<16)throw new Error("Random bytes length must be >= 16");if(b[6]=b[6]&15|64,b[8]=b[8]&63|128,g){if(y=y||0,y<0||y+16>g.length)throw new RangeError(`UUID byte range ${y}:${y+15} is out of buffer bounds`);for(let D=0;D<16;++D)g[y+D]=b[D];return g}return Bzt(b)}var yZe=Lzt,Rzt=d=>d<=0?"none":d<=1024?"low":d<=8192?"medium":"high",Mzt=(d,g)=>(d.includes("base64")&&(d=d.split("base64").pop(),d.startsWith(",")&&(d=d.slice(1))),`data:${g};base64,${d}`),jzt=class{constructor(d){this.options=d,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(d,g){let y={};return this.useBearer?(y.authorization=`Bearer ${g.apiKey}`,y["x-api-key"]=void 0):(y["x-api-key"]=g.apiKey,y.authorization=void 0),{body:d,config:{headers:y}}}async transformRequestOut(d){let g=[];if(d.system){if(typeof d.system=="string")g.push({role:"system",content:d.system});else if(Array.isArray(d.system)&&d.system.length){let b=d.system.filter(D=>D.type==="text"&&D.text).map(D=>({type:"text",text:D.text,cache_control:D.cache_control}));g.push({role:"system",content:b})}}JSON.parse(JSON.stringify(d.messages||[]))?.forEach(b=>{if(b.role==="user"||b.role==="assistant"){if(typeof b.content=="string"){g.push({role:b.role,content:b.content});return}if(Array.isArray(b.content)){if(b.role==="user"){let D=b.content.filter(E=>E.type==="tool_result"&&E.tool_use_id);D.length&&D.forEach(E=>{let I={role:"tool",content:typeof E.content=="string"?E.content:JSON.stringify(E.content),tool_call_id:E.tool_use_id,cache_control:E.cache_control};g.push(I)});let S=b.content.filter(E=>E.type==="text"&&E.text||E.type==="image"&&E.source);S.length&&g.push({role:"user",content:S.map(E=>E?.type==="image"?{type:"image_url",image_url:{url:E.source?.type==="base64"?Mzt(E.source.data,E.source.media_type):E.source.url},media_type:E.source.media_type}:E)})}else if(b.role==="assistant"){let D={role:"assistant",content:""},S=b.content.filter(N=>N.type==="text"&&N.text);S.length&&(D.content=S.map(N=>N.text).join(`
1799
1799
  `));let E=b.content.filter(N=>N.type==="tool_use"&&N.id);E.length&&(D.tool_calls=E.map(N=>({id:N.id,type:"function",function:{name:N.name,arguments:JSON.stringify(N.input||{})}})));let I=b.content.find(N=>N.type==="thinking"&&N.signature);I&&(D.thinking={content:I.thinking,signature:I.signature}),g.push(D)}return}}});let y={messages:g,model:d.model,max_tokens:d.max_tokens,temperature:d.temperature,stream:d.stream,tools:d.tools?.length?this.convertAnthropicToolsToUnified(d.tools):void 0,tool_choice:d.tool_choice};return d.thinking&&(y.reasoning={effort:Rzt(d.thinking.budget_tokens),enabled:d.thinking.type==="enabled"}),d.tool_choice&&(d.tool_choice.type==="tool"?y.tool_choice={type:"function",function:{name:d.tool_choice.name}}:y.tool_choice=d.tool_choice.type),y}async transformResponseIn(d,g){if(d.headers.get("Content-Type")?.includes("text/event-stream")){if(!d.body)throw new Error("Stream response body is null");let y=await this.convertOpenAIStreamToAnthropic(d.body,g);return new Response(y,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let y=await d.json(),b=this.convertOpenAIResponseToAnthropic(y,g);return new Response(JSON.stringify(b),{headers:{"Content-Type":"application/json"}})}}convertAnthropicToolsToUnified(d){return d.map(g=>({type:"function",function:{name:g.name,description:g.description||"",parameters:g.input_schema}}))}async convertOpenAIStreamToAnthropic(d,g){return new ReadableStream({start:async y=>{let b=new TextEncoder,D=`msg_${Date.now()}`,S=null,E="unknown",I=!1,N=!1,L=!1,R=new Map,j=new Map,Q=0,M=0,U=0,O=!1,q=!1,J=0,H=-1,ee=()=>{let oe=J;return J++,oe},W=oe=>{if(!O)try{y.enqueue(oe);let fe=new TextDecoder().decode(oe);this.logger.debug({reqId:g.req.id,data:fe,type:"send data"})}catch(fe){if(fe instanceof TypeError&&fe.message.includes("Controller is already closed"))O=!0;else throw this.logger.debug({reqId:g.req.id,error:fe instanceof Error?fe.message:String(fe),type:"send data error"}),fe}},se=()=>{if(!O)try{if(H>=0){let fe={type:"content_block_stop",index:H};W(b.encode(`event: content_block_stop
1800
1800
  data: ${JSON.stringify(fe)}
1801
1801
 
@@ -2063,7 +2063,7 @@ ${b.content}`),delete b.thinking)});let y=d.messages[d.messages.length-1];return
2063
2063
  error: ${g.message}
2064
2064
  stack: ${g.stack}`),!1}}async initialize(){try{await this.registerDefaultTransformersInternal(),await this.loadFromConfig()}catch(d){this.logger.error(`TransformerService init error: ${d.message}
2065
2065
  Stack: ${d.stack}`)}}async registerDefaultTransformersInternal(){try{Object.values(Tqt).forEach(d=>{if("TransformerName"in d&&typeof d.TransformerName=="string")this.registerTransformer(d.TransformerName,d);else{let g=new d;g&&typeof g=="object"&&(g.logger=this.logger),this.registerTransformer(g.name,g)}})}catch(d){this.logger.error({error:d},"transformer regist error:")}}async loadFromConfig(){let d=this.configService.get("transformers",[]);for(let g of d)await this.registerTransformerFromConfig(g)}},hwt=class{type="tiktoken";name;encoding;constructor(d="cl100k_base"){this.name=`tiktoken-${d}`;try{this.encoding=(0,qJt.get_encoding)(d)}catch{throw new Error(`Failed to initialize tiktoken encoding: ${d}`)}}async initialize(){if(!this.encoding)throw new Error("Tiktoken encoding not initialized")}async countTokens(d){let g=this.encoding;if(!g)throw new Error("Encoding not initialized");let y=0,{messages:b,system:D,tools:S}=d;return Array.isArray(b)&&b.forEach(E=>{typeof E.content=="string"?y+=g.encode(E.content).length:Array.isArray(E.content)&&E.content.forEach(I=>{if(I.type==="text")y+=g.encode(I.text).length;else if(I.type==="tool_use")y+=g.encode(JSON.stringify(I.input)).length;else if(I.type==="tool_result"){let N=typeof I.content=="string"?I.content:JSON.stringify(I.content);y+=g.encode(N).length}})}),typeof D=="string"?y+=g.encode(D).length:Array.isArray(D)&&D.forEach(E=>{E.type==="text"&&(typeof E.text=="string"?y+=g.encode(E.text).length:Array.isArray(E.text)&&E.text.forEach(I=>{y+=g.encode(I||"").length}))}),S&&S.forEach(E=>{E.description&&(y+=g.encode(E.name+E.description).length),E.input_schema&&(y+=g.encode(JSON.stringify(E.input_schema)).length)}),y}isInitialized(){return this.encoding!==void 0}encodeText(d){let g=this.encoding;if(!g)throw new Error("Encoding not initialized");return Array.from(g.encode(d))}dispose(){this.encoding&&(this.encoding.free(),this.encoding=void 0)}},wqt=class{constructor(d){this.trie=this._build_trie(d)}_build_trie(d){let g=Object.create(null);for(let y of d){let b=g;for(let D=0;D<y.length;++D){let S=y[D];b=b[S]??=Object.create(null)}b.end=y}return g}split(d){let g=[],y=d.length,b=0,D=0;for(;D<y;){let S=this.trie,E=null,I=D;for(;I<y&&(S=S[d[I]]);)S.end&&(E=S.end),++I;E?(D>b&&g.push(d.slice(b,D)),g.push(E),D+=E.length,b=D):++D}return b<y&&g.push(d.slice(b)),g}},Fqt=wqt,Iqt=class{constructor(d){this.content=d.content,this.id=d.id,this.single_word=d.single_word??!1,this.lstrip=d.lstrip??!1,this.rstrip=d.rstrip??!1,this.special=d.special??!1,this.normalized=d.normalized??null}},Nqt=Iqt,jIt=(()=>{let d=[...Array.from({length:94},(D,S)=>S+33),...Array.from({length:12},(D,S)=>S+161),...Array.from({length:82},(D,S)=>S+174)],g=d.slice(),y=0;for(let D=0;D<256;++D)d.includes(D)||(d.push(D),g.push(256+y),y+=1);let b=g.map(D=>String.fromCharCode(D));return Object.fromEntries(d.map((D,S)=>[D,b[S]]))})(),Pqt=d=>Object.fromEntries(Object.entries(d).map(([g,y])=>[y,g])),Bqt=Pqt(jIt),gwt=".,!?\u2026\u3002\uFF0C\u3001\u0964\u06D4\u060C",Oqt=new Map([["(?i:'s|'t|'re|'ve|'m|'ll|'d)","(?:'([sS]|[tT]|[rR][eE]|[vV][eE]|[mM]|[lL][lL]|[dD]))"],["(?i:[sdmt]|ll|ve|re)","(?:[sS]|[dD]|[mM]|[tT]|[lL][lL]|[vV][eE]|[rR][eE])"],["[^\\r\\n\\p{L}\\p{N}]?+","[^\\r\\n\\p{L}\\p{N}]?"],["[^\\s\\p{L}\\p{N}]++","[^\\s\\p{L}\\p{N}]+"],[` ?[^(\\s|[${gwt}])]+`,` ?[^\\s${gwt}]+`]]),AZe="\\p{P}\\u0021-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007E",YYt=new RegExp(`^[${AZe}]+$`,"gu"),DEt=d=>d.replace(/ \./g,".").replace(/ \?/g,"?").replace(/ \!/g,"!").replace(/ ,/g,",").replace(/ \' /g,"'").replace(/ n't/g,"n't").replace(/ 'm/g,"'m").replace(/ 's/g,"'s").replace(/ 've/g,"'ve").replace(/ 're/g,"'re"),Hft=(d,g=!0)=>{if(d.Regex!==void 0){let y=d.Regex.replace(/\\([#&~])/g,"$1");for(let[b,D]of Oqt)y=y.replaceAll(b,D);return new RegExp(y,"gu")}else if(d.String!==void 0){let y=Lqt(d.String);return new RegExp(g?y:`(${y})`,"gu")}else return console.warn("Unknown pattern type:",d),null},Lqt=d=>d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Rqt=(d,g,y)=>{let b=[],D=0;for(;D<d.length;){if(b.push(d[D]),(g.get(d[D])??y)!==y){++D;continue}for(;++D<d.length&&(g.get(d[D])??y)===y;)g.get(b.at(-1))!==y&&(b[b.length-1]+=d[D])}return b},Mqt=d=>d>=19968&&d<=40959||d>=13312&&d<=19903||d>=131072&&d<=173791||d>=173824&&d<=177983||d>=177984&&d<=178207||d>=178208&&d<=183983||d>=63744&&d<=64255||d>=194560&&d<=195103,jqt=d=>Number.isInteger(d)||typeof d=="bigint",Qqt=d=>{let g=0;for(let y of d)++g;return g},Uqt=d=>QIt(d.toLowerCase()),bY=(...d)=>Array.prototype.concat.apply([],d),SEt=d=>new Map(Object.entries(d)),Jqt=(d,g)=>{let y=[],b=0;for(let D of d.matchAll(g)){let S=D[0];b<D.index&&y.push(d.slice(b,D.index)),S.length>0&&y.push(S),b=D.index+S.length}return b<d.length&&y.push(d.slice(b)),y},QIt=d=>d.replace(new RegExp("\\p{M}","gu"),""),ywt=(d,g,y=[])=>{if(!d||Array.isArray(d)||typeof d!="object")return`${g} must be a valid object`;for(let b of y)if(!(b in d))return`${g} must contain a "${b}" property`;return null},$qt=d=>d.match(/\S+/g)||[],zqt=class{constructor(){let d=function(...g){return d._call(...g)};return Object.setPrototypeOf(d,new.target.prototype)}},MZe=zqt,qqt=class extends MZe{constructor(d){super(),this.config=d}_call(d){return this.normalize(d)}},Ofe=qqt,Hqt=class extends Ofe{tokenize_chinese_chars(d){let g=[];for(let y=0;y<d.length;++y){let b=d[y],D=b.charCodeAt(0);Mqt(D)?(g.push(" "),g.push(b),g.push(" ")):g.push(b)}return g.join("")}strip_accents(d){return d.normalize("NFD").replace(new RegExp("\\p{Mn}","gu"),"")}is_control(d){switch(d){case" ":case`
2066
- `:case"\r":return!1;default:return new RegExp("^\\p{Cc}|\\p{Cf}|\\p{Co}|\\p{Cs}$","u").test(d)}}clean_text(d){let g=[];for(let y of d){let b=y.charCodeAt(0);b===0||b===65533||this.is_control(y)||(/^\s$/.test(y)?g.push(" "):g.push(y))}return g.join("")}normalize(d){return this.config.clean_text&&(d=this.clean_text(d)),this.config.handle_chinese_chars&&(d=this.tokenize_chinese_chars(d)),this.config.lowercase?(d=d.toLowerCase(),this.config.strip_accents!==!1&&(d=this.strip_accents(d))):this.config.strip_accents&&(d=this.strip_accents(d)),d}},Gqt=Hqt,Wqt=class extends Ofe{constructor(d){super(d),this.charsmap=d.precompiled_charsmap??null}normalize(d){return d=d.replace(/[\u0001-\u0008\u000B\u000E-\u001F\u007F\u008F\u009F]/gm,""),d=d.replace(/[\u0009\u000A\u000C\u000D\u00A0\u1680\u2000-\u200F\u2028\u2029\u202F\u205F\u2581\u3000\uFEFF\uFFFD]/gm," "),d.includes("\uFF5E")?d=d.split("\uFF5E").map(g=>g.normalize("NFKC")).join("\uFF5E"):d=d.normalize("NFKC"),d}},Vqt=Wqt,Kqt=class extends Ofe{constructor(d){super(d),this.normalizers=(d.normalizers??[]).map(g=>UIt(g))}normalize(d){return this.normalizers.reduce((g,y)=>y?y.normalize(g):g,d)}},Yqt=Kqt,Zqt=class extends Ofe{normalize(d){let g=Hft(this.config.pattern??{});return g===null?d:d.replaceAll(g,this.config.content??"")}},Xqt=Zqt,eHt=class extends Ofe{constructor(){super(...arguments),this.form="NFC"}normalize(d){return d=d.normalize(this.form),d}},Gft=eHt,tHt=class extends Gft{constructor(){super(...arguments),this.form="NFC"}},rHt=tHt,nHt=class extends Gft{constructor(){super(...arguments),this.form="NFD"}},iHt=nHt,aHt=class extends Gft{constructor(){super(...arguments),this.form="NFKC"}},oHt=aHt,sHt=class extends Gft{constructor(){super(...arguments),this.form="NFKD"}},lHt=sHt,cHt=class extends Ofe{normalize(d){return this.config.strip_left&&this.config.strip_right?d=d.trim():(this.config.strip_left&&(d=d.trimStart()),this.config.strip_right&&(d=d.trimEnd())),d}},uHt=cHt,_Ht=class extends Ofe{normalize(d){return QIt(d)}},dHt=_Ht,pHt=class extends Ofe{normalize(d){return d.toLowerCase()}},fHt=pHt,mHt=class extends Ofe{normalize(d){return d=this.config.prepend+d,d}},hHt=mHt;function gHt(d){if(d===null)return null;switch(d.type){case"BertNormalizer":return new Gqt(d);case"Precompiled":return new Vqt(d);case"Sequence":return new Yqt(d);case"Replace":return new Xqt(d);case"NFC":return new rHt(d);case"NFD":return new iHt(d);case"NFKC":return new oHt(d);case"NFKD":return new lHt(d);case"Strip":return new uHt(d);case"StripAccents":return new dHt(d);case"Lowercase":return new fHt(d);case"Prepend":return new hHt(d);default:throw new Error(`Unknown Normalizer type: ${d.type}`)}}var UIt=gHt,yHt=class extends MZe{pre_tokenize(d,g){return(Array.isArray(d)?d.map(y=>this.pre_tokenize_text(y,g)):this.pre_tokenize_text(d,g)).flat()}_call(d,g){return this.pre_tokenize(d,g)}},qse=yHt,AHt=class extends qse{constructor(d){super(),this.config=d,this.add_prefix_space=this.config.add_prefix_space??!1,this.trim_offsets=this.config.trim_offsets??!1,this.use_regex=this.config.use_regex??!0,this.pattern=new RegExp("'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+","gu"),this.byte_encoder=jIt,this.text_encoder=new TextEncoder}pre_tokenize_text(d,g){return this.add_prefix_space&&!d.startsWith(" ")&&(d=" "+d),(this.use_regex?d.match(this.pattern)||[]:[d]).map(y=>Array.from(this.text_encoder.encode(y),b=>this.byte_encoder[b]).join(""))}},vHt=AHt,bHt=class extends qse{pre_tokenize_text(d,g){return d.match(/\w+|[^\w\s]+/g)||[]}},xHt=bHt,CHt=class extends qse{constructor(d){super(),this.replacement=d.replacement??"\u2581",this.str_rep=d.str_rep||this.replacement,this.prepend_scheme=d.prepend_scheme??"always"}pre_tokenize_text(d,g){let{section_index:y=void 0}=g??{},b=d.replaceAll(" ",this.str_rep);return!b.startsWith(this.replacement)&&(this.prepend_scheme==="always"||this.prepend_scheme==="first"&&y===0)&&(b=this.str_rep+b),[b]}},EHt=CHt,DHt=class extends qse{constructor(d){super(),this.config=d,this.pattern=Hft(this.config.pattern??{},this.config.invert??!0)}pre_tokenize_text(d){return this.pattern===null?[]:this.config.invert?d.match(this.pattern)||[]:this.config.behavior?.toLowerCase()==="removed"?d.split(this.pattern).filter(g=>g):Jqt(d,this.pattern)}},SHt=DHt,kHt=class extends qse{constructor(d){super(),this.config=d,this.pattern=new RegExp(`[^${AZe}]+|[${AZe}]+`,"gu")}pre_tokenize_text(d){return d.match(this.pattern)||[]}},THt=kHt,wHt=class extends qse{constructor(d){super(),this.config=d;let g=`[^\\d]+|\\d${this.config.individual_digits?"":"+"}`;this.pattern=new RegExp(g,"gu")}pre_tokenize_text(d){return d.match(this.pattern)||[]}},FHt=wHt,IHt=class extends qse{constructor(){super(),this.pattern=new RegExp(`[^\\s${AZe}]+|[${AZe}]`,"gu")}pre_tokenize_text(d,g){return d.trim().match(this.pattern)||[]}},NHt=IHt,PHt=class extends qse{constructor(d){super(),this.config=d,this.pattern=Hft(this.config.pattern??{}),this.content=this.config.content??""}pre_tokenize_text(d){return this.pattern===null?[d]:[d.replaceAll(this.pattern,this.config.content??"")]}},BHt=PHt,OHt=class extends qse{constructor(d){super(),this.tokenizers=(d.pretokenizers??[]).map(g=>JIt(g))}pre_tokenize_text(d,g){return this.tokenizers.reduce((y,b)=>b?b.pre_tokenize(y,g):y,[d])}},LHt=OHt,RHt=class extends qse{pre_tokenize_text(d){return $qt(d)}},MHt=RHt;function jHt(d){if(d===null)return null;switch(d.type){case"BertPreTokenizer":return new NHt;case"Sequence":return new LHt(d);case"Whitespace":return new xHt;case"WhitespaceSplit":return new MHt;case"Metaspace":return new EHt(d);case"ByteLevel":return new vHt(d);case"Split":return new SHt(d);case"Punctuation":return new THt(d);case"Digits":return new FHt(d);case"Replace":return new BHt(d);default:throw new Error(`Unknown PreTokenizer type: ${d.type}`)}}var JIt=jHt,QHt=class extends MZe{constructor(d){super(),this.config=d,this.vocab=[],this.tokens_to_ids=new Map,this.unk_token_id=void 0,this.unk_token=void 0,this.end_of_word_suffix=void 0,this.fuse_unk=this.config.fuse_unk??!1}_call(d){let g=this.encode(d);return this.fuse_unk&&(g=Rqt(g,this.tokens_to_ids,this.unk_token_id)),g}convert_tokens_to_ids(d){return d.map(g=>this.tokens_to_ids.get(g)??this.unk_token_id)}convert_ids_to_tokens(d){return d.map(g=>this.vocab[Number(g)]??this.unk_token)}},Wft=QHt,UHt=class extends Wft{constructor(d){super(d),this.max_input_chars_per_word=100,this.tokens_to_ids=SEt(d.vocab),this.unk_token_id=this.tokens_to_ids.get(d.unk_token),this.unk_token=d.unk_token,this.max_input_chars_per_word=d.max_input_chars_per_word??100,this.vocab=new Array(this.tokens_to_ids.size);for(let[g,y]of this.tokens_to_ids)this.vocab[y]=g}encode(d){let g=[];for(let y of d){let b=[...y];if(b.length>this.max_input_chars_per_word){g.push(this.unk_token);continue}let D=!1,S=0,E=[];for(;S<b.length;){let I=b.length,N=null;for(;S<I;){let L=b.slice(S,I).join("");if(S>0&&(L=this.config.continuing_subword_prefix+L),this.tokens_to_ids.has(L)){N=L;break}--I}if(N===null){D=!0;break}E.push(N),S=I}D?g.push(this.unk_token):g.push(...E)}return g}},Awt=UHt,vwt=class $It{constructor(g,y){this.is_leaf=g,this.children=y}static default(){return new $It(!1,new Map)}},JHt=class{constructor(){this.root=vwt.default()}extend(d){for(let g of d)this.push(g)}push(d){let g=this.root;for(let y of d){let b=g.children.get(y);b===void 0&&(b=vwt.default(),g.children.set(y,b)),g=b}g.is_leaf=!0}*common_prefix_search(d){let g=this.root;if(g===void 0)return;let y="";for(let b of d){if(y+=b,g=g.children.get(b),g===void 0)return;g.is_leaf&&(yield y)}}},$Ht=JHt,Uxt=class zIt{constructor(g,y,b,D,S){this.token_id=g,this.node_id=y,this.pos=b,this.length=D,this.score=S,this.prev=null,this.backtrace_score=0}clone(){let g=new zIt(this.token_id,this.node_id,this.pos,this.length,this.score);return g.prev=this.prev,g.backtrace_score=this.backtrace_score,g}},zHt=class{constructor(d,g,y){this.chars=Array.from(d),this.len=this.chars.length,this.bos_token_id=g,this.eos_token_id=y,this.nodes=[],this.begin_nodes=Array.from({length:this.len+1},()=>[]),this.end_nodes=Array.from({length:this.len+1},()=>[]);let b=new Uxt(this.bos_token_id??0,0,0,0,0),D=new Uxt(this.eos_token_id??0,1,this.len,0,0);this.nodes.push(b.clone()),this.nodes.push(D.clone()),this.begin_nodes[this.len].push(D),this.end_nodes[0].push(b)}insert(d,g,y,b){let D=this.nodes.length,S=new Uxt(b,D,d,g,y);this.begin_nodes[d].push(S),this.end_nodes[d+g].push(S),this.nodes.push(S)}viterbi(){let d=this.len,g=0;for(;g<=d;){if(this.begin_nodes[g].length==0)return[];for(let S of this.begin_nodes[g]){S.prev=null;let E=0,I=null;for(let N of this.end_nodes[g]){let L=N.backtrace_score+S.score;(I===null||L>E)&&(I=N.clone(),E=L)}if(I!==null)S.prev=I,S.backtrace_score=E;else return[]}++g}let y=[],b=this.begin_nodes[d][0].prev;if(b===null)return[];let D=b.clone();for(;D.prev!==null;)y.push(D.clone()),D=D.clone().prev.clone();return y.reverse(),y}piece(d){return this.chars.slice(d.pos,d.pos+d.length).join("")}tokens(){return this.viterbi().map(d=>this.piece(d))}token_ids(){return this.viterbi().map(d=>d.token_id)}},qHt=zHt;function HHt(d){if(d.length===0)throw new Error("Array must not be empty");let g=d[0],y=0;for(let b=1;b<d.length;++b)d[b]<g&&(g=d[b],y=b);return[g,y]}var GHt=class extends Wft{constructor(d,g){super(d);let y=d.vocab.length;this.vocab=new Array(y),this.scores=new Array(y);for(let b=0;b<y;++b)[this.vocab[b],this.scores[b]]=d.vocab[b];this.unk_token_id=d.unk_id,this.unk_token=this.vocab[d.unk_id],this.tokens_to_ids=new Map(this.vocab.map((b,D)=>[b,D])),this.bos_token=" ",this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=g,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.min_score=HHt(this.scores)[0],this.unk_score=this.min_score-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new $Ht,this.trie.extend(this.vocab),this.fuse_unk=!0}populate_nodes(d){let g=d.chars,y=1,b=0;for(;b<g.length;){let D=!1,S=[],E=g.slice(b).join(""),I=this.trie.common_prefix_search(E);for(let N of I){S.push(N);let L=this.tokens_to_ids.get(N),R=this.scores[L],j=Qqt(N);d.insert(b,j,R,L),!D&&j===y&&(D=!0)}D||d.insert(b,y,this.unk_score,this.unk_token_id),b+=y}}tokenize(d){let g=new qHt(d,this.bos_token_id,this.eos_token_id);return this.populate_nodes(g),g.tokens()}encode(d){let g=[];for(let y of d){let b=this.tokenize(y);g.push(...b)}return g}},bwt=GHt,WHt=class{constructor(d=(y,b)=>y>b,g=1/0){this._heap=[],this._comparator=d,this._max_size=g}get size(){return this._heap.length}is_empty(){return this.size===0}peek(){return this._heap[0]}push(...d){return this.extend(d)}extend(d){for(let g of d)if(this.size<this._max_size)this._heap.push(g),this._sift_up();else{let y=this._smallest();this._comparator(g,this._heap[y])&&(this._heap[y]=g,this._sift_up_from(y))}return this.size}pop(){let d=this.peek(),g=this.size-1;return g>0&&this._swap(0,g),this._heap.pop(),this._sift_down(),d}replace(d){let g=this.peek();return this._heap[0]=d,this._sift_down(),g}_parent(d){return(d+1>>>1)-1}_left(d){return(d<<1)+1}_right(d){return d+1<<1}_greater(d,g){return this._comparator(this._heap[d],this._heap[g])}_swap(d,g){let y=this._heap[d];this._heap[d]=this._heap[g],this._heap[g]=y}_sift_up(){this._sift_up_from(this.size-1)}_sift_up_from(d){for(;d>0&&this._greater(d,this._parent(d));)this._swap(d,this._parent(d)),d=this._parent(d)}_sift_down(){let d=0;for(;this._left(d)<this.size&&this._greater(this._left(d),d)||this._right(d)<this.size&&this._greater(this._right(d),d);){let g=this._right(d)<this.size&&this._greater(this._right(d),this._left(d))?this._right(d):this._left(d);this._swap(d,g),d=g}}_smallest(){return 2**Math.floor(Math.log2(this.size))-1}},VHt=WHt,KHt=class{constructor(d){this.capacity=d,this.cache=new Map}get(d){if(!this.cache.has(d))return;let g=this.cache.get(d);return this.cache.delete(d),this.cache.set(d,g),g}put(d,g){this.cache.has(d)&&this.cache.delete(d),this.cache.set(d,g),this.cache.size>this.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}},YHt=KHt,ZHt=class extends Wft{constructor(d){super(d),this.tokens_to_ids=SEt(d.vocab),this.unk_token_id=this.tokens_to_ids.get(d.unk_token),this.unk_token=d.unk_token,this.vocab=new Array(this.tokens_to_ids.size);for(let[y,b]of this.tokens_to_ids)this.vocab[b]=y;let g=Array.isArray(d.merges[0]);this.merges=g?d.merges:d.merges.map(y=>y.split(" ",2)),this.bpe_ranks=new Map(this.merges.map((y,b)=>[JSON.stringify(y),b])),this.end_of_word_suffix=d.end_of_word_suffix,this.continuing_subword_suffix=d.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new YHt(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(d){if(d.length===0)return[];let g=this.cache.get(d);if(g!==void 0)return g;let y=Array.from(d);this.end_of_word_suffix&&(y[y.length-1]+=this.end_of_word_suffix);let b=[];if(y.length>1){let D=new VHt((I,N)=>I.score<N.score),S={token:y[0],bias:0,prev:null,next:null},E=S;for(let I=1;I<y.length;++I){let N={bias:I/y.length,token:y[I],prev:E,next:null};E.next=N,this.add_node(D,E),E=N}for(;!D.is_empty();){let I=D.pop();if(I.deleted||!I.next||I.next.deleted)continue;if(I.deleted=!0,I.next.deleted=!0,I.prev){let L={...I.prev};I.prev.deleted=!0,I.prev=L,L.prev?L.prev.next=L:S=L}let N={token:I.token+I.next.token,bias:I.bias,prev:I.prev,next:I.next.next};N.prev?(N.prev.next=N,this.add_node(D,N.prev)):S=N,N.next&&(N.next.prev=N,this.add_node(D,N))}for(let I=S;I!==null;I=I.next)b.push(I.token)}else b=y;if(this.continuing_subword_suffix)for(let D=0;D<b.length-1;++D)b[D]+=this.continuing_subword_suffix;return d.length<this.max_length_to_cache&&this.cache.put(d,b),b}add_node(d,g){let y=this.bpe_ranks.get(JSON.stringify([g.token,g.next.token]));y!==void 0&&(g.score=y+g.bias,d.push(g))}encode(d){let g=[];for(let y of d){if(this.ignore_merges&&this.tokens_to_ids.has(y)){g.push(y);continue}let b=this.bpe(y);for(let D of b)if(this.tokens_to_ids.has(D))g.push(D);else if(this.byte_fallback){let S=Array.from(this.text_encoder.encode(D)).map(E=>`<0x${E.toString(16).toUpperCase().padStart(2,"0")}>`);S.every(E=>this.tokens_to_ids.has(E))?g.push(...S):g.push(this.unk_token)}else g.push(this.unk_token)}return g}},xwt=ZHt,XHt=class extends Wft{constructor(d,g){super(d);let y=d.vocab;this.tokens_to_ids=SEt(g.target_lang?y[g.target_lang]:y),this.bos_token=g.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=g.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=g.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=g.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=new Array(this.tokens_to_ids.size);for(let[b,D]of this.tokens_to_ids)this.vocab[D]=b}encode(d){return d}},eGt=XHt;function tGt(d,g){switch(d.type){case"WordPiece":return new Awt(d);case"Unigram":return new bwt(d,g.eos_token);case"BPE":return new xwt(d);default:if(d.vocab)return Array.isArray(d.vocab)?new bwt(d,g.eos_token):Object.hasOwn(d,"continuing_subword_prefix")&&Object.hasOwn(d,"unk_token")?Object.hasOwn(d,"merges")?new xwt(d):new Awt(d):new eGt(d,{target_lang:g.target_lang,bos_token:g.bos_token,eos_token:g.eos_token,pad_token:g.pad_token,unk_token:g.unk_token});throw new Error(`Unknown TokenizerModel type: ${d?.type}`)}}var rGt=tGt,nGt=class extends MZe{constructor(d){super(),this.config=d}_call(d,...g){return this.post_process(d,...g)}},jZe=nGt,iGt=class extends jZe{post_process(d,g=null,y=!0){let b=g===null?this.config.single:this.config.pair,D=[],S=[];for(let E of b)"SpecialToken"in E?y&&(D.push(E.SpecialToken.id),S.push(E.SpecialToken.type_id)):"Sequence"in E&&(E.Sequence.id==="A"?(D=bY(D,d),S=bY(S,new Array(d.length).fill(E.Sequence.type_id))):E.Sequence.id==="B"&&(D=bY(D,g),S=bY(S,new Array(g.length).fill(E.Sequence.type_id))));return{tokens:D,token_type_ids:S}}},aGt=iGt,oGt=class extends jZe{post_process(d,g=null){return{tokens:g?bY(d,g):d}}},sGt=oGt,lGt=class extends jZe{constructor(d){super(d),this.sep=d.sep,this.cls=d.cls}post_process(d,g=null,y=!0){y&&(d=bY([this.cls[0]],d,[this.sep[0]]));let b=new Array(d.length).fill(0);if(g){let D=[],S=y?[this.sep[0]]:[];d=bY(d,D,g,S),b=bY(b,new Array(g.length+D.length+S.length).fill(1))}return{tokens:d,token_type_ids:b}}},cGt=lGt,uGt=class extends jZe{constructor(d){super(d),this.sep=d.sep,this.cls=d.cls}post_process(d,g,y=!0){y&&(d=bY([this.cls[0]],d,[this.sep[0]]));let b=new Array(d.length).fill(0);if(g){let D=y?[this.sep[0]]:[],S=y?[this.sep[0]]:[];d=bY(d,D,g,S),b=bY(b,new Array(g.length+D.length+S.length).fill(1))}return{tokens:d,token_type_ids:b}}},_Gt=uGt,dGt=class extends jZe{constructor(d){super(d),this.processors=(d.processors??[]).map(g=>qIt(g))}post_process(d,g=null,y=!0){let b={tokens:d};for(let D of this.processors)b=D.post_process(b.tokens,g,y);return b}},pGt=dGt;function fGt(d){if(d===null)return null;switch(d.type){case"TemplateProcessing":return new aGt(d);case"ByteLevel":return new sGt(d);case"BertProcessing":return new cGt(d);case"RobertaProcessing":return new _Gt(d);case"Sequence":return new pGt(d);default:throw new Error(`Unknown PostProcessor type: ${d.type}`)}}var qIt=fGt,mGt=class extends MZe{constructor(d){super(),this.config=d,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets="trim_offsets"in d?d.trim_offsets:!1}_call(d){return this.decode(d)}decode(d){return this.decode_chain(d).join("")}},Hse=mGt,hGt=class extends Hse{constructor(d){super(d),this.byte_decoder=Bqt,this.text_decoder=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(d){let g=d.join(""),y=new Uint8Array([...g].map(b=>this.byte_decoder[b]));return this.text_decoder.decode(y)}decode_chain(d){let g=[],y=[];for(let b of d)this.added_tokens.find(D=>D.content===b)!==void 0?(y.length>0&&(g.push(this.convert_tokens_to_string(y)),y=[]),g.push(b)):y.push(b);return y.length>0&&g.push(this.convert_tokens_to_string(y)),g}},gGt=hGt,yGt=class extends Hse{constructor(d){super(d),this.cleanup=d.cleanup}decode_chain(d){return d.map((g,y)=>{if(y!==0){let b=this.config.prefix;b&&g.startsWith(b)?g=g.replace(b,""):g=" "+g}return this.cleanup&&(g=DEt(g)),g})}},AGt=yGt,vGt=class extends Hse{constructor(d){super(d),this.replacement=d.replacement??"\u2581"}decode_chain(d){let g=[];for(let y=0;y<d.length;++y){let b=d[y].replaceAll(this.replacement," ");y==0&&b.startsWith(" ")&&(b=b.substring(1)),g.push(b)}return g}},bGt=vGt,xGt=class extends Hse{constructor(d){super(d),this.suffix=d.suffix??""}decode_chain(d){return d.map((g,y)=>g.replaceAll(this.suffix,y===d.length-1?"":" "))}},CGt=xGt,EGt=class extends Hse{constructor(d){super(d),this.pad_token=d.pad_token??"",this.word_delimiter_token=d.word_delimiter_token??"",this.cleanup=d.cleanup}convert_tokens_to_string(d){if(d.length===0)return"";let g=[d[0]];for(let b=1;b<d.length;++b)d[b]!==g.at(-1)&&g.push(d[b]);let y=g.filter(b=>b!==this.pad_token).join("");return this.cleanup&&(y=DEt(y).replaceAll(this.word_delimiter_token," ").trim()),y}decode_chain(d){return[this.convert_tokens_to_string(d)]}},DGt=EGt,SGt=class extends Hse{constructor(d){super(d),this.decoders=(d.decoders??[]).map(g=>HIt(g))}decode_chain(d){return this.decoders.reduce((g,y)=>y.decode_chain(g),d)}},kGt=SGt,TGt=class extends Hse{decode_chain(d){let g=Hft(this.config.pattern),y=this.config.content??"";return g===null?d:d.map(b=>b.replaceAll(g,y))}},wGt=TGt,FGt=class extends Hse{decode_chain(d){return[d.join("")]}},IGt=FGt,NGt=class extends Hse{constructor(d){super(d),this.content=d.content??"",this.start=d.start??0,this.stop=d.stop??0}decode_chain(d){return d.map(g=>{let y=0;for(let D=0;D<this.start&&g[D]===this.content;++D)y=D+1;let b=g.length;for(let D=0;D<this.stop;++D){let S=g.length-D-1;if(g[S]===this.content){b=S;continue}else break}return g.slice(y,b)})}},PGt=NGt,BGt=class extends Hse{constructor(d){super(d),this.text_decoder=new TextDecoder}decode_chain(d){let g=[],y=[];for(let b of d){let D=null;if(b.length===6&&b.startsWith("<0x")&&b.endsWith(">")){let S=parseInt(b.slice(3,5),16);isNaN(S)||(D=S)}if(D!==null)y.push(D);else{if(y.length>0){let S=this.text_decoder.decode(Uint8Array.from(y));g.push(S),y=[]}g.push(b)}}if(y.length>0){let b=this.text_decoder.decode(Uint8Array.from(y));g.push(b),y=[]}return g}},OGt=BGt;function LGt(d){if(d===null)return null;switch(d.type){case"ByteLevel":return new gGt(d);case"WordPiece":return new AGt(d);case"Metaspace":return new bGt(d);case"BPEDecoder":return new CGt(d);case"CTC":return new DGt(d);case"Sequence":return new kGt(d);case"Replace":return new wGt(d);case"Fuse":return new IGt(d);case"Strip":return new PGt(d);case"ByteFallback":return new OGt(d);default:throw new Error(`Unknown Decoder type: ${d.type}`)}}var HIt=LGt,RGt=class{constructor(d,g){let y=ywt(d,"Tokenizer",["model","decoder","post_processor","pre_tokenizer","normalizer"]);if(y)throw new Error(y);let b=ywt(g,"Config");if(b)throw new Error(b);this.tokenizer=d,this.config=g,this.normalizer=UIt(this.tokenizer.normalizer),this.pre_tokenizer=JIt(this.tokenizer.pre_tokenizer),this.model=rGt(this.tokenizer.model,this.config),this.post_processor=qIt(this.tokenizer.post_processor),this.decoder=HIt(this.tokenizer.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[],this.tokenizer.added_tokens.forEach(D=>{let S=new Nqt(D);this.added_tokens.push(S),this.model.tokens_to_ids.set(S.content,S.id),this.model.vocab[S.id]=S.content,S.special&&(this.special_tokens.push(S.content),this.all_special_ids.push(S.id))}),(this.config.additional_special_tokens??[]).forEach(D=>{this.special_tokens.includes(D)||this.special_tokens.push(D)}),this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.added_tokens_splitter=new Fqt(this.added_tokens.map(D=>D.content)),this.added_tokens_map=new Map(this.added_tokens.map(D=>[D.content,D])),this.remove_space=this.config.remove_space,this.clean_up_tokenization_spaces=this.config.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=this.config.do_lowercase_and_remove_accent??!1}encode(d,{text_pair:g=null,add_special_tokens:y=!0,return_token_type_ids:b=null}={}){let{tokens:D,token_type_ids:S}=this.tokenize_helper(d,{text_pair:g,add_special_tokens:y}),E=this.model.convert_tokens_to_ids(D),I={ids:E,tokens:D,attention_mask:new Array(E.length).fill(1)};return b&&S&&(I.token_type_ids=S),I}decode(d,g={}){if(!Array.isArray(d)||d.length===0||!jqt(d[0]))throw Error("token_ids must be a non-empty array of integers.");let y=this.model.convert_ids_to_tokens(d);g.skip_special_tokens&&(y=y.filter(D=>!this.special_tokens.includes(D)));let b=this.decoder?this.decoder(y):y.join(" ");return this.decoder&&this.decoder.end_of_word_suffix&&(b=b.replaceAll(this.decoder.end_of_word_suffix," "),g.skip_special_tokens&&(b=b.trim())),(g.clean_up_tokenization_spaces??this.clean_up_tokenization_spaces)&&(b=DEt(b)),b}tokenize(d,{text_pair:g=null,add_special_tokens:y=!1}={}){return this.tokenize_helper(d,{text_pair:g,add_special_tokens:y}).tokens}encode_text(d){if(d===null)return null;let g=this.added_tokens_splitter.split(d);return g.forEach((y,b)=>{let D=this.added_tokens_map.get(y);D&&(D.lstrip&&b>0&&(g[b-1]=g[b-1].trimEnd()),D.rstrip&&b<g.length-1&&(g[b+1]=g[b+1].trimStart()))}),g.flatMap((y,b)=>{if(y.length===0)return[];if(this.added_tokens_map.has(y))return[y];if(this.remove_space===!0&&(y=y.trim().split(/\s+/).join(" ")),this.do_lowercase_and_remove_accent&&(y=Uqt(y)),this.normalizer!==null&&(y=this.normalizer(y)),y.length===0)return[];let D=this.pre_tokenizer!==null?this.pre_tokenizer(y,{section_index:b}):[y];return this.model(D)})}tokenize_helper(d,{text_pair:g=null,add_special_tokens:y=!0}){let b=this.encode_text(d),D=this.encode_text(g||null);return this.post_processor?this.post_processor(b,D,y):{tokens:bY(b??[],D??[])}}token_to_id(d){return this.model.tokens_to_ids.get(d)}id_to_token(d){return this.model.vocab[d]}get_added_tokens_decoder(){let d=new Map;for(let g of this.added_tokens)d.set(g.id,g);return d}},MGt=RGt,jGt=class{type="huggingface";name;modelId;logger;options;tokenizer=null;cacheDir;safeModelName;constructor(d,g,y={}){this.modelId=d,this.logger=g,this.options=y,this.cacheDir=y.cacheDir||(0,Upt.join)((0,HJt.homedir)(),".claude-code-router",".huggingface"),this.safeModelName=d.replace(/\//g,"_").replace(/[^a-zA-Z0-9_-]/g,"_"),this.name=`huggingface-${d.split("/").pop()}`}getCachePaths(){let d=(0,Upt.join)(this.cacheDir,this.safeModelName);return{modelDir:d,tokenizerJson:(0,Upt.join)(d,"tokenizer.json"),tokenizerConfig:(0,Upt.join)(d,"tokenizer_config.json")}}ensureDir(d){(0,Jpt.existsSync)(d)||(0,Jpt.mkdirSync)(d,{recursive:!0})}async loadFromCache(){try{let d=this.getCachePaths();if(!(0,Jpt.existsSync)(d.tokenizerJson)||!(0,Jpt.existsSync)(d.tokenizerConfig))return null;let[g,y]=await Promise.all([$pt.promises.readFile(d.tokenizerJson,"utf-8"),$pt.promises.readFile(d.tokenizerConfig,"utf-8")]);return{tokenizerJson:JSON.parse(g),tokenizerConfig:JSON.parse(y)}}catch(d){return this.logger?.warn(`Failed to load from cache: ${d.message}`),null}}async downloadAndCache(){let d=this.getCachePaths(),g={json:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer.json`,config:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer_config.json`};this.logger?.info(`Downloading tokenizer files for ${this.modelId}`);let y=new AbortController,b=setTimeout(()=>y.abort(),this.options.timeout||3e4);try{let[D,S]=await Promise.all([fetch(g.json,{signal:y.signal}),fetch(g.config,{signal:y.signal})]);if(!D.ok)throw new Error(`Failed to fetch tokenizer.json: ${D.statusText}`);let[E,I]=await Promise.all([D.json(),S.ok?S.json():Promise.resolve({})]);return this.ensureDir(d.modelDir),await Promise.all([$pt.promises.writeFile(d.tokenizerJson,JSON.stringify(E,null,2)),$pt.promises.writeFile(d.tokenizerConfig,JSON.stringify(I,null,2))]),{tokenizerJson:E,tokenizerConfig:I}}finally{clearTimeout(b)}}async initialize(){try{this.logger?.info(`Initializing HuggingFace tokenizer: ${this.modelId}`);let d=this.getCachePaths();this.ensureDir(this.cacheDir);let g=await this.loadFromCache()||await this.downloadAndCache();this.tokenizer=new MGt(g.tokenizerJson,g.tokenizerConfig),this.logger?.info(`Tokenizer initialized: ${this.name}`)}catch(d){throw this.logger?.error(`Failed to initialize tokenizer: ${d.message}`),new Error(`Failed to initialize HuggingFace tokenizer for ${this.modelId}: ${d.message}`)}}async countTokens(d){if(!this.tokenizer)throw new Error("Tokenizer not initialized");try{let g=this.extractTextFromRequest(d);return this.tokenizer.encode(g).ids.length}catch(g){throw this.logger?.error(`Error counting tokens: ${g.message}`),g}}isInitialized(){return this.tokenizer!==null}encodeText(d){if(!this.tokenizer)throw new Error("Tokenizer not initialized");return this.tokenizer.encode(d).ids}dispose(){this.tokenizer=null}extractTextFromRequest(d){let g=[],{messages:y,system:b,tools:D}=d;if(Array.isArray(y)){for(let S of y)if(typeof S.content=="string")g.push(S.content);else if(Array.isArray(S.content))for(let E of S.content)E.type==="text"&&E.text?g.push(E.text):E.type==="tool_use"&&E.input?g.push(JSON.stringify(E.input)):E.type==="tool_result"&&g.push(typeof E.content=="string"?E.content:JSON.stringify(E.content))}if(typeof b=="string")g.push(b);else if(Array.isArray(b)){for(let S of b)if(S.type==="text"){if(typeof S.text=="string")g.push(S.text);else if(Array.isArray(S.text))for(let E of S.text)E&&g.push(E)}}if(D)for(let S of D)S.name&&g.push(S.name),S.description&&g.push(S.description),S.input_schema&&g.push(JSON.stringify(S.input_schema));return g.join(" ")}},QGt=class{type="api";name;config;logger;options;constructor(d,g,y={}){if(!d.url||!d.apiKey)throw new Error("API tokenizer requires url and apiKey");this.config={url:d.url,apiKey:d.apiKey,requestFormat:d.requestFormat||"standard",responseField:d.responseField||"token_count",headers:d.headers||{}},this.logger=g,this.options=y;try{let b=new URL(d.url);this.name=`api-${b.hostname}`}catch{this.name=`api-${d.url}`}}async initialize(){try{new URL(this.config.url)}catch{throw new Error(`Invalid API URL: ${this.config.url}`)}}async countTokens(d){try{let g=this.formatRequestBody(d),y={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},b=new AbortController,D=setTimeout(()=>b.abort(),this.options.timeout||3e4),S=await fetch(this.config.url,{method:"POST",headers:y,body:JSON.stringify(g),signal:b.signal});if(clearTimeout(D),!S.ok)throw new Error(`API tokenizer request failed: ${S.status} ${S.statusText}`);let E=await S.json();return this.extractTokenCount(E)}catch(g){throw g.name==="AbortError"?new Error("API tokenizer request timed out"):g}}isInitialized(){return!0}dispose(){}formatRequestBody(d){switch(this.config.requestFormat){case"standard":return d;case"openai":return{model:"gpt-3.5-turbo",messages:this.extractMessagesAsOpenAIFormat(d)};case"anthropic":return{messages:d.messages||[],system:d.system,tools:d.tools};case"custom":return{text:this.extractConcatenatedText(d)};default:return d}}extractMessagesAsOpenAIFormat(d){return d.messages?d.messages.map(g=>({role:g.role,content:this.extractTextFromMessage(g)})):[]}extractTextFromMessage(d){return typeof d.content=="string"?d.content:Array.isArray(d.content)?d.content.map(g=>g.type==="text"&&g.text?g.text:g.type==="tool_use"&&g.input?JSON.stringify(g.input):g.type==="tool_result"?typeof g.content=="string"?g.content:JSON.stringify(g.content):"").join(" "):""}extractConcatenatedText(d){let g=[];return d.messages&&d.messages.forEach(y=>{g.push(this.extractTextFromMessage(y))}),typeof d.system=="string"?g.push(d.system):Array.isArray(d.system)&&d.system.forEach(y=>{y.type==="text"&&(typeof y.text=="string"?g.push(y.text):Array.isArray(y.text)&&y.text.forEach(b=>{b&&g.push(b)}))}),d.tools&&d.tools.forEach(y=>{y.name&&g.push(y.name),y.description&&g.push(y.description),y.input_schema&&g.push(JSON.stringify(y.input_schema))}),g.join(" ")}extractTokenCount(d){try{let g=this.config.responseField,y=g.split("."),b=d;for(let D of y){if(b==null)throw new Error(`Field path '${g}' not found in response`);b=b[D]}if(typeof b!="number")throw new Error(`Expected number at field path '${g}', got ${typeof b}`);return b}catch(g){throw this.logger?.error(`Failed to extract token count from API response: ${g.message}. Response: ${JSON.stringify(d)}`),new Error(`Invalid response from API tokenizer: ${g.message}`)}}},Cwt=class{tokenizers=new Map;configService;logger;options;fallbackTokenizer;constructor(d,g,y={}){this.configService=d,this.logger=g,this.options={timeout:y.timeout??3e4,...y}}async initialize(){try{this.fallbackTokenizer=new hwt("cl100k_base"),await this.fallbackTokenizer.initialize(),this.tokenizers.set("fallback",this.fallbackTokenizer),this.logger?.info("TokenizerService initialized successfully")}catch(d){throw this.logger?.error(`TokenizerService initialization error: ${d.message}`),d}}async getTokenizer(d){let g=this.getCacheKey(d);if(this.tokenizers.has(g))return this.tokenizers.get(g);let y;try{switch(d.type){case"tiktoken":y=new hwt(d.encoding||"cl100k_base");break;case"huggingface":this.logger?.info(`Initializing HuggingFace tokenizer for model: ${d.model}`),y=new jGt(d.model,this.logger,{timeout:this.options.timeout});break;case"api":y=new QGt(d,this.logger,{timeout:this.options.timeout});break;default:throw new Error(`Unknown tokenizer type: ${d.type}`)}return this.logger?.info(`Calling initialize() on ${d.type} tokenizer...`),await y.initialize(),this.tokenizers.set(g,y),this.logger?.info(`Tokenizer initialized successfully: ${d.type} (${g})`),y}catch(b){return this.logger?.error(`Failed to initialize ${d.type} tokenizer: ${b.message}`),this.logger?.error(`Error stack: ${b.stack}`),this.fallbackTokenizer||await this.initialize(),this.fallbackTokenizer}}async countTokens(d,g){let y=g?await this.getTokenizer(g):this.fallbackTokenizer;return{tokenCount:await y.countTokens(d),tokenizerUsed:y.name,cached:!1}}getTokenizerConfigForModel(d,g){let y=(this.configService.get("providers")||[]).find(b=>b.name===d);if(y?.tokenizer)return y.tokenizer.models?.[g]?y.tokenizer.models[g]:y.tokenizer.default}dispose(){this.tokenizers.forEach(d=>{try{d.dispose()}catch(g){this.logger?.error(`Error disposing tokenizer: ${g}`)}}),this.tokenizers.clear()}getCacheKey(d){switch(d.type){case"tiktoken":return`tiktoken:${d.encoding||"cl100k_base"}`;case"huggingface":return`hf:${d.model}`;case"api":return`api:${d.url}`;default:return`unknown:${JSON.stringify(d)}`}}},UGt=class{capacity;cache;constructor(d){this.capacity=d,this.cache=new Map}get(d){if(!this.cache.has(d))return;let g=this.cache.get(d);return this.cache.delete(d),this.cache.set(d,g),g}put(d,g){if(this.cache.has(d))this.cache.delete(d);else if(this.cache.size>=this.capacity){let y=this.cache.keys().next().value;y!==void 0&&this.cache.delete(y)}this.cache.set(d,g)}values(){return Array.from(this.cache.values())}},pZe=new UGt(100),Ife=(0,GJt.get_encoding)("cl100k_base"),GIt=(d,g,y)=>{let b=0;return Array.isArray(d)&&d.forEach(D=>{typeof D.content=="string"?b+=Ife.encode(D.content).length:Array.isArray(D.content)&&D.content.forEach(S=>{S.type==="text"?b+=Ife.encode(S.text).length:S.type==="tool_use"?b+=Ife.encode(JSON.stringify(S.input)).length:S.type==="tool_result"&&(b+=Ife.encode(typeof S.content=="string"?S.content:JSON.stringify(S.content)).length)})}),typeof g=="string"?b+=Ife.encode(g).length:Array.isArray(g)&&g.forEach(D=>{D.type==="text"&&(typeof D.text=="string"?b+=Ife.encode(D.text).length:Array.isArray(D.text)&&D.text.forEach(S=>{b+=Ife.encode(S||"").length}))}),y&&y.forEach(D=>{D.description&&(b+=Ife.encode(D.name+D.description).length),D.input_schema&&(b+=Ife.encode(JSON.stringify(D.input_schema)).length)}),b},WIt=async(d,g)=>{if(d.sessionId){let y=await GGt(d.sessionId);if(y){let b=(0,dCt.join)(_ft.HOME_DIR,y,"config.json"),D=(0,dCt.join)(_ft.HOME_DIR,y,`${d.sessionId}.json`);try{let S=JSON.parse(await(0,_Ct.readFile)(D,"utf8"));if(S&&S.Router)return S.Router}catch{}try{let S=JSON.parse(await(0,_Ct.readFile)(b,"utf8"));if(S&&S.Router)return S.Router}catch{}}}};function pft(d){let g=d||"";return g.includes(",")&&(g=g.split(",").pop()||g),g.includes("/")&&(g=g.split("/").pop()||g),g.includes(":")&&(g=g.split(":")[0]),g.trim().toLowerCase()}function VIt(d){let g=pft(d),y=g.match(/claude-(?:\d+-\d+-|\d+-)?(sonnet|opus|haiku)(?:-|$)/i)||g.match(/claude-(sonnet|opus|haiku)(?:-|$)/i);return y?y[1].toLowerCase():null}function JGt(d,g){if(!g||!d)return null;let y=pft(d);if(g[d])return g[d];if(g[y])return g[y];let b=VIt(d);if(b&&g[b])return g[b];for(let[D,S]of Object.entries(g)){let E=pft(D);if(E&&y.includes(E))return S}return null}function q2e(d,g,y){if(!d?.includes(","))return d;let[b,...D]=d.split(","),S=b.trim(),E=D.join(",").trim();if(!y&&!FIt().isAvailable(S,E))return null;let I=g.find(L=>L.name.toLowerCase()===S.toLowerCase()),N=I?.models?.find(L=>String(L).toLowerCase()===E.toLowerCase());return I&&N?`${I.name},${N}`:d}function $Gt(d){return d.body.messages?.some(g=>g.role==="user"&&Array.isArray(g.content)&&g.content.some(y=>y.type==="image"||y.type==="image_url"||Array.isArray(y?.content)&&y.content.some(b=>b.type==="image"||b.type==="image_url")))}function zGt(d){let g=pft(d);return[/claude/i,/gemini/i,/gpt-4o/i,/gpt-4\.1/i,/gpt-4-vision/i,/qwen.*vl/i,/glm-4v/i,/grok.*vision/i,/pixtral/i,/llava/i].some(y=>y.test(g))}function qGt(d,g,y,b,D){let S=y.longContextThreshold||6e4;if(g>2e5&&y.extendedContext){let N=q2e(y.extendedContext,b);if(N)return d.log.info(`Family: using extended context model (1M+), tokens: ${g}`),{model:N,scenarioType:"extendedContext"};d.log.warn("Family: extendedContext model unavailable (fail pool), skipping")}let E=D&&D.input_tokens>S&&g>2e4,I=g>S;if((E||I)&&y.longContext){let N=q2e(y.longContext,b);if(N)return d.log.info(`Family: using long context model, tokens: ${g}`),{model:N,scenarioType:"longContext"};d.log.warn("Family: longContext model unavailable (fail pool), skipping")}if(Array.isArray(d.body.tools)&&d.body.tools.some(N=>N.type?.startsWith("web_search"))&&y.webSearch){let N=q2e(y.webSearch,b);if(N)return{model:N,scenarioType:"webSearch"};d.log.warn("Family: webSearch model unavailable (fail pool), skipping")}if(d.body.thinking&&y.think){let N=q2e(y.think,b);if(N)return{model:N,scenarioType:"think"};d.log.warn("Family: think model unavailable (fail pool), skipping")}if(y.default){let N=q2e(y.default,b);if(N)return{model:N,scenarioType:"default"};d.log.warn("Family: default model unavailable (fail pool), skipping")}return null}var HGt=async(d,g,y,b)=>{let D=await WIt(d,y),S=y.get("providers")||[],E=D||y.get("Router");if(d.body.model.includes(",")){let O=q2e(d.body.model,S);if(O)return{model:O,scenarioType:"default"};d.log.warn(`Explicit model ${d.body.model} unavailable (fail pool), trying alternatives`)}let I=VIt(d.body.model),N=E?.families?.[I||""];if(N){d.log.info(`Using model family routing for: ${I}`),d.modelFamily=I,d.familyFallback=N.fallback;let O=qGt(d,g,N,S,b);if(O)return O}let L=JGt(d.body.model,E?.models);if(L){let O=q2e(L,S);if(O)return d.log.info(`Using mapped model for ${d.body.model}: ${L}`),{model:O,scenarioType:"modelMapping"};d.log.warn(`Mapped model ${L} unavailable (fail pool), skipping`)}let R=E?.extendedContextThreshold||2e5;if(g>R&&E?.extendedContext)return d.log.info(`Using extended context (1M) model due to token count: ${g}, threshold: ${R}`),{model:E.extendedContext,scenarioType:"extendedContext"};let j=E?.longContextThreshold||6e4,Q=b&&b.input_tokens>j&&g>2e4,M=g>j;if((Q||M)&&E?.longContext)return d.log.info(`Using long context model due to token count: ${g}, threshold: ${j}`),{model:E.longContext,scenarioType:"longContext"};if(d.body?.system?.length>1&&d.body?.system[1]?.text?.startsWith("<CCR-SUBAGENT-MODEL>")){let O=d.body?.system[1].text.match(/<CCR-SUBAGENT-MODEL>(.*?)<\/CCR-SUBAGENT-MODEL>/s);if(O)return d.body.system[1].text=d.body.system[1].text.replace(`<CCR-SUBAGENT-MODEL>${O[1]}</CCR-SUBAGENT-MODEL>`,""),{model:O[1],scenarioType:"default"}}let U=y.get("Router");return d.body.model?.includes("claude")&&d.body.model?.includes("haiku")&&U?.background?(d.log.info(`Using background model for ${d.body.model}`),{model:U.background,scenarioType:"background"}):Array.isArray(d.body.tools)&&d.body.tools.some(O=>O.type?.startsWith("web_search"))&&E?.webSearch?{model:E.webSearch,scenarioType:"webSearch"}:d.body.thinking&&E?.think?(d.log.info(`Using think model for ${d.body.thinking}`),{model:E.think,scenarioType:"think"}):{model:E?.default,scenarioType:"default"}},Ewt=async(d,g,y)=>{let{configService:b,event:D}=y;if(d.body.metadata?.user_id){let Q=d.body.metadata.user_id.split("_session_");Q.length>1&&(d.sessionId=Q[1])}let S=await WIt(d,b)||b.get("Router"),E=b.get("providers")||[],I=pZe.get(d.sessionId),{messages:N,system:L=[],tools:R}=d.body,j=b.get("REWRITE_SYSTEM_PROMPT");if(j&&L.length>1&&L[1]?.text?.includes("<env>")){let Q=await(0,_Ct.readFile)(j,"utf-8");L[1].text=`${Q}<env>${L[1].text.split("<env>").pop()}`}try{let[Q,M]=d.body.model.split(","),U=y.tokenizerService?.getTokenizerConfigForModel(Q,M),O;y.tokenizerService?O=(await y.tokenizerService.countTokens({messages:N,system:L,tools:R},U)).tokenCount:O=GIt(N,L,R),d.tokenCount=O;let q,J=b.get("CUSTOM_ROUTER_PATH");if(J)try{q=await wh(J)(d,b.getAll(),{event:D})}catch(H){d.log.error(`failed to load custom router: ${H.message}`)}if(q)d.scenarioType="default";else{let H=await HGt(d,O,b,I);q=H.model,d.scenarioType=H.scenarioType}if(S?.image&&q!==S.image&&$Gt(d)&&!zGt(q)){let H=q2e(S.image,E);H?(d.log.info(`Using image model fallback for ${q}`),q=H,d.scenarioType="image"):d.log.warn(`Image model ${S.image} unavailable (fail pool), keeping ${q}`)}d.body.model=q}catch(Q){d.log.error(`Error in router middleware: ${Q.message}`),d.body.model=S?.default,d.scenarioType="default"}},nZe=new fEt({max:1e3}),GGt=async d=>{if(nZe.has(d)){let g=nZe.get(d);return!g||g===""?null:g}try{let g=await(0,BTt.opendir)(_ft.CLAUDE_PROJECTS_DIR),y=[];for await(let S of g)S.isDirectory()&&y.push(S.name);let b=y.map(async S=>{let E=(0,dCt.join)(_ft.CLAUDE_PROJECTS_DIR,S,`${d}.jsonl`);try{return(await(0,BTt.stat)(E)).isFile()?S:null}catch{return null}}),D=await Promise.all(b);for(let S of D)if(S)return nZe.set(d,S),S;return nZe.set(d,""),null}catch(g){return console.error("Error searching for project by session:",g),nZe.set(d,""),null}},WGt=class{plugins=new Map;pluginInstances=new Map;registerPlugin(d,g={}){this.pluginInstances.set(d.name,d),this.plugins.set(d.name,{name:d.name,enabled:g.enabled!==!1,options:g})}async enablePlugin(d,g){let y=this.plugins.get(d),b=this.pluginInstances.get(d);if(!y||!b)throw new Error(`Plugin ${d} not found`);y.enabled&&await g.register(b.register,y.options)}async enablePlugins(d){for(let[g,y]of this.plugins)if(y.enabled)try{await this.enablePlugin(g,d)}catch(b){let D=b instanceof Error?b.message:String(b);d.log?.error(`Failed to enable plugin ${g}: ${D}`)}}getPlugins(){return Array.from(this.plugins.values())}getPlugin(d){return this.pluginInstances.get(d)}hasPlugin(d){return this.pluginInstances.has(d)}isPluginEnabled(d){return this.plugins.get(d)?.enabled||!1}setPluginEnabled(d,g){let y=this.plugins.get(d);y&&(y.enabled=g)}removePlugin(d){this.plugins.delete(d),this.pluginInstances.delete(d)}clear(){this.plugins.clear(),this.pluginInstances.clear()}},TCt=new WGt,VGt=Bfe(bzt(),1),KGt=class extends TransformStream{buffer="";currentEvent={};constructor(){super({transform:(d,g)=>{this.buffer+=d;let y=this.buffer.split(`
2066
+ `:case"\r":return!1;default:return new RegExp("^\\p{Cc}|\\p{Cf}|\\p{Co}|\\p{Cs}$","u").test(d)}}clean_text(d){let g=[];for(let y of d){let b=y.charCodeAt(0);b===0||b===65533||this.is_control(y)||(/^\s$/.test(y)?g.push(" "):g.push(y))}return g.join("")}normalize(d){return this.config.clean_text&&(d=this.clean_text(d)),this.config.handle_chinese_chars&&(d=this.tokenize_chinese_chars(d)),this.config.lowercase?(d=d.toLowerCase(),this.config.strip_accents!==!1&&(d=this.strip_accents(d))):this.config.strip_accents&&(d=this.strip_accents(d)),d}},Gqt=Hqt,Wqt=class extends Ofe{constructor(d){super(d),this.charsmap=d.precompiled_charsmap??null}normalize(d){return d=d.replace(/[\u0001-\u0008\u000B\u000E-\u001F\u007F\u008F\u009F]/gm,""),d=d.replace(/[\u0009\u000A\u000C\u000D\u00A0\u1680\u2000-\u200F\u2028\u2029\u202F\u205F\u2581\u3000\uFEFF\uFFFD]/gm," "),d.includes("\uFF5E")?d=d.split("\uFF5E").map(g=>g.normalize("NFKC")).join("\uFF5E"):d=d.normalize("NFKC"),d}},Vqt=Wqt,Kqt=class extends Ofe{constructor(d){super(d),this.normalizers=(d.normalizers??[]).map(g=>UIt(g))}normalize(d){return this.normalizers.reduce((g,y)=>y?y.normalize(g):g,d)}},Yqt=Kqt,Zqt=class extends Ofe{normalize(d){let g=Hft(this.config.pattern??{});return g===null?d:d.replaceAll(g,this.config.content??"")}},Xqt=Zqt,eHt=class extends Ofe{constructor(){super(...arguments),this.form="NFC"}normalize(d){return d=d.normalize(this.form),d}},Gft=eHt,tHt=class extends Gft{constructor(){super(...arguments),this.form="NFC"}},rHt=tHt,nHt=class extends Gft{constructor(){super(...arguments),this.form="NFD"}},iHt=nHt,aHt=class extends Gft{constructor(){super(...arguments),this.form="NFKC"}},oHt=aHt,sHt=class extends Gft{constructor(){super(...arguments),this.form="NFKD"}},lHt=sHt,cHt=class extends Ofe{normalize(d){return this.config.strip_left&&this.config.strip_right?d=d.trim():(this.config.strip_left&&(d=d.trimStart()),this.config.strip_right&&(d=d.trimEnd())),d}},uHt=cHt,_Ht=class extends Ofe{normalize(d){return QIt(d)}},dHt=_Ht,pHt=class extends Ofe{normalize(d){return d.toLowerCase()}},fHt=pHt,mHt=class extends Ofe{normalize(d){return d=this.config.prepend+d,d}},hHt=mHt;function gHt(d){if(d===null)return null;switch(d.type){case"BertNormalizer":return new Gqt(d);case"Precompiled":return new Vqt(d);case"Sequence":return new Yqt(d);case"Replace":return new Xqt(d);case"NFC":return new rHt(d);case"NFD":return new iHt(d);case"NFKC":return new oHt(d);case"NFKD":return new lHt(d);case"Strip":return new uHt(d);case"StripAccents":return new dHt(d);case"Lowercase":return new fHt(d);case"Prepend":return new hHt(d);default:throw new Error(`Unknown Normalizer type: ${d.type}`)}}var UIt=gHt,yHt=class extends MZe{pre_tokenize(d,g){return(Array.isArray(d)?d.map(y=>this.pre_tokenize_text(y,g)):this.pre_tokenize_text(d,g)).flat()}_call(d,g){return this.pre_tokenize(d,g)}},qse=yHt,AHt=class extends qse{constructor(d){super(),this.config=d,this.add_prefix_space=this.config.add_prefix_space??!1,this.trim_offsets=this.config.trim_offsets??!1,this.use_regex=this.config.use_regex??!0,this.pattern=new RegExp("'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+","gu"),this.byte_encoder=jIt,this.text_encoder=new TextEncoder}pre_tokenize_text(d,g){return this.add_prefix_space&&!d.startsWith(" ")&&(d=" "+d),(this.use_regex?d.match(this.pattern)||[]:[d]).map(y=>Array.from(this.text_encoder.encode(y),b=>this.byte_encoder[b]).join(""))}},vHt=AHt,bHt=class extends qse{pre_tokenize_text(d,g){return d.match(/\w+|[^\w\s]+/g)||[]}},xHt=bHt,CHt=class extends qse{constructor(d){super(),this.replacement=d.replacement??"\u2581",this.str_rep=d.str_rep||this.replacement,this.prepend_scheme=d.prepend_scheme??"always"}pre_tokenize_text(d,g){let{section_index:y=void 0}=g??{},b=d.replaceAll(" ",this.str_rep);return!b.startsWith(this.replacement)&&(this.prepend_scheme==="always"||this.prepend_scheme==="first"&&y===0)&&(b=this.str_rep+b),[b]}},EHt=CHt,DHt=class extends qse{constructor(d){super(),this.config=d,this.pattern=Hft(this.config.pattern??{},this.config.invert??!0)}pre_tokenize_text(d){return this.pattern===null?[]:this.config.invert?d.match(this.pattern)||[]:this.config.behavior?.toLowerCase()==="removed"?d.split(this.pattern).filter(g=>g):Jqt(d,this.pattern)}},SHt=DHt,kHt=class extends qse{constructor(d){super(),this.config=d,this.pattern=new RegExp(`[^${AZe}]+|[${AZe}]+`,"gu")}pre_tokenize_text(d){return d.match(this.pattern)||[]}},THt=kHt,wHt=class extends qse{constructor(d){super(),this.config=d;let g=`[^\\d]+|\\d${this.config.individual_digits?"":"+"}`;this.pattern=new RegExp(g,"gu")}pre_tokenize_text(d){return d.match(this.pattern)||[]}},FHt=wHt,IHt=class extends qse{constructor(){super(),this.pattern=new RegExp(`[^\\s${AZe}]+|[${AZe}]`,"gu")}pre_tokenize_text(d,g){return d.trim().match(this.pattern)||[]}},NHt=IHt,PHt=class extends qse{constructor(d){super(),this.config=d,this.pattern=Hft(this.config.pattern??{}),this.content=this.config.content??""}pre_tokenize_text(d){return this.pattern===null?[d]:[d.replaceAll(this.pattern,this.config.content??"")]}},BHt=PHt,OHt=class extends qse{constructor(d){super(),this.tokenizers=(d.pretokenizers??[]).map(g=>JIt(g))}pre_tokenize_text(d,g){return this.tokenizers.reduce((y,b)=>b?b.pre_tokenize(y,g):y,[d])}},LHt=OHt,RHt=class extends qse{pre_tokenize_text(d){return $qt(d)}},MHt=RHt;function jHt(d){if(d===null)return null;switch(d.type){case"BertPreTokenizer":return new NHt;case"Sequence":return new LHt(d);case"Whitespace":return new xHt;case"WhitespaceSplit":return new MHt;case"Metaspace":return new EHt(d);case"ByteLevel":return new vHt(d);case"Split":return new SHt(d);case"Punctuation":return new THt(d);case"Digits":return new FHt(d);case"Replace":return new BHt(d);default:throw new Error(`Unknown PreTokenizer type: ${d.type}`)}}var JIt=jHt,QHt=class extends MZe{constructor(d){super(),this.config=d,this.vocab=[],this.tokens_to_ids=new Map,this.unk_token_id=void 0,this.unk_token=void 0,this.end_of_word_suffix=void 0,this.fuse_unk=this.config.fuse_unk??!1}_call(d){let g=this.encode(d);return this.fuse_unk&&(g=Rqt(g,this.tokens_to_ids,this.unk_token_id)),g}convert_tokens_to_ids(d){return d.map(g=>this.tokens_to_ids.get(g)??this.unk_token_id)}convert_ids_to_tokens(d){return d.map(g=>this.vocab[Number(g)]??this.unk_token)}},Wft=QHt,UHt=class extends Wft{constructor(d){super(d),this.max_input_chars_per_word=100,this.tokens_to_ids=SEt(d.vocab),this.unk_token_id=this.tokens_to_ids.get(d.unk_token),this.unk_token=d.unk_token,this.max_input_chars_per_word=d.max_input_chars_per_word??100,this.vocab=new Array(this.tokens_to_ids.size);for(let[g,y]of this.tokens_to_ids)this.vocab[y]=g}encode(d){let g=[];for(let y of d){let b=[...y];if(b.length>this.max_input_chars_per_word){g.push(this.unk_token);continue}let D=!1,S=0,E=[];for(;S<b.length;){let I=b.length,N=null;for(;S<I;){let L=b.slice(S,I).join("");if(S>0&&(L=this.config.continuing_subword_prefix+L),this.tokens_to_ids.has(L)){N=L;break}--I}if(N===null){D=!0;break}E.push(N),S=I}D?g.push(this.unk_token):g.push(...E)}return g}},Awt=UHt,vwt=class $It{constructor(g,y){this.is_leaf=g,this.children=y}static default(){return new $It(!1,new Map)}},JHt=class{constructor(){this.root=vwt.default()}extend(d){for(let g of d)this.push(g)}push(d){let g=this.root;for(let y of d){let b=g.children.get(y);b===void 0&&(b=vwt.default(),g.children.set(y,b)),g=b}g.is_leaf=!0}*common_prefix_search(d){let g=this.root;if(g===void 0)return;let y="";for(let b of d){if(y+=b,g=g.children.get(b),g===void 0)return;g.is_leaf&&(yield y)}}},$Ht=JHt,Uxt=class zIt{constructor(g,y,b,D,S){this.token_id=g,this.node_id=y,this.pos=b,this.length=D,this.score=S,this.prev=null,this.backtrace_score=0}clone(){let g=new zIt(this.token_id,this.node_id,this.pos,this.length,this.score);return g.prev=this.prev,g.backtrace_score=this.backtrace_score,g}},zHt=class{constructor(d,g,y){this.chars=Array.from(d),this.len=this.chars.length,this.bos_token_id=g,this.eos_token_id=y,this.nodes=[],this.begin_nodes=Array.from({length:this.len+1},()=>[]),this.end_nodes=Array.from({length:this.len+1},()=>[]);let b=new Uxt(this.bos_token_id??0,0,0,0,0),D=new Uxt(this.eos_token_id??0,1,this.len,0,0);this.nodes.push(b.clone()),this.nodes.push(D.clone()),this.begin_nodes[this.len].push(D),this.end_nodes[0].push(b)}insert(d,g,y,b){let D=this.nodes.length,S=new Uxt(b,D,d,g,y);this.begin_nodes[d].push(S),this.end_nodes[d+g].push(S),this.nodes.push(S)}viterbi(){let d=this.len,g=0;for(;g<=d;){if(this.begin_nodes[g].length==0)return[];for(let S of this.begin_nodes[g]){S.prev=null;let E=0,I=null;for(let N of this.end_nodes[g]){let L=N.backtrace_score+S.score;(I===null||L>E)&&(I=N.clone(),E=L)}if(I!==null)S.prev=I,S.backtrace_score=E;else return[]}++g}let y=[],b=this.begin_nodes[d][0].prev;if(b===null)return[];let D=b.clone();for(;D.prev!==null;)y.push(D.clone()),D=D.clone().prev.clone();return y.reverse(),y}piece(d){return this.chars.slice(d.pos,d.pos+d.length).join("")}tokens(){return this.viterbi().map(d=>this.piece(d))}token_ids(){return this.viterbi().map(d=>d.token_id)}},qHt=zHt;function HHt(d){if(d.length===0)throw new Error("Array must not be empty");let g=d[0],y=0;for(let b=1;b<d.length;++b)d[b]<g&&(g=d[b],y=b);return[g,y]}var GHt=class extends Wft{constructor(d,g){super(d);let y=d.vocab.length;this.vocab=new Array(y),this.scores=new Array(y);for(let b=0;b<y;++b)[this.vocab[b],this.scores[b]]=d.vocab[b];this.unk_token_id=d.unk_id,this.unk_token=this.vocab[d.unk_id],this.tokens_to_ids=new Map(this.vocab.map((b,D)=>[b,D])),this.bos_token=" ",this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=g,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.min_score=HHt(this.scores)[0],this.unk_score=this.min_score-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new $Ht,this.trie.extend(this.vocab),this.fuse_unk=!0}populate_nodes(d){let g=d.chars,y=1,b=0;for(;b<g.length;){let D=!1,S=[],E=g.slice(b).join(""),I=this.trie.common_prefix_search(E);for(let N of I){S.push(N);let L=this.tokens_to_ids.get(N),R=this.scores[L],j=Qqt(N);d.insert(b,j,R,L),!D&&j===y&&(D=!0)}D||d.insert(b,y,this.unk_score,this.unk_token_id),b+=y}}tokenize(d){let g=new qHt(d,this.bos_token_id,this.eos_token_id);return this.populate_nodes(g),g.tokens()}encode(d){let g=[];for(let y of d){let b=this.tokenize(y);g.push(...b)}return g}},bwt=GHt,WHt=class{constructor(d=(y,b)=>y>b,g=1/0){this._heap=[],this._comparator=d,this._max_size=g}get size(){return this._heap.length}is_empty(){return this.size===0}peek(){return this._heap[0]}push(...d){return this.extend(d)}extend(d){for(let g of d)if(this.size<this._max_size)this._heap.push(g),this._sift_up();else{let y=this._smallest();this._comparator(g,this._heap[y])&&(this._heap[y]=g,this._sift_up_from(y))}return this.size}pop(){let d=this.peek(),g=this.size-1;return g>0&&this._swap(0,g),this._heap.pop(),this._sift_down(),d}replace(d){let g=this.peek();return this._heap[0]=d,this._sift_down(),g}_parent(d){return(d+1>>>1)-1}_left(d){return(d<<1)+1}_right(d){return d+1<<1}_greater(d,g){return this._comparator(this._heap[d],this._heap[g])}_swap(d,g){let y=this._heap[d];this._heap[d]=this._heap[g],this._heap[g]=y}_sift_up(){this._sift_up_from(this.size-1)}_sift_up_from(d){for(;d>0&&this._greater(d,this._parent(d));)this._swap(d,this._parent(d)),d=this._parent(d)}_sift_down(){let d=0;for(;this._left(d)<this.size&&this._greater(this._left(d),d)||this._right(d)<this.size&&this._greater(this._right(d),d);){let g=this._right(d)<this.size&&this._greater(this._right(d),this._left(d))?this._right(d):this._left(d);this._swap(d,g),d=g}}_smallest(){return 2**Math.floor(Math.log2(this.size))-1}},VHt=WHt,KHt=class{constructor(d){this.capacity=d,this.cache=new Map}get(d){if(!this.cache.has(d))return;let g=this.cache.get(d);return this.cache.delete(d),this.cache.set(d,g),g}put(d,g){this.cache.has(d)&&this.cache.delete(d),this.cache.set(d,g),this.cache.size>this.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}},YHt=KHt,ZHt=class extends Wft{constructor(d){super(d),this.tokens_to_ids=SEt(d.vocab),this.unk_token_id=this.tokens_to_ids.get(d.unk_token),this.unk_token=d.unk_token,this.vocab=new Array(this.tokens_to_ids.size);for(let[y,b]of this.tokens_to_ids)this.vocab[b]=y;let g=Array.isArray(d.merges[0]);this.merges=g?d.merges:d.merges.map(y=>y.split(" ",2)),this.bpe_ranks=new Map(this.merges.map((y,b)=>[JSON.stringify(y),b])),this.end_of_word_suffix=d.end_of_word_suffix,this.continuing_subword_suffix=d.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new YHt(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(d){if(d.length===0)return[];let g=this.cache.get(d);if(g!==void 0)return g;let y=Array.from(d);this.end_of_word_suffix&&(y[y.length-1]+=this.end_of_word_suffix);let b=[];if(y.length>1){let D=new VHt((I,N)=>I.score<N.score),S={token:y[0],bias:0,prev:null,next:null},E=S;for(let I=1;I<y.length;++I){let N={bias:I/y.length,token:y[I],prev:E,next:null};E.next=N,this.add_node(D,E),E=N}for(;!D.is_empty();){let I=D.pop();if(I.deleted||!I.next||I.next.deleted)continue;if(I.deleted=!0,I.next.deleted=!0,I.prev){let L={...I.prev};I.prev.deleted=!0,I.prev=L,L.prev?L.prev.next=L:S=L}let N={token:I.token+I.next.token,bias:I.bias,prev:I.prev,next:I.next.next};N.prev?(N.prev.next=N,this.add_node(D,N.prev)):S=N,N.next&&(N.next.prev=N,this.add_node(D,N))}for(let I=S;I!==null;I=I.next)b.push(I.token)}else b=y;if(this.continuing_subword_suffix)for(let D=0;D<b.length-1;++D)b[D]+=this.continuing_subword_suffix;return d.length<this.max_length_to_cache&&this.cache.put(d,b),b}add_node(d,g){let y=this.bpe_ranks.get(JSON.stringify([g.token,g.next.token]));y!==void 0&&(g.score=y+g.bias,d.push(g))}encode(d){let g=[];for(let y of d){if(this.ignore_merges&&this.tokens_to_ids.has(y)){g.push(y);continue}let b=this.bpe(y);for(let D of b)if(this.tokens_to_ids.has(D))g.push(D);else if(this.byte_fallback){let S=Array.from(this.text_encoder.encode(D)).map(E=>`<0x${E.toString(16).toUpperCase().padStart(2,"0")}>`);S.every(E=>this.tokens_to_ids.has(E))?g.push(...S):g.push(this.unk_token)}else g.push(this.unk_token)}return g}},xwt=ZHt,XHt=class extends Wft{constructor(d,g){super(d);let y=d.vocab;this.tokens_to_ids=SEt(g.target_lang?y[g.target_lang]:y),this.bos_token=g.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=g.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=g.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=g.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=new Array(this.tokens_to_ids.size);for(let[b,D]of this.tokens_to_ids)this.vocab[D]=b}encode(d){return d}},eGt=XHt;function tGt(d,g){switch(d.type){case"WordPiece":return new Awt(d);case"Unigram":return new bwt(d,g.eos_token);case"BPE":return new xwt(d);default:if(d.vocab)return Array.isArray(d.vocab)?new bwt(d,g.eos_token):Object.hasOwn(d,"continuing_subword_prefix")&&Object.hasOwn(d,"unk_token")?Object.hasOwn(d,"merges")?new xwt(d):new Awt(d):new eGt(d,{target_lang:g.target_lang,bos_token:g.bos_token,eos_token:g.eos_token,pad_token:g.pad_token,unk_token:g.unk_token});throw new Error(`Unknown TokenizerModel type: ${d?.type}`)}}var rGt=tGt,nGt=class extends MZe{constructor(d){super(),this.config=d}_call(d,...g){return this.post_process(d,...g)}},jZe=nGt,iGt=class extends jZe{post_process(d,g=null,y=!0){let b=g===null?this.config.single:this.config.pair,D=[],S=[];for(let E of b)"SpecialToken"in E?y&&(D.push(E.SpecialToken.id),S.push(E.SpecialToken.type_id)):"Sequence"in E&&(E.Sequence.id==="A"?(D=bY(D,d),S=bY(S,new Array(d.length).fill(E.Sequence.type_id))):E.Sequence.id==="B"&&(D=bY(D,g),S=bY(S,new Array(g.length).fill(E.Sequence.type_id))));return{tokens:D,token_type_ids:S}}},aGt=iGt,oGt=class extends jZe{post_process(d,g=null){return{tokens:g?bY(d,g):d}}},sGt=oGt,lGt=class extends jZe{constructor(d){super(d),this.sep=d.sep,this.cls=d.cls}post_process(d,g=null,y=!0){y&&(d=bY([this.cls[0]],d,[this.sep[0]]));let b=new Array(d.length).fill(0);if(g){let D=[],S=y?[this.sep[0]]:[];d=bY(d,D,g,S),b=bY(b,new Array(g.length+D.length+S.length).fill(1))}return{tokens:d,token_type_ids:b}}},cGt=lGt,uGt=class extends jZe{constructor(d){super(d),this.sep=d.sep,this.cls=d.cls}post_process(d,g,y=!0){y&&(d=bY([this.cls[0]],d,[this.sep[0]]));let b=new Array(d.length).fill(0);if(g){let D=y?[this.sep[0]]:[],S=y?[this.sep[0]]:[];d=bY(d,D,g,S),b=bY(b,new Array(g.length+D.length+S.length).fill(1))}return{tokens:d,token_type_ids:b}}},_Gt=uGt,dGt=class extends jZe{constructor(d){super(d),this.processors=(d.processors??[]).map(g=>qIt(g))}post_process(d,g=null,y=!0){let b={tokens:d};for(let D of this.processors)b=D.post_process(b.tokens,g,y);return b}},pGt=dGt;function fGt(d){if(d===null)return null;switch(d.type){case"TemplateProcessing":return new aGt(d);case"ByteLevel":return new sGt(d);case"BertProcessing":return new cGt(d);case"RobertaProcessing":return new _Gt(d);case"Sequence":return new pGt(d);default:throw new Error(`Unknown PostProcessor type: ${d.type}`)}}var qIt=fGt,mGt=class extends MZe{constructor(d){super(),this.config=d,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets="trim_offsets"in d?d.trim_offsets:!1}_call(d){return this.decode(d)}decode(d){return this.decode_chain(d).join("")}},Hse=mGt,hGt=class extends Hse{constructor(d){super(d),this.byte_decoder=Bqt,this.text_decoder=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(d){let g=d.join(""),y=new Uint8Array([...g].map(b=>this.byte_decoder[b]));return this.text_decoder.decode(y)}decode_chain(d){let g=[],y=[];for(let b of d)this.added_tokens.find(D=>D.content===b)!==void 0?(y.length>0&&(g.push(this.convert_tokens_to_string(y)),y=[]),g.push(b)):y.push(b);return y.length>0&&g.push(this.convert_tokens_to_string(y)),g}},gGt=hGt,yGt=class extends Hse{constructor(d){super(d),this.cleanup=d.cleanup}decode_chain(d){return d.map((g,y)=>{if(y!==0){let b=this.config.prefix;b&&g.startsWith(b)?g=g.replace(b,""):g=" "+g}return this.cleanup&&(g=DEt(g)),g})}},AGt=yGt,vGt=class extends Hse{constructor(d){super(d),this.replacement=d.replacement??"\u2581"}decode_chain(d){let g=[];for(let y=0;y<d.length;++y){let b=d[y].replaceAll(this.replacement," ");y==0&&b.startsWith(" ")&&(b=b.substring(1)),g.push(b)}return g}},bGt=vGt,xGt=class extends Hse{constructor(d){super(d),this.suffix=d.suffix??""}decode_chain(d){return d.map((g,y)=>g.replaceAll(this.suffix,y===d.length-1?"":" "))}},CGt=xGt,EGt=class extends Hse{constructor(d){super(d),this.pad_token=d.pad_token??"",this.word_delimiter_token=d.word_delimiter_token??"",this.cleanup=d.cleanup}convert_tokens_to_string(d){if(d.length===0)return"";let g=[d[0]];for(let b=1;b<d.length;++b)d[b]!==g.at(-1)&&g.push(d[b]);let y=g.filter(b=>b!==this.pad_token).join("");return this.cleanup&&(y=DEt(y).replaceAll(this.word_delimiter_token," ").trim()),y}decode_chain(d){return[this.convert_tokens_to_string(d)]}},DGt=EGt,SGt=class extends Hse{constructor(d){super(d),this.decoders=(d.decoders??[]).map(g=>HIt(g))}decode_chain(d){return this.decoders.reduce((g,y)=>y.decode_chain(g),d)}},kGt=SGt,TGt=class extends Hse{decode_chain(d){let g=Hft(this.config.pattern),y=this.config.content??"";return g===null?d:d.map(b=>b.replaceAll(g,y))}},wGt=TGt,FGt=class extends Hse{decode_chain(d){return[d.join("")]}},IGt=FGt,NGt=class extends Hse{constructor(d){super(d),this.content=d.content??"",this.start=d.start??0,this.stop=d.stop??0}decode_chain(d){return d.map(g=>{let y=0;for(let D=0;D<this.start&&g[D]===this.content;++D)y=D+1;let b=g.length;for(let D=0;D<this.stop;++D){let S=g.length-D-1;if(g[S]===this.content){b=S;continue}else break}return g.slice(y,b)})}},PGt=NGt,BGt=class extends Hse{constructor(d){super(d),this.text_decoder=new TextDecoder}decode_chain(d){let g=[],y=[];for(let b of d){let D=null;if(b.length===6&&b.startsWith("<0x")&&b.endsWith(">")){let S=parseInt(b.slice(3,5),16);isNaN(S)||(D=S)}if(D!==null)y.push(D);else{if(y.length>0){let S=this.text_decoder.decode(Uint8Array.from(y));g.push(S),y=[]}g.push(b)}}if(y.length>0){let b=this.text_decoder.decode(Uint8Array.from(y));g.push(b),y=[]}return g}},OGt=BGt;function LGt(d){if(d===null)return null;switch(d.type){case"ByteLevel":return new gGt(d);case"WordPiece":return new AGt(d);case"Metaspace":return new bGt(d);case"BPEDecoder":return new CGt(d);case"CTC":return new DGt(d);case"Sequence":return new kGt(d);case"Replace":return new wGt(d);case"Fuse":return new IGt(d);case"Strip":return new PGt(d);case"ByteFallback":return new OGt(d);default:throw new Error(`Unknown Decoder type: ${d.type}`)}}var HIt=LGt,RGt=class{constructor(d,g){let y=ywt(d,"Tokenizer",["model","decoder","post_processor","pre_tokenizer","normalizer"]);if(y)throw new Error(y);let b=ywt(g,"Config");if(b)throw new Error(b);this.tokenizer=d,this.config=g,this.normalizer=UIt(this.tokenizer.normalizer),this.pre_tokenizer=JIt(this.tokenizer.pre_tokenizer),this.model=rGt(this.tokenizer.model,this.config),this.post_processor=qIt(this.tokenizer.post_processor),this.decoder=HIt(this.tokenizer.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[],this.tokenizer.added_tokens.forEach(D=>{let S=new Nqt(D);this.added_tokens.push(S),this.model.tokens_to_ids.set(S.content,S.id),this.model.vocab[S.id]=S.content,S.special&&(this.special_tokens.push(S.content),this.all_special_ids.push(S.id))}),(this.config.additional_special_tokens??[]).forEach(D=>{this.special_tokens.includes(D)||this.special_tokens.push(D)}),this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.added_tokens_splitter=new Fqt(this.added_tokens.map(D=>D.content)),this.added_tokens_map=new Map(this.added_tokens.map(D=>[D.content,D])),this.remove_space=this.config.remove_space,this.clean_up_tokenization_spaces=this.config.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=this.config.do_lowercase_and_remove_accent??!1}encode(d,{text_pair:g=null,add_special_tokens:y=!0,return_token_type_ids:b=null}={}){let{tokens:D,token_type_ids:S}=this.tokenize_helper(d,{text_pair:g,add_special_tokens:y}),E=this.model.convert_tokens_to_ids(D),I={ids:E,tokens:D,attention_mask:new Array(E.length).fill(1)};return b&&S&&(I.token_type_ids=S),I}decode(d,g={}){if(!Array.isArray(d)||d.length===0||!jqt(d[0]))throw Error("token_ids must be a non-empty array of integers.");let y=this.model.convert_ids_to_tokens(d);g.skip_special_tokens&&(y=y.filter(D=>!this.special_tokens.includes(D)));let b=this.decoder?this.decoder(y):y.join(" ");return this.decoder&&this.decoder.end_of_word_suffix&&(b=b.replaceAll(this.decoder.end_of_word_suffix," "),g.skip_special_tokens&&(b=b.trim())),(g.clean_up_tokenization_spaces??this.clean_up_tokenization_spaces)&&(b=DEt(b)),b}tokenize(d,{text_pair:g=null,add_special_tokens:y=!1}={}){return this.tokenize_helper(d,{text_pair:g,add_special_tokens:y}).tokens}encode_text(d){if(d===null)return null;let g=this.added_tokens_splitter.split(d);return g.forEach((y,b)=>{let D=this.added_tokens_map.get(y);D&&(D.lstrip&&b>0&&(g[b-1]=g[b-1].trimEnd()),D.rstrip&&b<g.length-1&&(g[b+1]=g[b+1].trimStart()))}),g.flatMap((y,b)=>{if(y.length===0)return[];if(this.added_tokens_map.has(y))return[y];if(this.remove_space===!0&&(y=y.trim().split(/\s+/).join(" ")),this.do_lowercase_and_remove_accent&&(y=Uqt(y)),this.normalizer!==null&&(y=this.normalizer(y)),y.length===0)return[];let D=this.pre_tokenizer!==null?this.pre_tokenizer(y,{section_index:b}):[y];return this.model(D)})}tokenize_helper(d,{text_pair:g=null,add_special_tokens:y=!0}){let b=this.encode_text(d),D=this.encode_text(g||null);return this.post_processor?this.post_processor(b,D,y):{tokens:bY(b??[],D??[])}}token_to_id(d){return this.model.tokens_to_ids.get(d)}id_to_token(d){return this.model.vocab[d]}get_added_tokens_decoder(){let d=new Map;for(let g of this.added_tokens)d.set(g.id,g);return d}},MGt=RGt,jGt=class{type="huggingface";name;modelId;logger;options;tokenizer=null;cacheDir;safeModelName;constructor(d,g,y={}){this.modelId=d,this.logger=g,this.options=y,this.cacheDir=y.cacheDir||(0,Upt.join)((0,HJt.homedir)(),".claude-code-router",".huggingface"),this.safeModelName=d.replace(/\//g,"_").replace(/[^a-zA-Z0-9_-]/g,"_"),this.name=`huggingface-${d.split("/").pop()}`}getCachePaths(){let d=(0,Upt.join)(this.cacheDir,this.safeModelName);return{modelDir:d,tokenizerJson:(0,Upt.join)(d,"tokenizer.json"),tokenizerConfig:(0,Upt.join)(d,"tokenizer_config.json")}}ensureDir(d){(0,Jpt.existsSync)(d)||(0,Jpt.mkdirSync)(d,{recursive:!0})}async loadFromCache(){try{let d=this.getCachePaths();if(!(0,Jpt.existsSync)(d.tokenizerJson)||!(0,Jpt.existsSync)(d.tokenizerConfig))return null;let[g,y]=await Promise.all([$pt.promises.readFile(d.tokenizerJson,"utf-8"),$pt.promises.readFile(d.tokenizerConfig,"utf-8")]);return{tokenizerJson:JSON.parse(g),tokenizerConfig:JSON.parse(y)}}catch(d){return this.logger?.warn(`Failed to load from cache: ${d.message}`),null}}async downloadAndCache(){let d=this.getCachePaths(),g={json:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer.json`,config:`https://huggingface.co/${this.modelId}/resolve/main/tokenizer_config.json`};this.logger?.info(`Downloading tokenizer files for ${this.modelId}`);let y=new AbortController,b=setTimeout(()=>y.abort(),this.options.timeout||3e4);try{let[D,S]=await Promise.all([fetch(g.json,{signal:y.signal}),fetch(g.config,{signal:y.signal})]);if(!D.ok)throw new Error(`Failed to fetch tokenizer.json: ${D.statusText}`);let[E,I]=await Promise.all([D.json(),S.ok?S.json():Promise.resolve({})]);return this.ensureDir(d.modelDir),await Promise.all([$pt.promises.writeFile(d.tokenizerJson,JSON.stringify(E,null,2)),$pt.promises.writeFile(d.tokenizerConfig,JSON.stringify(I,null,2))]),{tokenizerJson:E,tokenizerConfig:I}}finally{clearTimeout(b)}}async initialize(){try{this.logger?.info(`Initializing HuggingFace tokenizer: ${this.modelId}`);let d=this.getCachePaths();this.ensureDir(this.cacheDir);let g=await this.loadFromCache()||await this.downloadAndCache();this.tokenizer=new MGt(g.tokenizerJson,g.tokenizerConfig),this.logger?.info(`Tokenizer initialized: ${this.name}`)}catch(d){throw this.logger?.error(`Failed to initialize tokenizer: ${d.message}`),new Error(`Failed to initialize HuggingFace tokenizer for ${this.modelId}: ${d.message}`)}}async countTokens(d){if(!this.tokenizer)throw new Error("Tokenizer not initialized");try{let g=this.extractTextFromRequest(d);return this.tokenizer.encode(g).ids.length}catch(g){throw this.logger?.error(`Error counting tokens: ${g.message}`),g}}isInitialized(){return this.tokenizer!==null}encodeText(d){if(!this.tokenizer)throw new Error("Tokenizer not initialized");return this.tokenizer.encode(d).ids}dispose(){this.tokenizer=null}extractTextFromRequest(d){let g=[],{messages:y,system:b,tools:D}=d;if(Array.isArray(y)){for(let S of y)if(typeof S.content=="string")g.push(S.content);else if(Array.isArray(S.content))for(let E of S.content)E.type==="text"&&E.text?g.push(E.text):E.type==="tool_use"&&E.input?g.push(JSON.stringify(E.input)):E.type==="tool_result"&&g.push(typeof E.content=="string"?E.content:JSON.stringify(E.content))}if(typeof b=="string")g.push(b);else if(Array.isArray(b)){for(let S of b)if(S.type==="text"){if(typeof S.text=="string")g.push(S.text);else if(Array.isArray(S.text))for(let E of S.text)E&&g.push(E)}}if(D)for(let S of D)S.name&&g.push(S.name),S.description&&g.push(S.description),S.input_schema&&g.push(JSON.stringify(S.input_schema));return g.join(" ")}},QGt=class{type="api";name;config;logger;options;constructor(d,g,y={}){if(!d.url||!d.apiKey)throw new Error("API tokenizer requires url and apiKey");this.config={url:d.url,apiKey:d.apiKey,requestFormat:d.requestFormat||"standard",responseField:d.responseField||"token_count",headers:d.headers||{}},this.logger=g,this.options=y;try{let b=new URL(d.url);this.name=`api-${b.hostname}`}catch{this.name=`api-${d.url}`}}async initialize(){try{new URL(this.config.url)}catch{throw new Error(`Invalid API URL: ${this.config.url}`)}}async countTokens(d){try{let g=this.formatRequestBody(d),y={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.config.headers},b=new AbortController,D=setTimeout(()=>b.abort(),this.options.timeout||3e4),S=await fetch(this.config.url,{method:"POST",headers:y,body:JSON.stringify(g),signal:b.signal});if(clearTimeout(D),!S.ok)throw new Error(`API tokenizer request failed: ${S.status} ${S.statusText}`);let E=await S.json();return this.extractTokenCount(E)}catch(g){throw g.name==="AbortError"?new Error("API tokenizer request timed out"):g}}isInitialized(){return!0}dispose(){}formatRequestBody(d){switch(this.config.requestFormat){case"standard":return d;case"openai":return{model:"gpt-3.5-turbo",messages:this.extractMessagesAsOpenAIFormat(d)};case"anthropic":return{messages:d.messages||[],system:d.system,tools:d.tools};case"custom":return{text:this.extractConcatenatedText(d)};default:return d}}extractMessagesAsOpenAIFormat(d){return d.messages?d.messages.map(g=>({role:g.role,content:this.extractTextFromMessage(g)})):[]}extractTextFromMessage(d){return typeof d.content=="string"?d.content:Array.isArray(d.content)?d.content.map(g=>g.type==="text"&&g.text?g.text:g.type==="tool_use"&&g.input?JSON.stringify(g.input):g.type==="tool_result"?typeof g.content=="string"?g.content:JSON.stringify(g.content):"").join(" "):""}extractConcatenatedText(d){let g=[];return d.messages&&d.messages.forEach(y=>{g.push(this.extractTextFromMessage(y))}),typeof d.system=="string"?g.push(d.system):Array.isArray(d.system)&&d.system.forEach(y=>{y.type==="text"&&(typeof y.text=="string"?g.push(y.text):Array.isArray(y.text)&&y.text.forEach(b=>{b&&g.push(b)}))}),d.tools&&d.tools.forEach(y=>{y.name&&g.push(y.name),y.description&&g.push(y.description),y.input_schema&&g.push(JSON.stringify(y.input_schema))}),g.join(" ")}extractTokenCount(d){try{let g=this.config.responseField,y=g.split("."),b=d;for(let D of y){if(b==null)throw new Error(`Field path '${g}' not found in response`);b=b[D]}if(typeof b!="number")throw new Error(`Expected number at field path '${g}', got ${typeof b}`);return b}catch(g){throw this.logger?.error(`Failed to extract token count from API response: ${g.message}. Response: ${JSON.stringify(d)}`),new Error(`Invalid response from API tokenizer: ${g.message}`)}}},Cwt=class{tokenizers=new Map;configService;logger;options;fallbackTokenizer;constructor(d,g,y={}){this.configService=d,this.logger=g,this.options={timeout:y.timeout??3e4,...y}}async initialize(){try{this.fallbackTokenizer=new hwt("cl100k_base"),await this.fallbackTokenizer.initialize(),this.tokenizers.set("fallback",this.fallbackTokenizer),this.logger?.info("TokenizerService initialized successfully")}catch(d){throw this.logger?.error(`TokenizerService initialization error: ${d.message}`),d}}async getTokenizer(d){let g=this.getCacheKey(d);if(this.tokenizers.has(g))return this.tokenizers.get(g);let y;try{switch(d.type){case"tiktoken":y=new hwt(d.encoding||"cl100k_base");break;case"huggingface":this.logger?.info(`Initializing HuggingFace tokenizer for model: ${d.model}`),y=new jGt(d.model,this.logger,{timeout:this.options.timeout});break;case"api":y=new QGt(d,this.logger,{timeout:this.options.timeout});break;default:throw new Error(`Unknown tokenizer type: ${d.type}`)}return this.logger?.info(`Calling initialize() on ${d.type} tokenizer...`),await y.initialize(),this.tokenizers.set(g,y),this.logger?.info(`Tokenizer initialized successfully: ${d.type} (${g})`),y}catch(b){return this.logger?.error(`Failed to initialize ${d.type} tokenizer: ${b.message}`),this.logger?.error(`Error stack: ${b.stack}`),this.fallbackTokenizer||await this.initialize(),this.fallbackTokenizer}}async countTokens(d,g){let y=g?await this.getTokenizer(g):this.fallbackTokenizer;return{tokenCount:await y.countTokens(d),tokenizerUsed:y.name,cached:!1}}getTokenizerConfigForModel(d,g){let y=(this.configService.get("providers")||[]).find(b=>b.name===d);if(y?.tokenizer)return y.tokenizer.models?.[g]?y.tokenizer.models[g]:y.tokenizer.default}dispose(){this.tokenizers.forEach(d=>{try{d.dispose()}catch(g){this.logger?.error(`Error disposing tokenizer: ${g}`)}}),this.tokenizers.clear()}getCacheKey(d){switch(d.type){case"tiktoken":return`tiktoken:${d.encoding||"cl100k_base"}`;case"huggingface":return`hf:${d.model}`;case"api":return`api:${d.url}`;default:return`unknown:${JSON.stringify(d)}`}}},UGt=class{capacity;cache;constructor(d){this.capacity=d,this.cache=new Map}get(d){if(!this.cache.has(d))return;let g=this.cache.get(d);return this.cache.delete(d),this.cache.set(d,g),g}put(d,g){if(this.cache.has(d))this.cache.delete(d);else if(this.cache.size>=this.capacity){let y=this.cache.keys().next().value;y!==void 0&&this.cache.delete(y)}this.cache.set(d,g)}values(){return Array.from(this.cache.values())}},pZe=new UGt(100),Ife=(0,GJt.get_encoding)("cl100k_base"),GIt=(d,g,y)=>{let b=0;return Array.isArray(d)&&d.forEach(D=>{typeof D.content=="string"?b+=Ife.encode(D.content).length:Array.isArray(D.content)&&D.content.forEach(S=>{S.type==="text"?b+=Ife.encode(S.text).length:S.type==="tool_use"?b+=Ife.encode(JSON.stringify(S.input)).length:S.type==="tool_result"&&(b+=Ife.encode(typeof S.content=="string"?S.content:JSON.stringify(S.content)).length)})}),typeof g=="string"?b+=Ife.encode(g).length:Array.isArray(g)&&g.forEach(D=>{D.type==="text"&&(typeof D.text=="string"?b+=Ife.encode(D.text).length:Array.isArray(D.text)&&D.text.forEach(S=>{b+=Ife.encode(S||"").length}))}),y&&y.forEach(D=>{D.description&&(b+=Ife.encode(D.name+D.description).length),D.input_schema&&(b+=Ife.encode(JSON.stringify(D.input_schema)).length)}),b},WIt=async(d,g)=>{if(d.sessionId){let y=await GGt(d.sessionId);if(y){let b=(0,dCt.join)(_ft.HOME_DIR,y,"config.json"),D=(0,dCt.join)(_ft.HOME_DIR,y,`${d.sessionId}.json`);try{let S=JSON.parse(await(0,_Ct.readFile)(D,"utf8"));if(S&&S.Router)return S.Router}catch{}try{let S=JSON.parse(await(0,_Ct.readFile)(b,"utf8"));if(S&&S.Router)return S.Router}catch{}}}};function pft(d){let g=d||"";return g.includes(",")&&(g=g.split(",").pop()||g),g.includes("/")&&(g=g.split("/").pop()||g),g.includes(":")&&(g=g.split(":")[0]),g.trim().toLowerCase()}function VIt(d){let g=pft(d),y=g.match(/claude-(?:\d+-\d+-|\d+-)?(sonnet|opus|haiku)(?:-|$)/i)||g.match(/claude-(sonnet|opus|haiku)(?:-|$)/i);return y?y[1].toLowerCase():null}function JGt(d,g){if(!g||!d)return null;let y=pft(d);if(g[d])return g[d];if(g[y])return g[y];let b=VIt(d);if(b&&g[b])return g[b];for(let[D,S]of Object.entries(g)){let E=pft(D);if(E&&y.includes(E))return S}return null}function q2e(d,g,y){if(!d?.includes(","))return d;let[b,...D]=d.split(","),S=b.trim(),E=D.join(",").trim();if(!y&&!FIt().isAvailable(S,E))return null;let I=g.find(L=>L.name.toLowerCase()===S.toLowerCase()),N=I?.models?.find(L=>String(L).toLowerCase()===E.toLowerCase());return I&&N?`${I.name},${N}`:d}function $Gt(d){return d.body.messages?.some(g=>g.role==="user"&&Array.isArray(g.content)&&g.content.some(y=>y.type==="image"||y.type==="image_url"||Array.isArray(y?.content)&&y.content.some(b=>b.type==="image"||b.type==="image_url")))}function zGt(d){let g=pft(d);return[/claude/i,/gemini/i,/gpt-4o/i,/gpt-4\.1/i,/gpt-4-vision/i,/qwen.*vl/i,/glm-4v/i,/grok.*vision/i,/pixtral/i,/llava/i].some(y=>y.test(g))}function qGt(d,g,y,b,D){let S=y.longContextThreshold||6e4;if(g>2e5&&y.extendedContext){let N=q2e(y.extendedContext,b);if(N)return d.log.info(`Family: using extended context model (1M+), tokens: ${g}`),{model:N,scenarioType:"extendedContext"};d.log.warn("Family: extendedContext model unavailable (fail pool), skipping")}let E=D&&D.input_tokens>S&&g>2e4,I=g>S;if((E||I)&&y.longContext){let N=q2e(y.longContext,b);if(N)return d.log.info(`Family: using long context model, tokens: ${g}`),{model:N,scenarioType:"longContext"};d.log.warn("Family: longContext model unavailable (fail pool), skipping")}if(Array.isArray(d.body.tools)&&d.body.tools.some(N=>N.type?.startsWith("web_search"))&&y.webSearch){let N=q2e(y.webSearch,b);if(N)return{model:N,scenarioType:"webSearch"};d.log.warn("Family: webSearch model unavailable (fail pool), skipping")}if(d.body.thinking&&y.think){let N=q2e(y.think,b);if(N)return{model:N,scenarioType:"think"};d.log.warn("Family: think model unavailable (fail pool), skipping")}if(y.default){let N=q2e(y.default,b);if(N)return{model:N,scenarioType:"default"};d.log.warn("Family: default model unavailable (fail pool), skipping")}return null}var HGt=async(d,g,y,b)=>{let D=await WIt(d,y),S=y.get("providers")||[],E=D||y.get("Router");if(d.body.model.includes(",")){let O=q2e(d.body.model,S);if(O)return{model:O,scenarioType:"default"};d.log.warn(`Explicit model ${d.body.model} unavailable (fail pool), trying alternatives`)}let I=VIt(d.body.model),N=E?.families?.[I||""];if(N){d.log.info(`Using model family routing for: ${I}`),d.modelFamily=I,d.familyFallback=N.fallback;let O=qGt(d,g,N,S,b);if(O)return O}let L=JGt(d.body.model,E?.models);if(L){let O=q2e(L,S);if(O)return d.log.info(`Using mapped model for ${d.body.model}: ${L}`),{model:O,scenarioType:"modelMapping"};d.log.warn(`Mapped model ${L} unavailable (fail pool), skipping`)}let R=E?.extendedContextThreshold||2e5;if(g>R&&E?.extendedContext)return d.log.info(`Using extended context (1M) model due to token count: ${g}, threshold: ${R}`),{model:E.extendedContext,scenarioType:"extendedContext"};let j=E?.longContextThreshold||6e4,Q=b&&b.input_tokens>j&&g>2e4,M=g>j;if((Q||M)&&E?.longContext)return d.log.info(`Using long context model due to token count: ${g}, threshold: ${j}`),{model:E.longContext,scenarioType:"longContext"};if(d.body?.system?.length>1&&d.body?.system[1]?.text?.startsWith("<CCR-SUBAGENT-MODEL>")){let O=d.body?.system[1].text.match(/<CCR-SUBAGENT-MODEL>(.*?)<\/CCR-SUBAGENT-MODEL>/s);if(O)return d.body.system[1].text=d.body.system[1].text.replace(`<CCR-SUBAGENT-MODEL>${O[1]}</CCR-SUBAGENT-MODEL>`,""),{model:O[1],scenarioType:"default"}}let U=y.get("Router");return d.body.model?.includes("claude")&&d.body.model?.includes("haiku")&&U?.background?(d.log.info(`Using background model for ${d.body.model}`),{model:U.background,scenarioType:"background"}):Array.isArray(d.body.tools)&&d.body.tools.some(O=>O.type?.startsWith("web_search"))&&E?.webSearch?{model:E.webSearch,scenarioType:"webSearch"}:d.body.thinking&&E?.think?(d.log.info(`Using think model for ${d.body.thinking}`),{model:E.think,scenarioType:"think"}):{model:E?.default,scenarioType:"default"}},Ewt=async(d,g,y)=>{let{configService:b,event:D}=y;if(d.originalModel=d.body.model,d.body.metadata?.user_id){let Q=d.body.metadata.user_id.split("_session_");Q.length>1&&(d.sessionId=Q[1])}let S=await WIt(d,b)||b.get("Router"),E=b.get("providers")||[],I=pZe.get(d.sessionId),{messages:N,system:L=[],tools:R}=d.body,j=b.get("REWRITE_SYSTEM_PROMPT");if(j&&L.length>1&&L[1]?.text?.includes("<env>")){let Q=await(0,_Ct.readFile)(j,"utf-8");L[1].text=`${Q}<env>${L[1].text.split("<env>").pop()}`}try{let[Q,M]=d.body.model.split(","),U=y.tokenizerService?.getTokenizerConfigForModel(Q,M),O;y.tokenizerService?O=(await y.tokenizerService.countTokens({messages:N,system:L,tools:R},U)).tokenCount:O=GIt(N,L,R),d.tokenCount=O;let q,J=b.get("CUSTOM_ROUTER_PATH");if(J)try{q=await wh(J)(d,b.getAll(),{event:D})}catch(H){d.log.error(`failed to load custom router: ${H.message}`)}if(q)d.scenarioType="default";else{let H=await HGt(d,O,b,I);q=H.model,d.scenarioType=H.scenarioType}if(S?.image&&q!==S.image&&$Gt(d)&&!zGt(q)){let H=q2e(S.image,E);H?(d.log.info(`Using image model fallback for ${q}`),q=H,d.scenarioType="image"):d.log.warn(`Image model ${S.image} unavailable (fail pool), keeping ${q}`)}d.body.model=q}catch(Q){d.log.error(`Error in router middleware: ${Q.message}`),d.body.model=S?.default,d.scenarioType="default"}},nZe=new fEt({max:1e3}),GGt=async d=>{if(nZe.has(d)){let g=nZe.get(d);return!g||g===""?null:g}try{let g=await(0,BTt.opendir)(_ft.CLAUDE_PROJECTS_DIR),y=[];for await(let S of g)S.isDirectory()&&y.push(S.name);let b=y.map(async S=>{let E=(0,dCt.join)(_ft.CLAUDE_PROJECTS_DIR,S,`${d}.jsonl`);try{return(await(0,BTt.stat)(E)).isFile()?S:null}catch{return null}}),D=await Promise.all(b);for(let S of D)if(S)return nZe.set(d,S),S;return nZe.set(d,""),null}catch(g){return console.error("Error searching for project by session:",g),nZe.set(d,""),null}},WGt=class{plugins=new Map;pluginInstances=new Map;registerPlugin(d,g={}){this.pluginInstances.set(d.name,d),this.plugins.set(d.name,{name:d.name,enabled:g.enabled!==!1,options:g})}async enablePlugin(d,g){let y=this.plugins.get(d),b=this.pluginInstances.get(d);if(!y||!b)throw new Error(`Plugin ${d} not found`);y.enabled&&await g.register(b.register,y.options)}async enablePlugins(d){for(let[g,y]of this.plugins)if(y.enabled)try{await this.enablePlugin(g,d)}catch(b){let D=b instanceof Error?b.message:String(b);d.log?.error(`Failed to enable plugin ${g}: ${D}`)}}getPlugins(){return Array.from(this.plugins.values())}getPlugin(d){return this.pluginInstances.get(d)}hasPlugin(d){return this.pluginInstances.has(d)}isPluginEnabled(d){return this.plugins.get(d)?.enabled||!1}setPluginEnabled(d,g){let y=this.plugins.get(d);y&&(y.enabled=g)}removePlugin(d){this.plugins.delete(d),this.pluginInstances.delete(d)}clear(){this.plugins.clear(),this.pluginInstances.clear()}},TCt=new WGt,VGt=Bfe(bzt(),1),KGt=class extends TransformStream{buffer="";currentEvent={};constructor(){super({transform:(d,g)=>{this.buffer+=d;let y=this.buffer.split(`
2067
2067
  `);this.buffer=y.pop()||"";for(let b of y){let D=this.processLine(b);D&&g.enqueue(D)}},flush:d=>{if(this.buffer.trim()){let g=[];this.processLine(this.buffer.trim(),g),g.forEach(y=>d.enqueue(y))}Object.keys(this.currentEvent).length>0&&d.enqueue(this.currentEvent)}})}processLine(d,g){if(!d.trim()){if(Object.keys(this.currentEvent).length>0){let y={...this.currentEvent};return this.currentEvent={},g?(g.push(y),null):y}return null}if(d.startsWith("event:"))this.currentEvent.event=d.slice(6).trim();else if(d.startsWith("data:")){let y=d.slice(5).trim();if(y==="[DONE]")this.currentEvent.data={type:"done"};else try{this.currentEvent.data=JSON.parse(y)}catch{this.currentEvent.data={raw:y,error:"JSON parse failed"}}}else d.startsWith("id:")?this.currentEvent.id=d.slice(3).trim():d.startsWith("retry:")&&(this.currentEvent.retry=parseInt(d.slice(6).trim()));return null}},ZYt=class extends TransformStream{constructor(){super({transform:(d,g)=>{let y="";d.event&&(y+=`event: ${d.event}
2068
2068
  `),d.id&&(y+=`id: ${d.id}
2069
2069
  `),d.retry&&(y+=`retry: ${d.retry}
@@ -2098,7 +2098,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
2098
2098
 
2099
2099
  Do not attempt to describe or analyze the image directly yourself.
2100
2100
  Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
2101
- Your response should consistently follow this rule whenever image-related analysis is requested.`});let y=d.body.messages.filter(D=>D.role==="user"&&Array.isArray(D.content)&&D.content.some(S=>S.type==="image"||Array.isArray(S.content)&&S.content.some(E=>E.type==="image"))),b=1;y.forEach(D=>{Array.isArray(D.content)&&D.content.forEach(S=>{S.type==="image"?(Wpt.storeImage(`${d.id}_Image#${b}`,S.source),S.type="text",delete S.source,S.text=`[Image #${b}]This is an image, if you need to view or analyze it, you need to extract the imageId`,b++):S.type==="text"&&S.text.includes("[Image #")?S.text=S.text.replace(/\[Image #\d+\]/g,""):S.type==="tool_result"&&Array.isArray(S.content)&&S.content.some(E=>E.type==="image")&&(Wpt.storeImage(`${d.id}_Image#${b}`,S.content[0].source),S.content=`[Image #${b}]This is an image, if you need to view or analyze it, you need to extract the imageId`,b++)})})}},NWt=new IWt,PWt=class{agents=new Map;registerAgent(d){this.agents.set(d.name,d)}getAgent(d){return this.agents.get(d)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let d=[];for(let g of this.agents.values())d.push(...g.tools.values());return d}},e4t=new PWt;e4t.registerAgent(NWt);var Wxt=e4t,BWt=require("node:events"),Nwt=require("node:perf_hooks");function OWt(){let{ProviderHealthStore:d}=TJt();return new d}var Pwt=new BWt.EventEmitter;function Bwt(d){if(d.usageSessionId)return d.usageSessionId;let g=d.headers?.["x-request-id"],y=Array.isArray(g)?g[0]:g;return d.usageSessionId=d.sessionId||(typeof y=="string"?y:void 0)||d.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,d.usageSessionId}function Vxt(d){return d.body?.model?Array.isArray(d.body.model)?d.body.model.join(","):d.body.model:Array.isArray(d.model)?d.model.join(","):d.model||""}async function LWt(){let d=(0,W6t.homedir)(),g=(0,V6t.join)(d,".claude.json");if(!(0,wJt.existsSync)(g)){let y={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,FJt.writeFile)(g,JSON.stringify(y,null,2))}}async function RWt(d,g){let y=g.plugins||g.Plugins||[];for(let b of y){let{name:D,enabled:S=!1,options:E={}}=b;switch(D){case"token-speed":TCt.registerPlugin(KIt,{enabled:S,outputHandlers:[{type:"temp-file",enabled:!0}],...E});break;default:console.warn(`Unknown plugin: ${D}`);break}}await TCt.enablePlugins(d)}async function t4t(d={}){await LWt(),await uEt();let g=await K6t(),y=g.Providers||g.providers||[],b=y&&y.length>0,D=g.HOST||"127.0.0.1";b?(D=g.HOST,g.APIKEY||(D="127.0.0.1")):(D="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let S=g.PORT||3456,E=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):S,I=Q=>(Q>9?"":"0")+Q,N=(Q,M)=>{let U;Q?typeof Q=="number"?U=new Date(Q):U=Q:U=new Date;let O=U.getFullYear()+""+I(U.getMonth()+1),q=I(U.getDate()),J=I(U.getHours()),H=I(U.getMinutes());return`./logs/ccr-${O}${q}${J}${H}${I(U.getSeconds())}${M?`_${M}`:""}.log`},L;d.logger!==void 0?L=d.logger:g.LOG!==!1?(g.LOG===void 0&&(g.LOG=!0),L={level:g.LOG_LEVEL||"debug",stream:CWt(N,{path:zxt.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):L=!1;let R=await(0,zxt.listPresets)(),j=await cWt({jsonPath:zxt.CONFIG_FILE,initialConfig:{providers:g.Providers||g.providers,HOST:D,PORT:E,LOG_FILE:(0,V6t.join)((0,W6t.homedir)(),".claude-code-router","claude-code-router.log")},logger:L});return await Promise.allSettled(R.map(async Q=>await j.registerNamespace(`/preset/${Q.name}`,Q.config))),await RWt(j,g),j.addHook("onRequest",async Q=>{new URL(`http://127.0.0.1${Q.url}`).pathname.endsWith("/v1/messages")&&!Q.requestStartTime&&(Q.requestStartTime=Nwt.performance.now())}),j.addHook("preHandler",async(Q,M)=>new Promise((U,O)=>{let q=J=>{J?O(J):U()};uWt(g)(Q,M,q).catch(O)})),j.addHook("preHandler",async(Q,M)=>{let U=new URL(`http://127.0.0.1${Q.url}`);Q.pathname=U.pathname,Q.pathname.endsWith("/v1/messages")&&Q.pathname!=="/v1/messages"&&(Q.preset=Q.pathname.replace("/v1/messages","").replace("/",""))}),j.addHook("preHandler",async(Q,M)=>{if(Q.pathname.endsWith("/v1/messages")){let U=[];for(let O of Wxt.getAllAgents())O.shouldHandle(Q,g)&&(U.push(O.name),O.reqHandler(Q,g),O.tools.size&&(Q.body?.tools?.length||(Q.body.tools=[]),Q.body.tools.unshift(...Array.from(O.tools.values()).map(q=>({name:q.name,description:q.description,input_schema:q.input_schema})))));U.length&&(Q.agents=U)}}),j.addHook("onError",async(Q,M,U)=>{Q.errorMessage=U?.message||U?.toString?.()||"Unknown error",Pwt.emit("onError",Q,M,U)}),j.addHook("onSend",(Q,M,U,O)=>{if(Q.pathname?.endsWith("/v1/messages")){let q=Bwt(Q);if(U instanceof ReadableStream){if(Q.agents){let ee=new AbortController,W=U.pipeThrough(new Gxt),se,_e=-1,oe="",fe="",le="",ve=[],Ae=[];return O(null,DWt(W,async(Fe,qe)=>{try{if(Fe.event==="content_block_start"&&Fe?.data?.content_block?.name){let Ke=Q.agents.find(Pe=>Wxt.getAgent(Pe)?.tools.get(Fe.data.content_block.name));if(Ke){se=Wxt.getAgent(Ke),_e=Fe.data.index,oe=Fe.data.content_block.name,le=Fe.data.content_block.id;return}}if(_e>-1&&Fe.data.index===_e&&Fe.data?.delta?.type==="input_json_delta"){fe+=Fe.data?.delta?.partial_json;return}if(_e>-1&&Fe.data.index===_e&&Fe.data.type==="content_block_stop"){try{let Ke=SWt.default.parse(fe);Ae.push({type:"tool_use",id:le,name:oe,input:Ke});let Pe=await se?.tools.get(oe)?.handler(Ke,{req:Q,config:g});ve.push({tool_use_id:le,type:"tool_result",content:Pe}),se=void 0,_e=-1,oe="",fe="",le=""}catch(Ke){console.log(Ke)}return}if(Fe.event==="message_delta"&&ve.length){Q.body.messages.push({role:"assistant",content:Ae}),Q.body.messages.push({role:"user",content:ve});let Ke=await fetch(`http://127.0.0.1:${g.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":g.APIKEY,"content-type":"application/json"},body:JSON.stringify(Q.body)});if(!Ke.ok)return;let Pe=Ke.body.pipeThrough(new Gxt).getReader();for(;;)try{let{value:We,done:rt}=await Pe.read();if(rt)break;let Rt=We;if(["message_start","message_stop"].includes(Rt.event))continue;if(!qe.desiredSize)break;qe.enqueue(Rt)}catch(We){if(We.name==="AbortError"||We.code==="ERR_STREAM_PREMATURE_CLOSE"){ee.abort();break}throw We}return}return Fe}catch(Ke){if(console.error("Unexpected error in stream processing:",Ke),Ke.code==="ERR_STREAM_PREMATURE_CLOSE"){ee.abort();return}throw Ke}}).pipeThrough(new EWt))}let[J,H]=U.tee();return(async ee=>{let W=ee.pipeThrough(new TextDecoderStream).pipeThrough(new Gxt).getReader();try{for(;;){let{done:se,value:_e}=await W.read();if(se)break;let oe=_e.event,fe=_e.data;if(fe?.usage){let le={...pZe.get(q)||{},...fe.usage};(fe.usage.cache_read_input_tokens||fe.usage.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:fe.usage.cache_read_input_tokens,cache_creation:fe.usage.cache_creation_input_tokens}),pZe.put(q,le)}}}catch(se){se.name==="AbortError"||se.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",se)}finally{W.releaseLock()}})(H),O(null,J)}if(pZe.put(q,U.usage),typeof U=="object")return U.error?O(U.error,null):O(U,null)}if(typeof U=="object"&&U.error)return O(U.error,null);O(null,U)}),j.addHook("onSend",async(Q,M,U)=>{if(Pwt.emit("onSend",Q,M,U),M.statusCode>=400&&Q.pathname?.endsWith("/v1/messages"))try{typeof U=="string"?Q.errorResponseBody=U:U&&typeof U=="object"&&(Q.errorResponseBody=JSON.stringify(U))}catch{}return U}),j.addHook("onResponse",async(Q,M)=>{if(Q.pathname?.endsWith("/v1/messages"))try{let U=Bwt(Q),O=pZe.get(U),q=lWt(U),J=OWt(),H,ee;if(M.statusCode>=400){H=Q.errorMessage||M.errorMessage||Q.error?.message||Q.error?.toString?.()||void 0,ee=Q.errorResponseBody;let W=Vxt(Q);J.recordFailure(Q.provider||"",W,H)}else{let W=Vxt(Q);J.recordSuccess(Q.provider||"",W)}iWt({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:U,provider:Q.provider||"",model:Vxt(Q),modelFamily:Q.modelFamily||"",scenarioType:Q.scenarioType||"default",stream:Q.body?.stream??!1,inputTokens:Q.tokenCount||0,outputTokens:O?.output_tokens||0,cacheReadInputTokens:O?.cache_read_input_tokens||0,cacheCreationInputTokens:O?.cache_creation_input_tokens||0,ttft:q.ttft,tokensPerSecond:q.tokensPerSecond,durationMs:Q.requestStartTime?Math.round(Nwt.performance.now()-Q.requestStartTime):0,status:M.statusCode<400?"success":"error",errorMessage:H,responseBody:ee})}catch(U){console.error("Usage tracking error:",U)}}),process.on("uncaughtException",Q=>{j.app.log.error("Uncaught exception:",Q)}),process.on("unhandledRejection",(Q,M)=>{j.app.log.error("Unhandled rejection at:",M,"reason:",Q)}),j}async function MWt(){let d=await t4t();d.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await d.start()}require.main===wEt&&MWt().catch(d=>{console.error("Failed to start server:",d),process.exit(1)});});async function o4t(d){try{let{stdout:g}=await a4t("npm view @wengine-ai/claude-code-router version"),y=g.trim();return{hasUpdate:jWt(y,d)>0,latestVersion:y,changelog:""}}catch(g){return console.error("Error checking for updates:",g),{hasUpdate:!1,latestVersion:d,changelog:""}}}async function s4t(){try{let{stdout:d,stderr:g}=await a4t("npm update -g @wengine-ai/claude-code-router");return g&&console.error("Update stderr:",g),console.log("Update stdout:",d),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(d){return console.error("Error performing update:",d),{success:!1,message:`Failed to perform update: ${d instanceof Error?d.message:"Unknown error"}`}}}function jWt(d,g){let y=d.split(".").map(Number),b=g.split(".").map(Number);for(let D=0;D<Math.max(y.length,b.length);D++){let S=D<y.length?y[D]:0,E=D<b.length?b[D]:0;if(S>E)return 1;if(S<E)return-1}return 0}var n4t,i4t,a4t,l4t=Ipt(()=>{"use strict";n4t=require("child_process"),i4t=require("util"),a4t=(0,i4t.promisify)(n4t.exec)});var Vft,FEt=Ipt(()=>{Vft="2.0.21"});var NEt=Pm(IEt=>{"use strict";Object.defineProperty(IEt,"__esModule",{value:!0});var c4t=require("child_process"),UWt=1024*1024,u4t={exec(d,g){let y={maxBuffer:2*UWt,windowsHide:!0};(0,c4t.exec)(d,y,g)},spawn(d,g,y){return(0,c4t.spawn)(d,g,y)},stripLine(d,g){let y=0;for(;g-- >0;){let b=d.indexOf(`
2101
+ Your response should consistently follow this rule whenever image-related analysis is requested.`});let y=d.body.messages.filter(D=>D.role==="user"&&Array.isArray(D.content)&&D.content.some(S=>S.type==="image"||Array.isArray(S.content)&&S.content.some(E=>E.type==="image"))),b=1;y.forEach(D=>{Array.isArray(D.content)&&D.content.forEach(S=>{S.type==="image"?(Wpt.storeImage(`${d.id}_Image#${b}`,S.source),S.type="text",delete S.source,S.text=`[Image #${b}]This is an image, if you need to view or analyze it, you need to extract the imageId`,b++):S.type==="text"&&S.text.includes("[Image #")?S.text=S.text.replace(/\[Image #\d+\]/g,""):S.type==="tool_result"&&Array.isArray(S.content)&&S.content.some(E=>E.type==="image")&&(Wpt.storeImage(`${d.id}_Image#${b}`,S.content[0].source),S.content=`[Image #${b}]This is an image, if you need to view or analyze it, you need to extract the imageId`,b++)})})}},NWt=new IWt,PWt=class{agents=new Map;registerAgent(d){this.agents.set(d.name,d)}getAgent(d){return this.agents.get(d)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let d=[];for(let g of this.agents.values())d.push(...g.tools.values());return d}},e4t=new PWt;e4t.registerAgent(NWt);var Wxt=e4t,BWt=require("node:events"),Nwt=require("node:perf_hooks");function OWt(){let{ProviderHealthStore:d}=TJt();return new d}var Pwt=new BWt.EventEmitter;function Bwt(d){if(d.usageSessionId)return d.usageSessionId;let g=d.headers?.["x-request-id"],y=Array.isArray(g)?g[0]:g;return d.usageSessionId=d.sessionId||(typeof y=="string"?y:void 0)||d.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,d.usageSessionId}function Vxt(d){return d.body?.model?Array.isArray(d.body.model)?d.body.model.join(","):d.body.model:Array.isArray(d.model)?d.model.join(","):d.model||""}async function LWt(){let d=(0,W6t.homedir)(),g=(0,V6t.join)(d,".claude.json");if(!(0,wJt.existsSync)(g)){let y={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,FJt.writeFile)(g,JSON.stringify(y,null,2))}}async function RWt(d,g){let y=g.plugins||g.Plugins||[];for(let b of y){let{name:D,enabled:S=!1,options:E={}}=b;switch(D){case"token-speed":TCt.registerPlugin(KIt,{enabled:S,outputHandlers:[{type:"temp-file",enabled:!0}],...E});break;default:console.warn(`Unknown plugin: ${D}`);break}}await TCt.enablePlugins(d)}async function t4t(d={}){await LWt(),await uEt();let g=await K6t(),y=g.Providers||g.providers||[],b=y&&y.length>0,D=g.HOST||"127.0.0.1";b?(D=g.HOST,g.APIKEY||(D="127.0.0.1")):(D="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let S=g.PORT||3456,E=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):S,I=Q=>(Q>9?"":"0")+Q,N=(Q,M)=>{let U;Q?typeof Q=="number"?U=new Date(Q):U=Q:U=new Date;let O=U.getFullYear()+""+I(U.getMonth()+1),q=I(U.getDate()),J=I(U.getHours()),H=I(U.getMinutes());return`./logs/ccr-${O}${q}${J}${H}${I(U.getSeconds())}${M?`_${M}`:""}.log`},L;d.logger!==void 0?L=d.logger:g.LOG!==!1?(g.LOG===void 0&&(g.LOG=!0),L={level:g.LOG_LEVEL||"debug",stream:CWt(N,{path:zxt.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):L=!1;let R=await(0,zxt.listPresets)(),j=await cWt({jsonPath:zxt.CONFIG_FILE,initialConfig:{providers:g.Providers||g.providers,HOST:D,PORT:E,LOG_FILE:(0,V6t.join)((0,W6t.homedir)(),".claude-code-router","claude-code-router.log")},logger:L});return await Promise.allSettled(R.map(async Q=>await j.registerNamespace(`/preset/${Q.name}`,Q.config))),await RWt(j,g),j.addHook("onRequest",async Q=>{new URL(`http://127.0.0.1${Q.url}`).pathname.endsWith("/v1/messages")&&!Q.requestStartTime&&(Q.requestStartTime=Nwt.performance.now())}),j.addHook("preHandler",async(Q,M)=>new Promise((U,O)=>{let q=J=>{J?O(J):U()};uWt(g)(Q,M,q).catch(O)})),j.addHook("preHandler",async(Q,M)=>{let U=new URL(`http://127.0.0.1${Q.url}`);Q.pathname=U.pathname,Q.pathname.endsWith("/v1/messages")&&Q.pathname!=="/v1/messages"&&(Q.preset=Q.pathname.replace("/v1/messages","").replace("/",""))}),j.addHook("preHandler",async(Q,M)=>{if(Q.pathname.endsWith("/v1/messages")){let U=[];for(let O of Wxt.getAllAgents())O.shouldHandle(Q,g)&&(U.push(O.name),O.reqHandler(Q,g),O.tools.size&&(Q.body?.tools?.length||(Q.body.tools=[]),Q.body.tools.unshift(...Array.from(O.tools.values()).map(q=>({name:q.name,description:q.description,input_schema:q.input_schema})))));U.length&&(Q.agents=U)}}),j.addHook("onError",async(Q,M,U)=>{Q.errorMessage=U?.message||U?.toString?.()||"Unknown error",Pwt.emit("onError",Q,M,U)}),j.addHook("onSend",(Q,M,U,O)=>{if(Q.pathname?.endsWith("/v1/messages")){let q=Bwt(Q);if(U instanceof ReadableStream){if(Q.agents){let ee=new AbortController,W=U.pipeThrough(new Gxt),se,_e=-1,oe="",fe="",le="",ve=[],Ae=[];return O(null,DWt(W,async(Fe,qe)=>{try{if(Fe.event==="content_block_start"&&Fe?.data?.content_block?.name){let Ke=Q.agents.find(Pe=>Wxt.getAgent(Pe)?.tools.get(Fe.data.content_block.name));if(Ke){se=Wxt.getAgent(Ke),_e=Fe.data.index,oe=Fe.data.content_block.name,le=Fe.data.content_block.id;return}}if(_e>-1&&Fe.data.index===_e&&Fe.data?.delta?.type==="input_json_delta"){fe+=Fe.data?.delta?.partial_json;return}if(_e>-1&&Fe.data.index===_e&&Fe.data.type==="content_block_stop"){try{let Ke=SWt.default.parse(fe);Ae.push({type:"tool_use",id:le,name:oe,input:Ke});let Pe=await se?.tools.get(oe)?.handler(Ke,{req:Q,config:g});ve.push({tool_use_id:le,type:"tool_result",content:Pe}),se=void 0,_e=-1,oe="",fe="",le=""}catch(Ke){console.log(Ke)}return}if(Fe.event==="message_delta"&&ve.length){Q.body.messages.push({role:"assistant",content:Ae}),Q.body.messages.push({role:"user",content:ve});let Ke=await fetch(`http://127.0.0.1:${g.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":g.APIKEY,"content-type":"application/json"},body:JSON.stringify(Q.body)});if(!Ke.ok)return;let Pe=Ke.body.pipeThrough(new Gxt).getReader();for(;;)try{let{value:We,done:rt}=await Pe.read();if(rt)break;let Rt=We;if(["message_start","message_stop"].includes(Rt.event))continue;if(!qe.desiredSize)break;qe.enqueue(Rt)}catch(We){if(We.name==="AbortError"||We.code==="ERR_STREAM_PREMATURE_CLOSE"){ee.abort();break}throw We}return}return Fe}catch(Ke){if(console.error("Unexpected error in stream processing:",Ke),Ke.code==="ERR_STREAM_PREMATURE_CLOSE"){ee.abort();return}throw Ke}}).pipeThrough(new EWt))}let[J,H]=U.tee();return(async ee=>{let W=ee.pipeThrough(new TextDecoderStream).pipeThrough(new Gxt).getReader();try{for(;;){let{done:se,value:_e}=await W.read();if(se)break;let oe=_e.event,fe=_e.data;if(fe?.usage){let le={...pZe.get(q)||{},...fe.usage};(fe.usage.cache_read_input_tokens||fe.usage.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:fe.usage.cache_read_input_tokens,cache_creation:fe.usage.cache_creation_input_tokens}),pZe.put(q,le)}}}catch(se){se.name==="AbortError"||se.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",se)}finally{W.releaseLock()}})(H),O(null,J)}if(pZe.put(q,U.usage),typeof U=="object")return U.error?O(U.error,null):O(U,null)}if(typeof U=="object"&&U.error)return O(U.error,null);O(null,U)}),j.addHook("onSend",async(Q,M,U)=>{if(Pwt.emit("onSend",Q,M,U),M.statusCode>=400&&Q.pathname?.endsWith("/v1/messages"))try{typeof U=="string"?Q.errorResponseBody=U:U&&typeof U=="object"&&(Q.errorResponseBody=JSON.stringify(U))}catch{}return U}),j.addHook("onResponse",async(Q,M)=>{if(Q.pathname?.endsWith("/v1/messages"))try{let U=Bwt(Q),O=pZe.get(U),q=lWt(U),J=OWt(),H,ee;if(M.statusCode>=400){H=Q.errorMessage||M.errorMessage||Q.error?.message||Q.error?.toString?.()||void 0,ee=Q.errorResponseBody;let W=Vxt(Q);J.recordFailure(Q.provider||"",W,H)}else{let W=Vxt(Q);J.recordSuccess(Q.provider||"",W)}iWt({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:U,provider:Q.provider||"",originalModel:Q.originalModel||Q.body?.model||"",model:Vxt(Q),modelFamily:Q.modelFamily||"",scenarioType:Q.scenarioType||"default",stream:Q.body?.stream??!1,inputTokens:Q.tokenCount||0,outputTokens:O?.output_tokens||0,cacheReadInputTokens:O?.cache_read_input_tokens||0,cacheCreationInputTokens:O?.cache_creation_input_tokens||0,ttft:q.ttft,tokensPerSecond:q.tokensPerSecond,durationMs:Q.requestStartTime?Math.round(Nwt.performance.now()-Q.requestStartTime):0,status:M.statusCode<400?"success":"error",errorMessage:H,responseBody:ee})}catch(U){console.error("Usage tracking error:",U)}}),process.on("uncaughtException",Q=>{j.app.log.error("Uncaught exception:",Q)}),process.on("unhandledRejection",(Q,M)=>{j.app.log.error("Unhandled rejection at:",M,"reason:",Q)}),j}async function MWt(){let d=await t4t();d.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await d.start()}require.main===wEt&&MWt().catch(d=>{console.error("Failed to start server:",d),process.exit(1)});});async function o4t(d){try{let{stdout:g}=await a4t("npm view @wengine-ai/claude-code-router version"),y=g.trim();return{hasUpdate:jWt(y,d)>0,latestVersion:y,changelog:""}}catch(g){return console.error("Error checking for updates:",g),{hasUpdate:!1,latestVersion:d,changelog:""}}}async function s4t(){try{let{stdout:d,stderr:g}=await a4t("npm update -g @wengine-ai/claude-code-router");return g&&console.error("Update stderr:",g),console.log("Update stdout:",d),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(d){return console.error("Error performing update:",d),{success:!1,message:`Failed to perform update: ${d instanceof Error?d.message:"Unknown error"}`}}}function jWt(d,g){let y=d.split(".").map(Number),b=g.split(".").map(Number);for(let D=0;D<Math.max(y.length,b.length);D++){let S=D<y.length?y[D]:0,E=D<b.length?b[D]:0;if(S>E)return 1;if(S<E)return-1}return 0}var n4t,i4t,a4t,l4t=Ipt(()=>{"use strict";n4t=require("child_process"),i4t=require("util"),a4t=(0,i4t.promisify)(n4t.exec)});var Vft,FEt=Ipt(()=>{Vft="2.0.22"});var NEt=Pm(IEt=>{"use strict";Object.defineProperty(IEt,"__esModule",{value:!0});var c4t=require("child_process"),UWt=1024*1024,u4t={exec(d,g){let y={maxBuffer:2*UWt,windowsHide:!0};(0,c4t.exec)(d,y,g)},spawn(d,g,y){return(0,c4t.spawn)(d,g,y)},stripLine(d,g){let y=0;for(;g-- >0;){let b=d.indexOf(`
2102
2102
  `,y);b>=0&&(y=b+1)}return y>0?d.substring(y):d},split(d,g){let y=d.trim().split(/\s+/);return y.length>g&&(y[g-1]=y.slice(g-1).join(" ")),y},extractColumns(d,g,y){let b=d.split(/(\r\n|\n|\r)/),D=[];return y||(y=Math.max.apply(null,g)+1),b.forEach(S=>{let E=u4t.split(S,y),I=[];g.forEach(N=>{I.push(E[N]||"")}),D.push(I)}),D},parseTable(d){let g=d.split(/(\r\n\r\n|\r\n\n|\n\r\n|\n\n)/).filter(y=>y&&y.trim().length>0).map(y=>y.split(/(\r\n|\n|\r)/).filter(b=>b.trim().length>0));return g.forEach(y=>{for(let b=0;y[b];){let D=y[b];D.startsWith(" ")?(y[b-1]+=D.trimLeft(),y.splice(b,1)):b+=1}}),g.map(y=>{let b={};return y.forEach(D=>{let S=D.indexOf(":"),E=D.slice(0,S).trim();b[E]=D.slice(S+1).trim()}),b})}};IEt.default=u4t});var d4t=Pm((_4t,Kft)=>{(function(d,g){"use strict";typeof define=="function"&&define.amd?define(g):typeof Kft=="object"&&Kft.exports?Kft.exports=g():d.log=g()})(_4t,function(){"use strict";var d=function(){},g="undefined",y=typeof window!==g&&typeof window.navigator!==g&&/Trident\/|MSIE /.test(window.navigator.userAgent),b=["trace","debug","info","warn","error"],D={},S=null;function E(U,O){var q=U[O];if(typeof q.bind=="function")return q.bind(U);try{return Function.prototype.bind.call(q,U)}catch{return function(){return Function.prototype.apply.apply(q,[U,arguments])}}}function I(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function N(U){return U==="debug"&&(U="log"),typeof console===g?!1:U==="trace"&&y?I:console[U]!==void 0?E(console,U):console.log!==void 0?E(console,"log"):d}function L(){for(var U=this.getLevel(),O=0;O<b.length;O++){var q=b[O];this[q]=O<U?d:this.methodFactory(q,U,this.name)}if(this.log=this.debug,typeof console===g&&U<this.levels.SILENT)return"No console available for logging"}function R(U){return function(){typeof console!==g&&(L.call(this),this[U].apply(this,arguments))}}function j(U,O,q){return N(U)||R.apply(this,arguments)}function Q(U,O){var q=this,J,H,ee,W="loglevel";typeof U=="string"?W+=":"+U:typeof U=="symbol"&&(W=void 0);function se(ve){var Ae=(b[ve]||"silent").toUpperCase();if(!(typeof window===g||!W)){try{window.localStorage[W]=Ae;return}catch{}try{window.document.cookie=encodeURIComponent(W)+"="+Ae+";"}catch{}}}function _e(){var ve;if(!(typeof window===g||!W)){try{ve=window.localStorage[W]}catch{}if(typeof ve===g)try{var Ae=window.document.cookie,Fe=encodeURIComponent(W),qe=Ae.indexOf(Fe+"=");qe!==-1&&(ve=/^([^;]+)/.exec(Ae.slice(qe+Fe.length+1))[1])}catch{}return q.levels[ve]===void 0&&(ve=void 0),ve}}function oe(){if(!(typeof window===g||!W)){try{window.localStorage.removeItem(W)}catch{}try{window.document.cookie=encodeURIComponent(W)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function fe(ve){var Ae=ve;if(typeof Ae=="string"&&q.levels[Ae.toUpperCase()]!==void 0&&(Ae=q.levels[Ae.toUpperCase()]),typeof Ae=="number"&&Ae>=0&&Ae<=q.levels.SILENT)return Ae;throw new TypeError("log.setLevel() called with invalid level: "+ve)}q.name=U,q.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},q.methodFactory=O||j,q.getLevel=function(){return ee??H??J},q.setLevel=function(ve,Ae){return ee=fe(ve),Ae!==!1&&se(ee),L.call(q)},q.setDefaultLevel=function(ve){H=fe(ve),_e()||q.setLevel(ve,!1)},q.resetLevel=function(){ee=null,oe(),L.call(q)},q.enableAll=function(ve){q.setLevel(q.levels.TRACE,ve)},q.disableAll=function(ve){q.setLevel(q.levels.SILENT,ve)},q.rebuild=function(){if(S!==q&&(J=fe(S.getLevel())),L.call(q),S===q)for(var ve in D)D[ve].rebuild()},J=fe(S?S.getLevel():"WARN");var le=_e();le!=null&&(ee=fe(le)),L.call(q)}S=new Q,S.getLogger=function(O){if(typeof O!="symbol"&&typeof O!="string"||O==="")throw new TypeError("You must supply a name when creating a logger.");var q=D[O];return q||(q=D[O]=new Q(O,S.methodFactory)),q};var M=typeof window!==g?window.log:void 0;return S.noConflict=function(){return typeof window!==g&&window.log===S&&(window.log=M),S},S.getLoggers=function(){return D},S.default=S,S})});var PEt=Pm(QZe=>{"use strict";var JWt=QZe&&QZe.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(QZe,"__esModule",{value:!0});var $Wt=JWt(d4t());QZe.default=$Wt.default});var m4t=Pm(Are=>{"use strict";var zWt=Are&&Are.__createBinding||(Object.create?(function(d,g,y,b){b===void 0&&(b=y);var D=Object.getOwnPropertyDescriptor(g,y);(!D||("get"in D?!g.__esModule:D.writable||D.configurable))&&(D={enumerable:!0,get:function(){return g[y]}}),Object.defineProperty(d,b,D)}):(function(d,g,y,b){b===void 0&&(b=y),d[b]=g[y]})),qWt=Are&&Are.__setModuleDefault||(Object.create?(function(d,g){Object.defineProperty(d,"default",{enumerable:!0,value:g})}):function(d,g){d.default=g}),p4t=Are&&Are.__importStar||(function(){var d=function(g){return d=Object.getOwnPropertyNames||function(y){var b=[];for(var D in y)Object.prototype.hasOwnProperty.call(y,D)&&(b[b.length]=D);return b},d(g)};return function(g){if(g&&g.__esModule)return g;var y={};if(g!=null)for(var b=d(g),D=0;D<b.length;D++)b[D]!=="default"&&zWt(y,g,b[D]);return qWt(y,g),y}})(),f4t=Are&&Are.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(Are,"__esModule",{value:!0});var HWt=p4t(require("os")),Yft=p4t(require("fs")),rG=f4t(NEt()),GWt=f4t(PEt()),WWt=d=>new Promise((g,y)=>{Yft.existsSync(d)?g():Yft.mkdir(d,b=>{b?y(b):g()})}),kRe={darwin(d){return new Promise((g,y)=>{rG.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(b,D,S){if(b)y(b);else{let E=S.toString().trim();if(E){y(new Error(E));return}let I=rG.default.stripLine(D.toString(),1),N=I.slice(0,I.indexOf(`
2103
2103
  `)),L=rG.default.stripLine(I,1),R=N.indexOf("rxbytes")>=0?10:8,j=rG.default.extractColumns(L,[0,3,R],10).filter(Q=>!!String(Q[0]).match(/^(udp|tcp)/)).find(Q=>{let M=String(Q[1]).match(/\.(\d+)$/);return!!(M&&M[1]===String(d))});j&&j[2].length?g(parseInt(j[2],10)):y(new Error(`pid of port (${d}) not found`))}})})},linux(d){return new Promise((g,y)=>{rG.default.exec("netstat -tunlp",function(D,S,E){if(D)y(D);else{let I=E.toString().trim();I&&GWt.default.warn(I);let N=rG.default.stripLine(S.toString(),2),L=rG.default.extractColumns(N,[3,6],7).find(R=>{let j=String(R[0]).match(/:(\d+)$/);return!!(j&&j[1]===String(d))});if(L&&L[1]){let R=L[1].split("/",1)[0];R.length?g(parseInt(R,10)):y(new Error(`pid of port (${d}) not found`))}else y(new Error(`pid of port (${d}) not found`))}})})},win32(d){return new Promise((g,y)=>{rG.default.exec("netstat -ano",function(b,D,S){if(b)y(b);else{let E=S.toString().trim();if(E){y(new Error(E));return}let I=rG.default.stripLine(D.toString(),4),N=rG.default.extractColumns(I,[1,4],5).find(L=>{let R=String(L[0]).match(/:(\d+)$/);return!!(R&&R[1]===String(d))});N&&N[1].length&&parseInt(N[1],10)>0?g(parseInt(N[1],10)):y(new Error(`pid of port (${d}) not found`))}})})},android(d){return new Promise((g,y)=>{let b=HWt.tmpdir()+"/.find-process",D=b+"/"+process.pid,S='netstat -tunp >> "'+D+'"';WWt(b).then(()=>{rG.default.exec(S,()=>{Yft.readFile(D,"utf8",(E,I)=>{if(Yft.unlink(D,()=>{}),E)y(E);else{I=rG.default.stripLine(I,2);let N=rG.default.extractColumns(I,[3,6],7).find(L=>{let R=String(L[0]).match(/:(\d+)$/);return!!(R&&R[1]===String(d))});if(N&&N[1]){let L=N[1].split("/",1)[0];L.length?g(parseInt(L,10)):y(new Error(`pid of port (${d}) not found`))}else y(new Error(`pid of port (${d}) not found`))}})})})})}};kRe.freebsd=kRe.darwin;kRe.sunos=kRe.darwin;function VWt(d){let g=process.platform;return new Promise((y,b)=>{if(!(g in kRe))return b(new Error(`platform ${g} is unsupported`));let D=kRe[g];D(d).then(y,b)})}Are.default=VWt});var y4t=Pm(vre=>{"use strict";var KWt=vre&&vre.__createBinding||(Object.create?(function(d,g,y,b){b===void 0&&(b=y);var D=Object.getOwnPropertyDescriptor(g,y);(!D||("get"in D?!g.__esModule:D.writable||D.configurable))&&(D={enumerable:!0,get:function(){return g[y]}}),Object.defineProperty(d,b,D)}):(function(d,g,y,b){b===void 0&&(b=y),d[b]=g[y]})),YWt=vre&&vre.__setModuleDefault||(Object.create?(function(d,g){Object.defineProperty(d,"default",{enumerable:!0,value:g})}):function(d,g){d.default=g}),ZWt=vre&&vre.__importStar||(function(){var d=function(g){return d=Object.getOwnPropertyNames||function(y){var b=[];for(var D in y)Object.prototype.hasOwnProperty.call(y,D)&&(b[b.length]=D);return b},d(g)};return function(g){if(g&&g.__esModule)return g;var y={};if(g!=null)for(var b=d(g),D=0;D<b.length;D++)b[D]!=="default"&&KWt(y,g,b[D]);return YWt(y,g),y}})(),XWt=vre&&vre.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(vre,"__esModule",{value:!0});var Zft=ZWt(require("path")),K2e=XWt(NEt());function BEt(d,g){return g?d&&d.match?d.match(g)!==null:!1:!0}function h4t(d){let g=d.split(Zft.sep),y=g[g.length-1];y&&(g[g.length-1]=y.split(" ")[0]);let b=[];for(let D of g){let S=D.indexOf(" -");if(S>=0){b.push(D.substring(0,S).trim());break}else if(D.endsWith(" ")){b.push(D.trim());break}b.push(D)}return b.join(Zft.sep)}function g4t(d){if(process.platform==="darwin"){let g=d.indexOf(".app/");if(g>=0)return Zft.basename(d.substring(0,g))}return Zft.basename(d)}var SFe={darwin(d){return new Promise((g,y)=>{let b;"pid"in d&&d.pid!==void 0?b=`ps -p ${d.pid} -ww -o pid,ppid,uid,gid,args`:b="ps ax -ww -o pid,ppid,uid,gid,args",K2e.default.exec(b,function(D,S,E){if(D)"pid"in d&&d.pid!==void 0?g([]):y(D);else{let I=E.toString().trim();if(I){y(new Error(I));return}let N=K2e.default.stripLine(S.toString(),1),R=K2e.default.extractColumns(N,[0,1,2,3,4],5).filter(j=>j[0]&&d.pid!==void 0?j[0]===String(d.pid):j[4]&&d.name?BEt(j[4],d.name):!!j[0]).map(j=>{let Q=String(j[4]),M=h4t(Q);return{pid:parseInt(j[0],10),ppid:parseInt(j[1],10),uid:parseInt(j[2],10),gid:parseInt(j[3],10),name:g4t(M),bin:M,cmd:j[4]}});d.config.strict&&d.name&&(R=R.filter(j=>j.name===d.name)),g(R)}})})},win32(d){return new Promise((g,y)=>{let b="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",D=[],S=K2e.default.spawn("powershell.exe",["/c",b],{detached:!1,windowsHide:!0});S.stdout.on("data",E=>{D.push(E.toString())}),S.on("error",E=>{y(new Error("Command '"+b+"' failed with reason: "+E.toString()))}),S.on("close",E=>{if(E!==0)return y(new Error("Command '"+b+"' terminated with code: "+E));let I=K2e.default.parseTable(D.join("")).filter(N=>{if(d.pid!==void 0)return N.ProcessId===String(d.pid);if(d.name){let L=N.Name||"";return d.config.strict?L===d.name||L.endsWith(".exe")&&L.slice(0,-4)===d.name:BEt(N.CommandLine||L,d.name)}else return!0}).map(N=>({pid:parseInt(N.ProcessId,10),ppid:parseInt(N.ParentProcessId,10),bin:N.ExecutablePath,name:N.Name||"",cmd:N.CommandLine}));g(I)})})},android(d){return new Promise((g,y)=>{K2e.default.exec("ps",function(D,S,E){if(D)d.pid!==void 0?g([]):y(D);else{let I=E.toString().trim();if(I){y(new Error(I));return}let N=K2e.default.stripLine(S.toString(),1),R=K2e.default.extractColumns(N,[0,3],4).filter(j=>j[0]&&d.pid!==void 0?j[0]===String(d.pid):j[1]&&d.name?BEt(j[1],d.name):!!j[0]).map(j=>{let Q=String(j[1]),M=h4t(Q);return{pid:parseInt(j[0],10),ppid:0,name:g4t(M),bin:M,cmd:j[1]}});d.config.strict&&d.name&&(R=R.filter(j=>j.name===d.name)),g(R)}})})}};SFe.linux=SFe.darwin;SFe.sunos=SFe.darwin;SFe.freebsd=SFe.darwin;function eVt(d){let g=process.platform,y=SFe[g];return y?y(d):Promise.reject(new Error(`Platform "${g}" is not supported`))}vre.default=eVt});var v4t=Pm(UZe=>{"use strict";var LEt=UZe&&UZe.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(UZe,"__esModule",{value:!0});var tVt=LEt(m4t()),A4t=LEt(y4t()),rVt=LEt(PEt()),OEt={port(d,g){return(0,tVt.default)(d).then(y=>OEt.pid(y,g),()=>[])},pid(d,g){return(0,A4t.default)({pid:d,config:g})},name(d,g){return(0,A4t.default)({name:d,config:g,skipSelf:!0})}};function nVt(d,g,y){let b=Object.assign({logLevel:"warn",strict:typeof y=="boolean"?y:!1},typeof y=="object"?y:{});return b.logLevel&&rVt.default.setLevel(b.logLevel),new Promise((D,S)=>{if(!(d in OEt))S(new Error(`do not support find by "${d}"`));else{let E=/^\d+$/.test(String(g));d==="pid"&&!E?S(new Error("pid must be a number")):d==="port"&&!E?S(new Error("port must be a number")):OEt[d](g,b).then(D,S)}})}UZe.default=nVt});var x4t=Pm(b4t=>{"use strict";Object.defineProperty(b4t,"__esModule",{value:!0})});var C4t=Pm(bre=>{"use strict";var iVt=bre&&bre.__createBinding||(Object.create?(function(d,g,y,b){b===void 0&&(b=y);var D=Object.getOwnPropertyDescriptor(g,y);(!D||("get"in D?!g.__esModule:D.writable||D.configurable))&&(D={enumerable:!0,get:function(){return g[y]}}),Object.defineProperty(d,b,D)}):(function(d,g,y,b){b===void 0&&(b=y),d[b]=g[y]})),aVt=bre&&bre.__exportStar||function(d,g){for(var y in d)y!=="default"&&!Object.prototype.hasOwnProperty.call(g,y)&&iVt(g,d,y)},oVt=bre&&bre.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(bre,"__esModule",{value:!0});bre.default=void 0;var sVt=v4t();Object.defineProperty(bre,"default",{enumerable:!0,get:function(){return oVt(sVt).default}});aVt(x4t(),bre)});function D4t(){let d=0;(0,pR.existsSync)(qO.REFERENCE_COUNT_FILE)&&(d=parseInt((0,pR.readFileSync)(qO.REFERENCE_COUNT_FILE,"utf-8"))||0),d++,(0,pR.writeFileSync)(qO.REFERENCE_COUNT_FILE,d.toString())}function REt(){let d=0;(0,pR.existsSync)(qO.REFERENCE_COUNT_FILE)&&(d=parseInt((0,pR.readFileSync)(qO.REFERENCE_COUNT_FILE,"utf-8"))||0),d=Math.max(0,d-1),(0,pR.writeFileSync)(qO.REFERENCE_COUNT_FILE,d.toString())}function S4t(){return(0,pR.existsSync)(qO.REFERENCE_COUNT_FILE)&&parseInt((0,pR.readFileSync)(qO.REFERENCE_COUNT_FILE,"utf-8"))||0}function kFe(){if(!(0,pR.existsSync)(qO.PID_FILE))return!1;let d;try{let g=(0,pR.readFileSync)(qO.PID_FILE,"utf-8");if(d=parseInt(g,10),isNaN(d))return Lfe(),!1}catch{return!1}try{if(process.platform==="win32"){let g=`tasklist /FI "PID eq ${d}"`;return(0,E4t.execSync)(g,{stdio:"pipe"}).toString().includes(d.toString())?!0:(Lfe(),!1)}else return process.kill(d,0),!0}catch{return Lfe(),!1}}function Lfe(){if((0,pR.existsSync)(qO.PID_FILE))try{require("fs").unlinkSync(qO.PID_FILE)}catch{}}function k4t(){if(!(0,pR.existsSync)(qO.PID_FILE))return null;try{let d=parseInt((0,pR.readFileSync)(qO.PID_FILE,"utf-8"));return isNaN(d)?null:d}catch{return null}}async function Xft(){let d=k4t(),g=await kFe(),b=(await D$()).PORT||3456;return{running:g,pid:d,port:b,endpoint:`http://127.0.0.1:${b}`,pidFile:qO.PID_FILE,referenceCount:S4t()}}async function T4t(){if(S4t()===0){let g=k4t();if(g&&await kFe())try{process.kill(g,"SIGTERM")}catch{}}}var pR,qO,lVt,E4t,JZe=Ipt(()=>{"use strict";pR=require("fs"),qO=Gy(hY());Y2e();lVt=Gy(C4t()),E4t=require("child_process")});var L4t={};Jkt(L4t,{backupConfigFile:()=>B4t,getSettingsPath:()=>JEt,initConfig:()=>cVt,initDir:()=>P4t,readConfigFile:()=>D$,restartService:()=>UEt,run:()=>QEt,writeConfigFile:()=>O4t});var S$,w4t,Z2e,F4t,I4t,FF,N4t,TRe,jEt,MEt,$Ze,P4t,D$,B4t,O4t,cVt,QEt,UEt,JEt,Y2e=Ipt(()=>{"use strict";S$=Gy(require("node:fs/promises")),w4t=Gy(Lpt()),Z2e=Gy(require("node:path")),F4t=require("node:crypto"),I4t=Gy(require("node:os")),FF=Gy(hY()),N4t=Gy(r4t()),TRe=require("fs");l4t();FEt();jEt=require("child_process");JZe();MEt=d=>{if(typeof d=="string")return d.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g,(g,y,b)=>{let D=y||b;return process.env[D]||g});if(Array.isArray(d))return d.map(MEt);if(d!==null&&typeof d=="object"){let g={};for(let[y,b]of Object.entries(d))g[y]=MEt(b);return g}return d},$Ze=async d=>{try{await S$.default.access(d)}catch{await S$.default.mkdir(d,{recursive:!0})}},P4t=async()=>{await $Ze(FF.HOME_DIR),await $Ze(FF.PLUGINS_DIR),await $Ze(FF.PRESETS_DIR),await $Ze(Z2e.default.join(FF.HOME_DIR,"logs"))},D$=async()=>{try{let d=await S$.default.readFile(FF.CONFIG_FILE,"utf-8");try{let g=w4t.default.parse(d);return MEt(g)}catch(g){console.error(`Failed to parse config file at ${FF.CONFIG_FILE}`),console.error("Error details:",g.message),console.error("Please check your config file syntax."),process.exit(1)}}catch(d){if(d.code==="ENOENT")try{await P4t();let g=await B4t();g&&console.log(`Backed up existing configuration file to ${g}`);let y={PORT:3456,Providers:[],Router:{}};return await O4t(y),console.log("Created minimal default configuration file at ~/.claude-code-router/config.json"),console.log("Please edit this file with your actual configuration."),y}catch(g){console.error("Failed to create default configuration:",g.message),process.exit(1)}else console.error(`Failed to read config file at ${FF.CONFIG_FILE}`),console.error("Error details:",d.message),process.exit(1)}},B4t=async()=>{try{if(await S$.default.access(FF.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let d=new Date().toISOString().replace(/[:.]/g,"-"),g=`${FF.CONFIG_FILE}.${d}.bak`;await S$.default.copyFile(FF.CONFIG_FILE,g);try{let y=Z2e.default.dirname(FF.CONFIG_FILE),b=Z2e.default.basename(FF.CONFIG_FILE),S=(await S$.default.readdir(y)).filter(E=>E.startsWith(b)&&E.endsWith(".bak")).sort().reverse();if(S.length>3)for(let E=3;E<S.length;E++){let I=Z2e.default.join(y,S[E]);await S$.default.unlink(I)}}catch(y){console.warn("Failed to clean up old backups:",y)}return g}}catch(d){console.error("Failed to backup config file:",d)}return null},O4t=async d=>{await $Ze(FF.HOME_DIR);let g=`${JSON.stringify(d,null,2)}`;await S$.default.writeFile(FF.CONFIG_FILE,g)},cVt=async()=>{let d=await D$();return Object.assign(process.env,d),d},QEt=async(d=[])=>{if(kFe()){console.log("claude-code-router server is running");return}let y=await(0,N4t.getServer)(),b=y.app;(0,TRe.writeFileSync)(FF.PID_FILE,process.pid.toString()),b.post("/api/update/perform",async()=>await s4t()),b.get("/api/update/check",async()=>await o4t(Vft)),b.post("/api/restart",async()=>(setTimeout(async()=>{(0,jEt.spawn)("ccr",["restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await y.start()},UEt=async()=>{try{let y=parseInt((0,TRe.readFileSync)(FF.PID_FILE,"utf-8"));if(process.kill(y),Lfe(),(0,TRe.existsSync)(FF.REFERENCE_COUNT_FILE))try{await S$.default.unlink(FF.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),Lfe()}console.log("Starting claude code router service...");let d=Z2e.default.join(__dirname,"cli.js"),g=(0,jEt.spawn)("node",[d,"start"],{detached:!0,stdio:"ignore"});g.on("error",y=>{throw console.error("Failed to start service:",y),y}),g.unref(),console.log("\u2705 Service started successfully in the background.")},JEt=async d=>{let g=(0,F4t.createHash)("sha256").update(d,"utf-8").digest("hex"),y=Z2e.default.join(I4t.default.tmpdir(),"claude-code-router"),b=`ccr-settings-${g}.json`,D=Z2e.default.join(y,b);try{await S$.default.access(y)}catch{await S$.default.mkdir(y,{recursive:!0})}try{return await S$.default.access(D),D}catch{return await S$.default.writeFile(D,d,"utf-8"),D}}});var qZe=Pm((glr,$4t)=>{var _Vt=require("node:tty"),dVt=_Vt?.WriteStream?.prototype?.hasColors?.()??!1,fv=(d,g)=>{if(!dVt)return D=>D;let y=`\x1B[${d}m`,b=`\x1B[${g}m`;return D=>{let S=D+"",E=S.indexOf(b);if(E===-1)return y+S+b;let I=y,N=0,R=(g===22?b:"")+y;for(;E!==-1;)I+=S.slice(N,E)+R,N=E+b.length,E=S.indexOf(b,N);return I+=S.slice(N)+b,I}},H2={};H2.reset=fv(0,0);H2.bold=fv(1,22);H2.dim=fv(2,22);H2.italic=fv(3,23);H2.underline=fv(4,24);H2.overline=fv(53,55);H2.inverse=fv(7,27);H2.hidden=fv(8,28);H2.strikethrough=fv(9,29);H2.black=fv(30,39);H2.red=fv(31,39);H2.green=fv(32,39);H2.yellow=fv(33,39);H2.blue=fv(34,39);H2.magenta=fv(35,39);H2.cyan=fv(36,39);H2.white=fv(37,39);H2.gray=fv(90,39);H2.bgBlack=fv(40,49);H2.bgRed=fv(41,49);H2.bgGreen=fv(42,49);H2.bgYellow=fv(43,49);H2.bgBlue=fv(44,49);H2.bgMagenta=fv(45,49);H2.bgCyan=fv(46,49);H2.bgWhite=fv(47,49);H2.bgGray=fv(100,49);H2.redBright=fv(91,39);H2.greenBright=fv(92,39);H2.yellowBright=fv(93,39);H2.blueBright=fv(94,39);H2.magentaBright=fv(95,39);H2.cyanBright=fv(96,39);H2.whiteBright=fv(97,39);H2.bgRedBright=fv(101,49);H2.bgGreenBright=fv(102,49);H2.bgYellowBright=fv(103,49);H2.bgBlueBright=fv(104,49);H2.bgMagentaBright=fv(105,49);H2.bgCyanBright=fv(106,49);H2.bgWhiteBright=fv(107,49);$4t.exports=H2});var K4t=Pm((Llr,V4t)=>{"use strict";V4t.exports=vVt;function AVt(d){let g={defaultWidth:0,output:process.stdout,tty:require("tty")};return d?(Object.keys(g).forEach(function(y){d[y]||(d[y]=g[y])}),d):g}function vVt(d){let g=AVt(d);if(g.output.getWindowSize)return g.output.getWindowSize()[0]||g.defaultWidth;if(g.tty.getWindowSize)return g.tty.getWindowSize()[1]||g.defaultWidth;if(g.output.columns)return g.output.columns;if(process.env.CLI_WIDTH){let y=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(y)&&y!==0)return y}return g.defaultWidth}});var Z4t=Pm((Rlr,Y4t)=>{"use strict";Y4t.exports=({onlyFirst:d=!1}={})=>{let g=["[\\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(g,d?void 0:"g")}});var lmt=Pm((Mlr,X4t)=>{"use strict";var bVt=Z4t();X4t.exports=d=>typeof d=="string"?d.replace(bVt(),""):d});var tNt=Pm((jlr,HEt)=>{"use strict";var eNt=d=>Number.isNaN(d)?!1:d>=4352&&(d<=4447||d===9001||d===9002||11904<=d&&d<=12871&&d!==12351||12880<=d&&d<=19903||19968<=d&&d<=42182||43360<=d&&d<=43388||44032<=d&&d<=55203||63744<=d&&d<=64255||65040<=d&&d<=65049||65072<=d&&d<=65131||65281<=d&&d<=65376||65504<=d&&d<=65510||110592<=d&&d<=110593||127488<=d&&d<=127569||131072<=d&&d<=262141);HEt.exports=eNt;HEt.exports.default=eNt});var nNt=Pm((Qlr,rNt)=>{"use strict";rNt.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 aNt=Pm((Ulr,GEt)=>{"use strict";var xVt=lmt(),CVt=tNt(),EVt=nNt(),iNt=d=>{if(typeof d!="string"||d.length===0||(d=xVt(d),d.length===0))return 0;d=d.replace(EVt()," ");let g=0;for(let y=0;y<d.length;y++){let b=d.codePointAt(y);b<=31||b>=127&&b<=159||b>=768&&b<=879||(b>65535&&y++,g+=CVt(b)?2:1)}return g};GEt.exports=iNt;GEt.exports.default=iNt});var sNt=Pm((Jlr,oNt)=>{"use strict";oNt.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 WEt=Pm(($lr,cNt)=>{var HZe=sNt(),lNt={};for(let d of Object.keys(HZe))lNt[HZe[d]]=d;var D0={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"]}};cNt.exports=D0;for(let d of Object.keys(D0)){if(!("channels"in D0[d]))throw new Error("missing channels property: "+d);if(!("labels"in D0[d]))throw new Error("missing channel labels property: "+d);if(D0[d].labels.length!==D0[d].channels)throw new Error("channel and label counts mismatch: "+d);let{channels:g,labels:y}=D0[d];delete D0[d].channels,delete D0[d].labels,Object.defineProperty(D0[d],"channels",{value:g}),Object.defineProperty(D0[d],"labels",{value:y})}D0.rgb.hsl=function(d){let g=d[0]/255,y=d[1]/255,b=d[2]/255,D=Math.min(g,y,b),S=Math.max(g,y,b),E=S-D,I,N;S===D?I=0:g===S?I=(y-b)/E:y===S?I=2+(b-g)/E:b===S&&(I=4+(g-y)/E),I=Math.min(I*60,360),I<0&&(I+=360);let L=(D+S)/2;return S===D?N=0:L<=.5?N=E/(S+D):N=E/(2-S-D),[I,N*100,L*100]};D0.rgb.hsv=function(d){let g,y,b,D,S,E=d[0]/255,I=d[1]/255,N=d[2]/255,L=Math.max(E,I,N),R=L-Math.min(E,I,N),j=function(Q){return(L-Q)/6/R+1/2};return R===0?(D=0,S=0):(S=R/L,g=j(E),y=j(I),b=j(N),E===L?D=b-y:I===L?D=1/3+g-b:N===L&&(D=2/3+y-g),D<0?D+=1:D>1&&(D-=1)),[D*360,S*100,L*100]};D0.rgb.hwb=function(d){let g=d[0],y=d[1],b=d[2],D=D0.rgb.hsl(d)[0],S=1/255*Math.min(g,Math.min(y,b));return b=1-1/255*Math.max(g,Math.max(y,b)),[D,S*100,b*100]};D0.rgb.cmyk=function(d){let g=d[0]/255,y=d[1]/255,b=d[2]/255,D=Math.min(1-g,1-y,1-b),S=(1-g-D)/(1-D)||0,E=(1-y-D)/(1-D)||0,I=(1-b-D)/(1-D)||0;return[S*100,E*100,I*100,D*100]};function DVt(d,g){return(d[0]-g[0])**2+(d[1]-g[1])**2+(d[2]-g[2])**2}D0.rgb.keyword=function(d){let g=lNt[d];if(g)return g;let y=1/0,b;for(let D of Object.keys(HZe)){let S=HZe[D],E=DVt(d,S);E<y&&(y=E,b=D)}return b};D0.keyword.rgb=function(d){return HZe[d]};D0.rgb.xyz=function(d){let g=d[0]/255,y=d[1]/255,b=d[2]/255;g=g>.04045?((g+.055)/1.055)**2.4:g/12.92,y=y>.04045?((y+.055)/1.055)**2.4:y/12.92,b=b>.04045?((b+.055)/1.055)**2.4:b/12.92;let D=g*.4124+y*.3576+b*.1805,S=g*.2126+y*.7152+b*.0722,E=g*.0193+y*.1192+b*.9505;return[D*100,S*100,E*100]};D0.rgb.lab=function(d){let g=D0.rgb.xyz(d),y=g[0],b=g[1],D=g[2];y/=95.047,b/=100,D/=108.883,y=y>.008856?y**(1/3):7.787*y+16/116,b=b>.008856?b**(1/3):7.787*b+16/116,D=D>.008856?D**(1/3):7.787*D+16/116;let S=116*b-16,E=500*(y-b),I=200*(b-D);return[S,E,I]};D0.hsl.rgb=function(d){let g=d[0]/360,y=d[1]/100,b=d[2]/100,D,S,E;if(y===0)return E=b*255,[E,E,E];b<.5?D=b*(1+y):D=b+y-b*y;let I=2*b-D,N=[0,0,0];for(let L=0;L<3;L++)S=g+1/3*-(L-1),S<0&&S++,S>1&&S--,6*S<1?E=I+(D-I)*6*S:2*S<1?E=D:3*S<2?E=I+(D-I)*(2/3-S)*6:E=I,N[L]=E*255;return N};D0.hsl.hsv=function(d){let g=d[0],y=d[1]/100,b=d[2]/100,D=y,S=Math.max(b,.01);b*=2,y*=b<=1?b:2-b,D*=S<=1?S:2-S;let E=(b+y)/2,I=b===0?2*D/(S+D):2*y/(b+y);return[g,I*100,E*100]};D0.hsv.rgb=function(d){let g=d[0]/60,y=d[1]/100,b=d[2]/100,D=Math.floor(g)%6,S=g-Math.floor(g),E=255*b*(1-y),I=255*b*(1-y*S),N=255*b*(1-y*(1-S));switch(b*=255,D){case 0:return[b,N,E];case 1:return[I,b,E];case 2:return[E,b,N];case 3:return[E,I,b];case 4:return[N,E,b];case 5:return[b,E,I]}};D0.hsv.hsl=function(d){let g=d[0],y=d[1]/100,b=d[2]/100,D=Math.max(b,.01),S,E;E=(2-y)*b;let I=(2-y)*D;return S=y*D,S/=I<=1?I:2-I,S=S||0,E/=2,[g,S*100,E*100]};D0.hwb.rgb=function(d){let g=d[0]/360,y=d[1]/100,b=d[2]/100,D=y+b,S;D>1&&(y/=D,b/=D);let E=Math.floor(6*g),I=1-b;S=6*g-E,(E&1)!==0&&(S=1-S);let N=y+S*(I-y),L,R,j;switch(E){default:case 6:case 0:L=I,R=N,j=y;break;case 1:L=N,R=I,j=y;break;case 2:L=y,R=I,j=N;break;case 3:L=y,R=N,j=I;break;case 4:L=N,R=y,j=I;break;case 5:L=I,R=y,j=N;break}return[L*255,R*255,j*255]};D0.cmyk.rgb=function(d){let g=d[0]/100,y=d[1]/100,b=d[2]/100,D=d[3]/100,S=1-Math.min(1,g*(1-D)+D),E=1-Math.min(1,y*(1-D)+D),I=1-Math.min(1,b*(1-D)+D);return[S*255,E*255,I*255]};D0.xyz.rgb=function(d){let g=d[0]/100,y=d[1]/100,b=d[2]/100,D,S,E;return D=g*3.2406+y*-1.5372+b*-.4986,S=g*-.9689+y*1.8758+b*.0415,E=g*.0557+y*-.204+b*1.057,D=D>.0031308?1.055*D**(1/2.4)-.055:D*12.92,S=S>.0031308?1.055*S**(1/2.4)-.055:S*12.92,E=E>.0031308?1.055*E**(1/2.4)-.055:E*12.92,D=Math.min(Math.max(0,D),1),S=Math.min(Math.max(0,S),1),E=Math.min(Math.max(0,E),1),[D*255,S*255,E*255]};D0.xyz.lab=function(d){let g=d[0],y=d[1],b=d[2];g/=95.047,y/=100,b/=108.883,g=g>.008856?g**(1/3):7.787*g+16/116,y=y>.008856?y**(1/3):7.787*y+16/116,b=b>.008856?b**(1/3):7.787*b+16/116;let D=116*y-16,S=500*(g-y),E=200*(y-b);return[D,S,E]};D0.lab.xyz=function(d){let g=d[0],y=d[1],b=d[2],D,S,E;S=(g+16)/116,D=y/500+S,E=S-b/200;let I=S**3,N=D**3,L=E**3;return S=I>.008856?I:(S-16/116)/7.787,D=N>.008856?N:(D-16/116)/7.787,E=L>.008856?L:(E-16/116)/7.787,D*=95.047,S*=100,E*=108.883,[D,S,E]};D0.lab.lch=function(d){let g=d[0],y=d[1],b=d[2],D;D=Math.atan2(b,y)*360/2/Math.PI,D<0&&(D+=360);let E=Math.sqrt(y*y+b*b);return[g,E,D]};D0.lch.lab=function(d){let g=d[0],y=d[1],D=d[2]/360*2*Math.PI,S=y*Math.cos(D),E=y*Math.sin(D);return[g,S,E]};D0.rgb.ansi16=function(d,g=null){let[y,b,D]=d,S=g===null?D0.rgb.hsv(d)[2]:g;if(S=Math.round(S/50),S===0)return 30;let E=30+(Math.round(D/255)<<2|Math.round(b/255)<<1|Math.round(y/255));return S===2&&(E+=60),E};D0.hsv.ansi16=function(d){return D0.rgb.ansi16(D0.hsv.rgb(d),d[2])};D0.rgb.ansi256=function(d){let g=d[0],y=d[1],b=d[2];return g===y&&y===b?g<8?16:g>248?231:Math.round((g-8)/247*24)+232:16+36*Math.round(g/255*5)+6*Math.round(y/255*5)+Math.round(b/255*5)};D0.ansi16.rgb=function(d){let g=d%10;if(g===0||g===7)return d>50&&(g+=3.5),g=g/10.5*255,[g,g,g];let y=(~~(d>50)+1)*.5,b=(g&1)*y*255,D=(g>>1&1)*y*255,S=(g>>2&1)*y*255;return[b,D,S]};D0.ansi256.rgb=function(d){if(d>=232){let S=(d-232)*10+8;return[S,S,S]}d-=16;let g,y=Math.floor(d/36)/5*255,b=Math.floor((g=d%36)/6)/5*255,D=g%6/5*255;return[y,b,D]};D0.rgb.hex=function(d){let y=(((Math.round(d[0])&255)<<16)+((Math.round(d[1])&255)<<8)+(Math.round(d[2])&255)).toString(16).toUpperCase();return"000000".substring(y.length)+y};D0.hex.rgb=function(d){let g=d.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!g)return[0,0,0];let y=g[0];g[0].length===3&&(y=y.split("").map(I=>I+I).join(""));let b=parseInt(y,16),D=b>>16&255,S=b>>8&255,E=b&255;return[D,S,E]};D0.rgb.hcg=function(d){let g=d[0]/255,y=d[1]/255,b=d[2]/255,D=Math.max(Math.max(g,y),b),S=Math.min(Math.min(g,y),b),E=D-S,I,N;return E<1?I=S/(1-E):I=0,E<=0?N=0:D===g?N=(y-b)/E%6:D===y?N=2+(b-g)/E:N=4+(g-y)/E,N/=6,N%=1,[N*360,E*100,I*100]};D0.hsl.hcg=function(d){let g=d[1]/100,y=d[2]/100,b=y<.5?2*g*y:2*g*(1-y),D=0;return b<1&&(D=(y-.5*b)/(1-b)),[d[0],b*100,D*100]};D0.hsv.hcg=function(d){let g=d[1]/100,y=d[2]/100,b=g*y,D=0;return b<1&&(D=(y-b)/(1-b)),[d[0],b*100,D*100]};D0.hcg.rgb=function(d){let g=d[0]/360,y=d[1]/100,b=d[2]/100;if(y===0)return[b*255,b*255,b*255];let D=[0,0,0],S=g%1*6,E=S%1,I=1-E,N=0;switch(Math.floor(S)){case 0:D[0]=1,D[1]=E,D[2]=0;break;case 1:D[0]=I,D[1]=1,D[2]=0;break;case 2:D[0]=0,D[1]=1,D[2]=E;break;case 3:D[0]=0,D[1]=I,D[2]=1;break;case 4:D[0]=E,D[1]=0,D[2]=1;break;default:D[0]=1,D[1]=0,D[2]=I}return N=(1-y)*b,[(y*D[0]+N)*255,(y*D[1]+N)*255,(y*D[2]+N)*255]};D0.hcg.hsv=function(d){let g=d[1]/100,y=d[2]/100,b=g+y*(1-g),D=0;return b>0&&(D=g/b),[d[0],D*100,b*100]};D0.hcg.hsl=function(d){let g=d[1]/100,b=d[2]/100*(1-g)+.5*g,D=0;return b>0&&b<.5?D=g/(2*b):b>=.5&&b<1&&(D=g/(2*(1-b))),[d[0],D*100,b*100]};D0.hcg.hwb=function(d){let g=d[1]/100,y=d[2]/100,b=g+y*(1-g);return[d[0],(b-g)*100,(1-b)*100]};D0.hwb.hcg=function(d){let g=d[1]/100,b=1-d[2]/100,D=b-g,S=0;return D<1&&(S=(b-D)/(1-D)),[d[0],D*100,S*100]};D0.apple.rgb=function(d){return[d[0]/65535*255,d[1]/65535*255,d[2]/65535*255]};D0.rgb.apple=function(d){return[d[0]/255*65535,d[1]/255*65535,d[2]/255*65535]};D0.gray.rgb=function(d){return[d[0]/100*255,d[0]/100*255,d[0]/100*255]};D0.gray.hsl=function(d){return[0,0,d[0]]};D0.gray.hsv=D0.gray.hsl;D0.gray.hwb=function(d){return[0,100,d[0]]};D0.gray.cmyk=function(d){return[0,0,0,d[0]]};D0.gray.lab=function(d){return[d[0],0,0]};D0.gray.hex=function(d){let g=Math.round(d[0]/100*255)&255,b=((g<<16)+(g<<8)+g).toString(16).toUpperCase();return"000000".substring(b.length)+b};D0.rgb.gray=function(d){return[(d[0]+d[1]+d[2])/3/255*100]}});var _Nt=Pm((zlr,uNt)=>{var cmt=WEt();function SVt(){let d={},g=Object.keys(cmt);for(let y=g.length,b=0;b<y;b++)d[g[b]]={distance:-1,parent:null};return d}function kVt(d){let g=SVt(),y=[d];for(g[d].distance=0;y.length;){let b=y.pop(),D=Object.keys(cmt[b]);for(let S=D.length,E=0;E<S;E++){let I=D[E],N=g[I];N.distance===-1&&(N.distance=g[b].distance+1,N.parent=b,y.unshift(I))}}return g}function TVt(d,g){return function(y){return g(d(y))}}function wVt(d,g){let y=[g[d].parent,d],b=cmt[g[d].parent][d],D=g[d].parent;for(;g[D].parent;)y.unshift(g[D].parent),b=TVt(cmt[g[D].parent][D],b),D=g[D].parent;return b.conversion=y,b}uNt.exports=function(d){let g=kVt(d),y={},b=Object.keys(g);for(let D=b.length,S=0;S<D;S++){let E=b[S];g[E].parent!==null&&(y[E]=wVt(E,g))}return y}});var pNt=Pm((qlr,dNt)=>{var VEt=WEt(),FVt=_Nt(),IRe={},IVt=Object.keys(VEt);function NVt(d){let g=function(...y){let b=y[0];return b==null?b:(b.length>1&&(y=b),d(y))};return"conversion"in d&&(g.conversion=d.conversion),g}function PVt(d){let g=function(...y){let b=y[0];if(b==null)return b;b.length>1&&(y=b);let D=d(y);if(typeof D=="object")for(let S=D.length,E=0;E<S;E++)D[E]=Math.round(D[E]);return D};return"conversion"in d&&(g.conversion=d.conversion),g}IVt.forEach(d=>{IRe[d]={},Object.defineProperty(IRe[d],"channels",{value:VEt[d].channels}),Object.defineProperty(IRe[d],"labels",{value:VEt[d].labels});let g=FVt(d);Object.keys(g).forEach(b=>{let D=g[b];IRe[d][b]=PVt(D),IRe[d][b].raw=NVt(D)})});dNt.exports=IRe});var ANt=Pm((Hlr,yNt)=>{"use strict";var fNt=(d,g)=>(...y)=>`\x1B[${d(...y)+g}m`,mNt=(d,g)=>(...y)=>{let b=d(...y);return`\x1B[${38+g};5;${b}m`},hNt=(d,g)=>(...y)=>{let b=d(...y);return`\x1B[${38+g};2;${b[0]};${b[1]};${b[2]}m`},umt=d=>d,gNt=(d,g,y)=>[d,g,y],NRe=(d,g,y)=>{Object.defineProperty(d,g,{get:()=>{let b=y();return Object.defineProperty(d,g,{value:b,enumerable:!0,configurable:!0}),b},enumerable:!0,configurable:!0})},KEt,PRe=(d,g,y,b)=>{KEt===void 0&&(KEt=pNt());let D=b?10:0,S={};for(let[E,I]of Object.entries(KEt)){let N=E==="ansi16"?"ansi":E;E===g?S[N]=d(y,D):typeof I=="object"&&(S[N]=d(I[g],D))}return S};function BVt(){let d=new Map,g={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]}};g.color.gray=g.color.blackBright,g.bgColor.bgGray=g.bgColor.bgBlackBright,g.color.grey=g.color.blackBright,g.bgColor.bgGrey=g.bgColor.bgBlackBright;for(let[y,b]of Object.entries(g)){for(let[D,S]of Object.entries(b))g[D]={open:`\x1B[${S[0]}m`,close:`\x1B[${S[1]}m`},b[D]=g[D],d.set(S[0],S[1]);Object.defineProperty(g,y,{value:b,enumerable:!1})}return Object.defineProperty(g,"codes",{value:d,enumerable:!1}),g.color.close="\x1B[39m",g.bgColor.close="\x1B[49m",NRe(g.color,"ansi",()=>PRe(fNt,"ansi16",umt,!1)),NRe(g.color,"ansi256",()=>PRe(mNt,"ansi256",umt,!1)),NRe(g.color,"ansi16m",()=>PRe(hNt,"rgb",gNt,!1)),NRe(g.bgColor,"ansi",()=>PRe(fNt,"ansi16",umt,!0)),NRe(g.bgColor,"ansi256",()=>PRe(mNt,"ansi256",umt,!0)),NRe(g.bgColor,"ansi16m",()=>PRe(hNt,"rgb",gNt,!0)),g}Object.defineProperty(yNt,"exports",{enumerable:!0,get:BVt})});var xNt=Pm((Glr,bNt)=>{"use strict";var GZe=aNt(),OVt=lmt(),LVt=ANt(),ZEt=new Set(["\x1B","\x9B"]),RVt=39,vNt=d=>`${ZEt.values().next().value}[${d}m`,MVt=d=>d.split(" ").map(g=>GZe(g)),YEt=(d,g,y)=>{let b=[...g],D=!1,S=GZe(OVt(d[d.length-1]));for(let[E,I]of b.entries()){let N=GZe(I);if(S+N<=y?d[d.length-1]+=I:(d.push(I),S=0),ZEt.has(I))D=!0;else if(D&&I==="m"){D=!1;continue}D||(S+=N,S===y&&E<b.length-1&&(d.push(""),S=0))}!S&&d[d.length-1].length>0&&d.length>1&&(d[d.length-2]+=d.pop())},jVt=d=>{let g=d.split(" "),y=g.length;for(;y>0&&!(GZe(g[y-1])>0);)y--;return y===g.length?d:g.slice(0,y).join(" ")+g.slice(y).join("")},QVt=(d,g,y={})=>{if(y.trim!==!1&&d.trim()==="")return"";let b="",D="",S,E=MVt(d),I=[""];for(let[N,L]of d.split(" ").entries()){y.trim!==!1&&(I[I.length-1]=I[I.length-1].trimLeft());let R=GZe(I[I.length-1]);if(N!==0&&(R>=g&&(y.wordWrap===!1||y.trim===!1)&&(I.push(""),R=0),(R>0||y.trim===!1)&&(I[I.length-1]+=" ",R++)),y.hard&&E[N]>g){let j=g-R,Q=1+Math.floor((E[N]-j-1)/g);Math.floor((E[N]-1)/g)<Q&&I.push(""),YEt(I,L,g);continue}if(R+E[N]>g&&R>0&&E[N]>0){if(y.wordWrap===!1&&R<g){YEt(I,L,g);continue}I.push("")}if(R+E[N]>g&&y.wordWrap===!1){YEt(I,L,g);continue}I[I.length-1]+=L}y.trim!==!1&&(I=I.map(jVt)),b=I.join(`
2104
2104
  `);for(let[N,L]of[...b].entries()){if(D+=L,ZEt.has(L)){let j=parseFloat(/\d[^m]*/.exec(b.slice(N,N+4)));S=j===RVt?null:j}let R=LVt.codes.get(Number(S));S&&R&&(b[N+1]===`