@wengine-ai/claude-code-router 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +3 -3
  2. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -579,7 +579,7 @@ https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys`};var m=
579
579
  ${this.toMarkdown(n,t+1)}`:`${r}- ${n}`).join(`
580
580
  `):typeof e=="object"&&e!==null?Object.entries(e).map(([n,s])=>typeof s=="object"&&s!==null?`${r}${n}:
581
581
  ${this.toMarkdown(s,t+1)}`:`${r}${n}: ${s}`).join(`
582
- `):`${r}${e}`}async output(e,t={}){try{let r=this.formatData(e,t);switch(this.config.level||"log"){case"info":console.info(r);break;case"warn":console.warn(r);break;case"error":console.error(r);break;case"debug":console.debug(r);break;case"log":default:console.log(r);break}return!0}catch(r){return console.error("[ConsoleOutputHandler] Output failed:",r),!1}}}}),EC,mC=Nr(()=>{"use strict";EC=class{type="webhook";config;defaultTimeout=3e4;constructor(e){if(!e.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...e}}buildHeaders(){let e={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(e.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let t=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");e.Authorization=`Basic ${t}`}break;case"custom":this.config.auth.custom&&(e[this.config.auth.custom.header]=this.config.auth.custom.value);break}return e}buildBody(e,t){let{format:r="json",timestamp:n=!0,prefix:s,metadata:o}=t||{},i={data:e};return n&&(i.timestamp=new Date().toISOString()),s&&(i.prefix=s),o&&Object.keys(o).length>0&&(i.metadata=o),i}async sendRequest(e,t,r,n,s){let o=new AbortController,i=setTimeout(()=>o.abort(),s);try{let a=await fetch(e,{method:t,headers:r,body:JSON.stringify(n),signal:o.signal});if(clearTimeout(i),!a.ok)throw new Error(`HTTP ${a.status}: ${a.statusText}`);return a}catch(a){throw clearTimeout(i),a}}delay(e){return new Promise(t=>setTimeout(t,e))}async sendWithRetry(e,t,r,n,s,o){let i=null;for(let a=1;a<=o.maxAttempts;a++)try{return await this.sendRequest(e,t,r,n,s)}catch(u){if(i=u,a===o.maxAttempts)break;let c=o.backoffMs*Math.pow(2,a-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${a}/${o.maxAttempts}), retrying in ${c}ms...`,u.message),await this.delay(c)}throw i}async output(e,t={}){let r=t.timeout||this.defaultTimeout;try{let n=this.buildHeaders(),s=this.buildBody(e,t),o=await this.sendWithRetry(this.config.url,this.config.method,n,s,r,this.config.retry);return!0}catch(n){let s=n instanceof Error?n.message:String(n);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${s}`),!1;throw new Error(`Webhook output failed: ${s}`)}}}}),yC,CC=Nr(()=>{"use strict";yC=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,v_.tmpdir)();this.baseDir=(0,tg.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,Ah.existsSync)(this.baseDir)||(0,Ah.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(e){try{let t=e.match(/_session_([a-f0-9-]+)/i);return t?t[1]:null}catch{return null}}getFilePath(e){let t=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",n;if(this.config.includeTimestamp){let s=Date.now();n=`${t}-${e}-${s}${r}`}else n=`${t}-${e}${r}`;return(0,tg.join)(this.baseDir,n)}async output(e,t={}){try{let r=t.metadata?.sessionId;if(!r)return!1;let n={...e,timestamp:Date.now(),sessionId:r},s=this.getFilePath(r);return(0,Ah.writeFileSync)(s,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),wg,za,tT=Nr(()=>{"use strict";gC(),mC(),CC(),wg=class{handlers=new Map;defaultOptions={};registerHandler(e,t){this.handlers.set(e,t)}registerHandlers(e){for(let t of e)if(t.enabled!==!1)try{let r=this.createHandler(t),n=t.type+"_"+Date.now();this.registerHandler(n,r)}catch(r){console.error(`[OutputManager] Failed to register ${t.type} handler:`,r)}}createHandler(e){switch(e.type){case"console":return new pC(e.config);case"webhook":return new EC(e.config);case"temp-file":return new yC(e.config);default:throw new Error(`Unknown output handler type: ${e.type}`)}}unregisterHandler(e){return this.handlers.delete(e)}getHandler(e){return this.handlers.get(e)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(e){this.defaultOptions={...this.defaultOptions,...e}}getDefaultOptions(){return{...this.defaultOptions}}async output(e,t){let r={...this.defaultOptions,...t},n={success:[],failed:[]},s=Array.from(this.handlers.entries()).map(async([o,i])=>{try{await i.output(e,r)?n.success.push(o):n.failed.push(o)}catch(a){console.error(`[OutputManager] Handler ${o} failed:`,a),n.failed.push(o)}});return await Promise.all(s),n}async outputTo(e,t,r){let n={...this.defaultOptions,...r},s={success:[],failed:[]},o=e.map(async i=>{let a=this.handlers.get(i);if(!a){console.warn(`[OutputManager] Handler ${i} not found`),s.failed.push(i);return}try{await a.output(t,n)?s.success.push(i):s.failed.push(i)}catch(u){console.error(`[OutputManager] Handler ${i} failed:`,u),s.failed.push(i)}});return await Promise.all(o),s}async outputToType(e,t,r){let n=Array.from(this.handlers.entries()).filter(([s,o])=>o.type===e).map(([s])=>s);return this.outputTo(n,t,r)}},za=new wg}),rT=vs(sy(),1),bg=class{config={};options;constructor(e={jsonPath:"./config.json"}){this.options={envPath:e.envPath||".env",jsonPath:e.jsonPath,useEnvFile:!1,useJsonFile:e.useJsonFile!==!1,useEnvironmentVariables:e.useEnvironmentVariables!==!1,...e},this.loadConfig()}loadConfig(){this.options.useJsonFile&&this.options.jsonPath&&this.loadJsonConfig(),this.options.initialConfig&&(this.config={...this.config,...this.options.initialConfig}),this.options.useEnvFile&&this.loadEnvConfig(),this.config.LOG_FILE&&(process.env.LOG_FILE=this.config.LOG_FILE),this.config.LOG&&(process.env.LOG=this.config.LOG)}loadJsonConfig(){if(!this.options.jsonPath)return;let e=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,rg.join)(process.cwd(),this.options.jsonPath);if((0,hh.existsSync)(e))try{let t=(0,hh.readFileSync)(e,"utf-8"),r=rT.default.parse(t);this.config={...this.config,...r},console.log(`Loaded JSON config from: ${e}`)}catch(t){console.warn(`Failed to load JSON config from ${e}:`,t)}else console.warn(`JSON config file not found: ${e}`)}loadEnvConfig(){let e=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,rg.join)(process.cwd(),this.options.envPath);if((0,hh.existsSync)(e))try{let t=(0,Q_.config)({path:e});t.parsed&&(this.config={...this.config,...this.parseEnvConfig(t.parsed)})}catch(t){console.warn(`Failed to load .env config from ${e}:`,t)}}loadEnvironmentVariables(){let e=this.parseEnvConfig(process.env);this.config={...this.config,...e}}parseEnvConfig(e){let t={};return Object.assign(t,e),t}isAbsolutePath(e){return e.startsWith("/")||e.includes(":")}get(e,t){let r=this.config[e];return r!==void 0?r:t}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(e){return this.config[e]!==void 0}set(e,t){this.config[e]=t}reload(){this.config={},this.loadConfig()}getConfigSummary(){let e=[];return this.options.initialConfig&&e.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&e.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&e.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&e.push("Environment Variables"),`Config sources: ${e.join(", ")}`}};function Vn(e,t=500,r="internal_error",n="api_error"){let s=new Error(e);return s.statusCode=t,s.code=r,s.type=n,s}async function nT(e,t,r){t.log.error(e);let n=e.statusCode||500,s={error:{message:e.message+e.stack||"Internal Server Error",type:e.type||"api_error",code:e.code||"internal_error"}};return r.code(n).send(s)}function iT(e,t,r,n,s){let o=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([c,l])=>{l&&o.set(c,l)});let i,a=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let c=new AbortController,l=()=>c.abort();r.signal.addEventListener("abort",l),a.addEventListener("abort",l),i=c.signal}else i=a;let u={method:"POST",headers:o,body:JSON.stringify(t),signal:i};return r.httpsProxy&&(u.dispatcher=new __.ProxyAgent(new URL(r.httpsProxy).toString())),s?.debug({reqId:n.req.id,request:u,headers:Object.fromEntries(o.entries()),requestUrl:typeof e=="string"?e:e.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof e=="string"?e:e.toString(),u)}var sT="1.0.55";async function oT(e,t,r,n){let s=e.body,o=e.provider,i=r.providerService.getProvider(o);if(!i)throw Vn(`Provider '${o}' not found`,404,"provider_not_found");try{let{requestBody:a,config:u,bypass:c}=await DC(s,i,n,e.headers,{req:e}),l=await BC(a,u,i,r,c,n,{req:e}),h=await IC(a,l,i,n,c,{req:e});return wC(h,t,s)}catch(a){if(a.code==="provider_response_error"){let u=await aT(e,t,r,n,a);if(u)return u}throw a}}async function aT(e,t,r,n,s){let o=e.scenarioType||"default",i=r.configService.get("fallback");if(!i||!i[o])return null;let a=i[o];if(!Array.isArray(a)||a.length===0)return null;e.log.warn(`Request failed for ${e.scenarioType}, trying ${a.length} fallback models`);for(let u of a)try{e.log.info(`Trying fallback model: ${u}`);let c={...e.body},[l,...h]=u.split(",");c.model=h.join(",");let p={...e,provider:l,body:c},A=r.providerService.getProvider(l);if(!A){e.log.warn(`Fallback provider '${l}' not found, skipping`);continue}let{requestBody:f,config:d,bypass:g}=await DC(c,A,n,e.headers,{req:p}),E=await BC(f,d,A,r,g,n,{req:p}),C=await IC(f,E,A,n,g,{req:p});return e.log.info(`Fallback model ${u} succeeded`),wC(C,t,c)}catch(c){e.log.warn(`Fallback model ${u} failed: ${c.message}`);continue}return e.log.error(`All fallback models failed for yichu ${o}`),null}async function DC(e,t,r,n,s){let o=e,i={},a=!1;if(a=uT(t,r,e),a&&(n instanceof Headers?n.delete("content-length"):delete n["content-length"],i.headers=n),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(o);u.body?(o=u.body,i=u.config||{}):o=u}if(!a&&t.transformer?.use?.length)for(let u of t.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let c=await u.transformRequestIn(o,t,s);c.body?(o=c.body,i={...i,...c.config}):o=c}if(!a&&t.transformer?.[e.model]?.use?.length)for(let u of t.transformer[e.model].use)!u||typeof u.transformRequestIn!="function"||(o=await u.transformRequestIn(o,t,s));return{requestBody:o,config:i,bypass:a}}function uT(e,t,r){return e.transformer?.use?.length===1&&e.transformer.use[0].name===t.name&&(!e.transformer?.[r.model]?.use.length||e.transformer?.[r.model]?.use.length===1&&e.transformer?.[r.model]?.use[0].name===t.name)}async function BC(e,t,r,n,s,o,i){let a=t.url||new URL(r.baseUrl);if(s&&typeof o.auth=="function"){let l=await o.auth(e,r);if(l.body){e=l.body;let h=t.headers||{};l.config?.headers&&(h={...h,...l.config.headers},delete h.host,delete l.config.headers),t={...t,...l.config,headers:h}}else e=l}let u={Authorization:`Bearer ${r.apiKey}`,...t?.headers||{}};for(let l in u)(u[l]==="undefined"||["authorization","Authorization"].includes(l)&&u[l]?.includes("undefined"))&&delete u[l];let c=await iT(a,e,{httpsProxy:n.configService.getHttpsProxy(),...t,headers:JSON.parse(JSON.stringify(u))},i,n.log);if(!c.ok){let l=await c.text();throw n.log.error(`[provider_response_error] Error from provider(${r.name},${e.model}: ${c.status}): ${l}`),Vn(`Error from provider(${r.name},${e.model}: ${c.status}): ${l}`,c.status,"provider_response_error")}return c}async function IC(e,t,r,n,s,o){let i=t;if(!s&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));if(!s&&r.transformer?.[e.model]?.use?.length)for(let a of Array.from(r.transformer[e.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));return!s&&n.transformResponseIn&&(i=await n.transformResponseIn(i,o)),i}function wC(e,t,r){return e.ok||t.code(e.status),r.stream===!0?(t.header("Content-Type","text/event-stream"),t.header("Cache-Control","no-cache"),t.header("Connection","keep-alive"),t.send(e.body)):e.json()}var xg=async e=>{e.get("/",async()=>({message:"LLMs API",version:sT})),e.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let t=e.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of t)r.endPoint&&e.post(r.endPoint,async(n,s)=>oT(n,s,e,r));e.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(r,n)=>{let{name:s,baseUrl:o,apiKey:i,models:a}=r.body;if(!s?.trim())throw Vn("Provider name is required",400,"invalid_request");if(!o||!lT(o))throw Vn("Valid base URL is required",400,"invalid_request");if(!i?.trim())throw Vn("API key is required",400,"invalid_request");if(!a||!Array.isArray(a)||a.length===0)throw Vn("At least one model is required",400,"invalid_request");if(e.providerService.getProvider(r.body.name))throw Vn(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return e.providerService.registerProvider(r.body)}),e.get("/providers",async()=>e.providerService.getProviders()),e.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let n=e.providerService.getProvider(r.params.id);if(!n)throw Vn("Provider not found",404,"provider_not_found");return n}),e.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(r,n)=>{let s=e.providerService.updateProvider(r.params.id,r.body);if(!s)throw Vn("Provider not found",404,"provider_not_found");return s}),e.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!e.providerService.deleteProvider(r.params.id))throw Vn("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),e.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(r,n)=>{if(!e.providerService.toggleProvider(r.params.id,r.body.enabled))throw Vn("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function lT(e){try{return new URL(e),!0}catch{return!1}}var vg=class{constructor(e,t,r){this.configService=e,this.transformerService=t,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let e=this.configService.get("providers");if(e&&Array.isArray(e)){this.initializeFromProvidersArray(e);return}}initializeFromProvidersArray(e){e.forEach(t=>{try{if(!t.name||!t.api_base_url||!t.api_key)return;let r={};t.transformer&&Object.keys(t.transformer).forEach(n=>{n==="use"?Array.isArray(t.transformer.use)&&(r.use=t.transformer.use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")):Array.isArray(t.transformer[n]?.use)&&(r[n]={use:t.transformer[n].use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")})}),this.registerProvider({name:t.name,baseUrl:t.api_base_url,apiKey:t.api_key,models:t.models||[],transformer:t.transformer?r:void 0}),this.logger.info(`${t.name} provider registered`)}catch(r){this.logger.error(`${t.name} provider registered error: ${r}`)}})}registerProvider(e){let t={...e};return this.providers.set(t.name,t),e.models.forEach(r=>{let n=`${t.name},${r}`,s={provider:t.name,model:r,fullModel:n};this.modelRoutes.set(n,s),this.modelRoutes.has(r)||this.modelRoutes.set(r,s)}),t}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}updateProvider(e,t){let r=this.providers.get(e);if(!r)return null;let n={...r,...t,updatedAt:new Date};return this.providers.set(e,n),t.models&&(r.models.forEach(s=>{let o=`${r.name},${s}`;this.modelRoutes.delete(o),this.modelRoutes.delete(s)}),t.models.forEach(s=>{let o=`${r.name},${s}`,i={provider:r.name,model:s,fullModel:o};this.modelRoutes.set(o,i),this.modelRoutes.has(s)||this.modelRoutes.set(s,i)})),n}deleteProvider(e){let t=this.providers.get(e);return t?(t.models.forEach(r=>{let n=`${t.name},${r}`;this.modelRoutes.delete(n),this.modelRoutes.delete(r)}),this.providers.delete(e),!0):!1}toggleProvider(e,t){return!!this.providers.get(e)}resolveModelRoute(e){let t=this.modelRoutes.get(e);if(!t)return null;let r=this.providers.get(t.provider);return r?{provider:r,originalModel:e,targetModel:t.model}:null}getAvailableModelNames(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push(r),e.push(`${t.name},${r}`)})}),e}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(e){return e?Array.isArray(e)?e.reduce((t,r)=>{if(Array.isArray(r)){let[n,s={}]=r;t[n]=s}else t[r]={};return t},{}):e:{}}async getAvailableModels(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push({id:r,object:"model",owned_by:t.name,provider:t.name}),e.push({id:`${t.name},${r}`,object:"model",owned_by:t.name,provider:t.name})})}),{object:"list",data:e}}},rn=[];for(let e=0;e<256;++e)rn.push((e+256).toString(16).slice(1));function cT(e,t=0){return(rn[e[t+0]]+rn[e[t+1]]+rn[e[t+2]]+rn[e[t+3]]+"-"+rn[e[t+4]]+rn[e[t+5]]+"-"+rn[e[t+6]]+rn[e[t+7]]+"-"+rn[e[t+8]]+rn[e[t+9]]+"-"+rn[e[t+10]]+rn[e[t+11]]+rn[e[t+12]]+rn[e[t+13]]+rn[e[t+14]]+rn[e[t+15]]).toLowerCase()}var $l=new Uint8Array(256),vl=$l.length;function AT(){return vl>$l.length-16&&((0,R_.randomFillSync)($l),vl=0),$l.slice(vl,vl+=16)}var Fg={randomUUID:T_.randomUUID};function hT(e,t,r){if(Fg.randomUUID&&!t&&!e)return Fg.randomUUID();e=e||{};let n=e.random??e.rng?.()??AT();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let s=0;s<16;++s)t[r+s]=n[s];return t}return cT(n)}var eu=hT,dT=e=>e<=0?"none":e<=1024?"low":e<=8192?"medium":"high",fT=(e,t)=>(e.includes("base64")&&(e=e.split("base64").pop(),e.startsWith(",")&&(e=e.slice(1))),`data:${t};base64,${e}`),pT=class{constructor(e){this.options=e,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(e,t){let r={};return this.useBearer?(r.authorization=`Bearer ${t.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=t.apiKey,r.authorization=void 0),{body:e,config:{headers:r}}}async transformRequestOut(e){let t=[];if(e.system){if(typeof e.system=="string")t.push({role:"system",content:e.system});else if(Array.isArray(e.system)&&e.system.length){let n=e.system.filter(s=>s.type==="text"&&s.text).map(s=>({type:"text",text:s.text,cache_control:s.cache_control}));t.push({role:"system",content:n})}}JSON.parse(JSON.stringify(e.messages||[]))?.forEach(n=>{if(n.role==="user"||n.role==="assistant"){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});return}if(Array.isArray(n.content)){if(n.role==="user"){let s=n.content.filter(i=>i.type==="tool_result"&&i.tool_use_id);s.length&&s.forEach(i=>{let a={role:"tool",content:typeof i.content=="string"?i.content:JSON.stringify(i.content),tool_call_id:i.tool_use_id,cache_control:i.cache_control};t.push(a)});let o=n.content.filter(i=>i.type==="text"&&i.text||i.type==="image"&&i.source);o.length&&t.push({role:"user",content:o.map(i=>i?.type==="image"?{type:"image_url",image_url:{url:i.source?.type==="base64"?fT(i.source.data,i.source.media_type):i.source.url},media_type:i.source.media_type}:i)})}else if(n.role==="assistant"){let s={role:"assistant",content:""},o=n.content.filter(u=>u.type==="text"&&u.text);o.length&&(s.content=o.map(u=>u.text).join(`
582
+ `):`${r}${e}`}async output(e,t={}){try{let r=this.formatData(e,t);switch(this.config.level||"log"){case"info":console.info(r);break;case"warn":console.warn(r);break;case"error":console.error(r);break;case"debug":console.debug(r);break;case"log":default:console.log(r);break}return!0}catch(r){return console.error("[ConsoleOutputHandler] Output failed:",r),!1}}}}),EC,mC=Nr(()=>{"use strict";EC=class{type="webhook";config;defaultTimeout=3e4;constructor(e){if(!e.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...e}}buildHeaders(){let e={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(e.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let t=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");e.Authorization=`Basic ${t}`}break;case"custom":this.config.auth.custom&&(e[this.config.auth.custom.header]=this.config.auth.custom.value);break}return e}buildBody(e,t){let{format:r="json",timestamp:n=!0,prefix:s,metadata:o}=t||{},i={data:e};return n&&(i.timestamp=new Date().toISOString()),s&&(i.prefix=s),o&&Object.keys(o).length>0&&(i.metadata=o),i}async sendRequest(e,t,r,n,s){let o=new AbortController,i=setTimeout(()=>o.abort(),s);try{let a=await fetch(e,{method:t,headers:r,body:JSON.stringify(n),signal:o.signal});if(clearTimeout(i),!a.ok)throw new Error(`HTTP ${a.status}: ${a.statusText}`);return a}catch(a){throw clearTimeout(i),a}}delay(e){return new Promise(t=>setTimeout(t,e))}async sendWithRetry(e,t,r,n,s,o){let i=null;for(let a=1;a<=o.maxAttempts;a++)try{return await this.sendRequest(e,t,r,n,s)}catch(u){if(i=u,a===o.maxAttempts)break;let c=o.backoffMs*Math.pow(2,a-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${a}/${o.maxAttempts}), retrying in ${c}ms...`,u.message),await this.delay(c)}throw i}async output(e,t={}){let r=t.timeout||this.defaultTimeout;try{let n=this.buildHeaders(),s=this.buildBody(e,t),o=await this.sendWithRetry(this.config.url,this.config.method,n,s,r,this.config.retry);return!0}catch(n){let s=n instanceof Error?n.message:String(n);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${s}`),!1;throw new Error(`Webhook output failed: ${s}`)}}}}),yC,CC=Nr(()=>{"use strict";yC=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,v_.tmpdir)();this.baseDir=(0,tg.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,Ah.existsSync)(this.baseDir)||(0,Ah.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(e){try{let t=e.match(/_session_([a-f0-9-]+)/i);return t?t[1]:null}catch{return null}}getFilePath(e){let t=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",n;if(this.config.includeTimestamp){let s=Date.now();n=`${t}-${e}-${s}${r}`}else n=`${t}-${e}${r}`;return(0,tg.join)(this.baseDir,n)}async output(e,t={}){try{let r=t.metadata?.sessionId;if(!r)return!1;let n={...e,timestamp:Date.now(),sessionId:r},s=this.getFilePath(r);return(0,Ah.writeFileSync)(s,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),wg,za,tT=Nr(()=>{"use strict";gC(),mC(),CC(),wg=class{handlers=new Map;defaultOptions={};registerHandler(e,t){this.handlers.set(e,t)}registerHandlers(e){for(let t of e)if(t.enabled!==!1)try{let r=this.createHandler(t),n=t.type+"_"+Date.now();this.registerHandler(n,r)}catch(r){console.error(`[OutputManager] Failed to register ${t.type} handler:`,r)}}createHandler(e){switch(e.type){case"console":return new pC(e.config);case"webhook":return new EC(e.config);case"temp-file":return new yC(e.config);default:throw new Error(`Unknown output handler type: ${e.type}`)}}unregisterHandler(e){return this.handlers.delete(e)}getHandler(e){return this.handlers.get(e)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(e){this.defaultOptions={...this.defaultOptions,...e}}getDefaultOptions(){return{...this.defaultOptions}}async output(e,t){let r={...this.defaultOptions,...t},n={success:[],failed:[]},s=Array.from(this.handlers.entries()).map(async([o,i])=>{try{await i.output(e,r)?n.success.push(o):n.failed.push(o)}catch(a){console.error(`[OutputManager] Handler ${o} failed:`,a),n.failed.push(o)}});return await Promise.all(s),n}async outputTo(e,t,r){let n={...this.defaultOptions,...r},s={success:[],failed:[]},o=e.map(async i=>{let a=this.handlers.get(i);if(!a){console.warn(`[OutputManager] Handler ${i} not found`),s.failed.push(i);return}try{await a.output(t,n)?s.success.push(i):s.failed.push(i)}catch(u){console.error(`[OutputManager] Handler ${i} failed:`,u),s.failed.push(i)}});return await Promise.all(o),s}async outputToType(e,t,r){let n=Array.from(this.handlers.entries()).filter(([s,o])=>o.type===e).map(([s])=>s);return this.outputTo(n,t,r)}},za=new wg}),rT=vs(sy(),1),bg=class{config={};options;constructor(e={jsonPath:"./config.json"}){this.options={envPath:e.envPath||".env",jsonPath:e.jsonPath,useEnvFile:!1,useJsonFile:e.useJsonFile!==!1,useEnvironmentVariables:e.useEnvironmentVariables!==!1,...e},this.loadConfig()}loadConfig(){this.options.useJsonFile&&this.options.jsonPath&&this.loadJsonConfig(),this.options.initialConfig&&(this.config={...this.config,...this.options.initialConfig}),this.options.useEnvFile&&this.loadEnvConfig(),this.config.LOG_FILE&&(process.env.LOG_FILE=this.config.LOG_FILE),this.config.LOG&&(process.env.LOG=this.config.LOG)}loadJsonConfig(){if(!this.options.jsonPath)return;let e=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,rg.join)(process.cwd(),this.options.jsonPath);if((0,hh.existsSync)(e))try{let t=(0,hh.readFileSync)(e,"utf-8"),r=rT.default.parse(t);this.config={...this.config,...r},console.log(`Loaded JSON config from: ${e}`)}catch(t){console.warn(`Failed to load JSON config from ${e}:`,t)}else console.warn(`JSON config file not found: ${e}`)}loadEnvConfig(){let e=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,rg.join)(process.cwd(),this.options.envPath);if((0,hh.existsSync)(e))try{let t=(0,Q_.config)({path:e});t.parsed&&(this.config={...this.config,...this.parseEnvConfig(t.parsed)})}catch(t){console.warn(`Failed to load .env config from ${e}:`,t)}}loadEnvironmentVariables(){let e=this.parseEnvConfig(process.env);this.config={...this.config,...e}}parseEnvConfig(e){let t={};return Object.assign(t,e),t}isAbsolutePath(e){return e.startsWith("/")||e.includes(":")}get(e,t){let r=this.config[e];return r!==void 0?r:t}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(e){return this.config[e]!==void 0}set(e,t){this.config[e]=t}reload(){this.config={},this.loadConfig()}getConfigSummary(){let e=[];return this.options.initialConfig&&e.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&e.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&e.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&e.push("Environment Variables"),`Config sources: ${e.join(", ")}`}};function Vn(e,t=500,r="internal_error",n="api_error"){let s=new Error(e);return s.statusCode=t,s.code=r,s.type=n,s}async function nT(e,t,r){t.log.error(e);let n=e.statusCode||500,s={error:{message:e.message+e.stack||"Internal Server Error",type:e.type||"api_error",code:e.code||"internal_error"}};return r.code(n).send(s)}function iT(e,t,r,n,s){let o=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([c,l])=>{l&&o.set(c,l)});let i,a=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let c=new AbortController,l=()=>c.abort();r.signal.addEventListener("abort",l),a.addEventListener("abort",l),i=c.signal}else i=a;let u={method:"POST",headers:o,body:JSON.stringify(t),signal:i};return r.httpsProxy&&(u.dispatcher=new __.ProxyAgent(new URL(r.httpsProxy).toString())),s?.debug({reqId:n.req.id,request:u,headers:Object.fromEntries(o.entries()),requestUrl:typeof e=="string"?e:e.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof e=="string"?e:e.toString(),u)}var sT="1.0.57";async function oT(e,t,r,n){let s=e.body,o=e.provider,i=r.providerService.getProvider(o);if(!i)throw Vn(`Provider '${o}' not found`,404,"provider_not_found");try{let{requestBody:a,config:u,bypass:c}=await DC(s,i,n,e.headers,{req:e}),l=await BC(a,u,i,r,c,n,{req:e}),h=await IC(a,l,i,n,c,{req:e});return wC(h,t,s)}catch(a){if(a.code==="provider_response_error"){let u=await aT(e,t,r,n,a);if(u)return u}throw a}}async function aT(e,t,r,n,s){let o=e.scenarioType||"default",i=r.configService.get("fallback");if(!i||!i[o])return null;let a=i[o];if(!Array.isArray(a)||a.length===0)return null;e.log.warn(`Request failed for ${e.scenarioType}, trying ${a.length} fallback models`);for(let u of a)try{e.log.info(`Trying fallback model: ${u}`);let c={...e.body},[l,...h]=u.split(",");c.model=h.join(",");let p={...e,provider:l,body:c},A=r.providerService.getProvider(l);if(!A){e.log.warn(`Fallback provider '${l}' not found, skipping`);continue}let{requestBody:f,config:d,bypass:g}=await DC(c,A,n,e.headers,{req:p}),E=await BC(f,d,A,r,g,n,{req:p}),C=await IC(f,E,A,n,g,{req:p});return e.log.info(`Fallback model ${u} succeeded`),wC(C,t,c)}catch(c){e.log.warn(`Fallback model ${u} failed: ${c.message}`);continue}return e.log.error(`All fallback models failed for yichu ${o}`),null}async function DC(e,t,r,n,s){let o=JSON.parse(JSON.stringify(e)),i={},a=!1;if(a=uT(t,r,e),a&&(n instanceof Headers?n.delete("content-length"):delete n["content-length"],i.headers=n),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(o);u.body?(o=u.body,i=u.config||{}):o=u}if(!a&&t.transformer?.use?.length)for(let u of t.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let c=await u.transformRequestIn(o,t,s);c.body?(o=c.body,i={...i,...c.config}):o=c}if(!a&&t.transformer?.[e.model]?.use?.length)for(let u of t.transformer[e.model].use)!u||typeof u.transformRequestIn!="function"||(o=await u.transformRequestIn(o,t,s));return{requestBody:o,config:i,bypass:a}}function uT(e,t,r){return e.transformer?.use?.length===1&&e.transformer.use[0].name===t.name&&(!e.transformer?.[r.model]?.use.length||e.transformer?.[r.model]?.use.length===1&&e.transformer?.[r.model]?.use[0].name===t.name)}async function BC(e,t,r,n,s,o,i){let a=t.url||new URL(r.baseUrl);if(s&&typeof o.auth=="function"){let l=await o.auth(e,r);if(l.body){e=l.body;let h=t.headers||{};l.config?.headers&&(h={...h,...l.config.headers},delete h.host,delete l.config.headers),t={...t,...l.config,headers:h}}else e=l}let u={Authorization:`Bearer ${r.apiKey}`,...t?.headers||{}};for(let l in u)(u[l]==="undefined"||["authorization","Authorization"].includes(l)&&u[l]?.includes("undefined"))&&delete u[l];let c=await iT(a,e,{httpsProxy:n.configService.getHttpsProxy(),...t,headers:JSON.parse(JSON.stringify(u))},i,n.log);if(!c.ok){let l=await c.text();throw n.log.error(`[provider_response_error] Error from provider(${r.name},${e.model}: ${c.status}): ${l}`),Vn(`Error from provider(${r.name},${e.model}: ${c.status}): ${l}`,c.status,"provider_response_error")}return c}async function IC(e,t,r,n,s,o){let i=t;if(!s&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));if(!s&&r.transformer?.[e.model]?.use?.length)for(let a of Array.from(r.transformer[e.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));return!s&&n.transformResponseIn&&(i=await n.transformResponseIn(i,o)),i}function wC(e,t,r){return e.ok||t.code(e.status),r.stream===!0?(t.header("Content-Type","text/event-stream"),t.header("Cache-Control","no-cache"),t.header("Connection","keep-alive"),t.send(e.body)):e.json()}var xg=async e=>{e.get("/",async()=>({message:"LLMs API",version:sT})),e.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let t=e.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of t)r.endPoint&&e.post(r.endPoint,async(n,s)=>oT(n,s,e,r));e.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(r,n)=>{let{name:s,baseUrl:o,apiKey:i,models:a}=r.body;if(!s?.trim())throw Vn("Provider name is required",400,"invalid_request");if(!o||!lT(o))throw Vn("Valid base URL is required",400,"invalid_request");if(!i?.trim())throw Vn("API key is required",400,"invalid_request");if(!a||!Array.isArray(a)||a.length===0)throw Vn("At least one model is required",400,"invalid_request");if(e.providerService.getProvider(r.body.name))throw Vn(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return e.providerService.registerProvider(r.body)}),e.get("/providers",async()=>e.providerService.getProviders()),e.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let n=e.providerService.getProvider(r.params.id);if(!n)throw Vn("Provider not found",404,"provider_not_found");return n}),e.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(r,n)=>{let s=e.providerService.updateProvider(r.params.id,r.body);if(!s)throw Vn("Provider not found",404,"provider_not_found");return s}),e.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!e.providerService.deleteProvider(r.params.id))throw Vn("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),e.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(r,n)=>{if(!e.providerService.toggleProvider(r.params.id,r.body.enabled))throw Vn("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function lT(e){try{return new URL(e),!0}catch{return!1}}var vg=class{constructor(e,t,r){this.configService=e,this.transformerService=t,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let e=this.configService.get("providers");if(e&&Array.isArray(e)){this.initializeFromProvidersArray(e);return}}initializeFromProvidersArray(e){e.forEach(t=>{try{if(!t.name||!t.api_base_url||!t.api_key)return;let r={};t.transformer&&Object.keys(t.transformer).forEach(n=>{n==="use"?Array.isArray(t.transformer.use)&&(r.use=t.transformer.use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")):Array.isArray(t.transformer[n]?.use)&&(r[n]={use:t.transformer[n].use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")})}),this.registerProvider({name:t.name,baseUrl:t.api_base_url,apiKey:t.api_key,models:t.models||[],transformer:t.transformer?r:void 0}),this.logger.info(`${t.name} provider registered`)}catch(r){this.logger.error(`${t.name} provider registered error: ${r}`)}})}registerProvider(e){let t={...e};return this.providers.set(t.name,t),e.models.forEach(r=>{let n=`${t.name},${r}`,s={provider:t.name,model:r,fullModel:n};this.modelRoutes.set(n,s),this.modelRoutes.has(r)||this.modelRoutes.set(r,s)}),t}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}updateProvider(e,t){let r=this.providers.get(e);if(!r)return null;let n={...r,...t,updatedAt:new Date};return this.providers.set(e,n),t.models&&(r.models.forEach(s=>{let o=`${r.name},${s}`;this.modelRoutes.delete(o),this.modelRoutes.delete(s)}),t.models.forEach(s=>{let o=`${r.name},${s}`,i={provider:r.name,model:s,fullModel:o};this.modelRoutes.set(o,i),this.modelRoutes.has(s)||this.modelRoutes.set(s,i)})),n}deleteProvider(e){let t=this.providers.get(e);return t?(t.models.forEach(r=>{let n=`${t.name},${r}`;this.modelRoutes.delete(n),this.modelRoutes.delete(r)}),this.providers.delete(e),!0):!1}toggleProvider(e,t){return!!this.providers.get(e)}resolveModelRoute(e){let t=this.modelRoutes.get(e);if(!t)return null;let r=this.providers.get(t.provider);return r?{provider:r,originalModel:e,targetModel:t.model}:null}getAvailableModelNames(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push(r),e.push(`${t.name},${r}`)})}),e}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(e){return e?Array.isArray(e)?e.reduce((t,r)=>{if(Array.isArray(r)){let[n,s={}]=r;t[n]=s}else t[r]={};return t},{}):e:{}}async getAvailableModels(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push({id:r,object:"model",owned_by:t.name,provider:t.name}),e.push({id:`${t.name},${r}`,object:"model",owned_by:t.name,provider:t.name})})}),{object:"list",data:e}}},rn=[];for(let e=0;e<256;++e)rn.push((e+256).toString(16).slice(1));function cT(e,t=0){return(rn[e[t+0]]+rn[e[t+1]]+rn[e[t+2]]+rn[e[t+3]]+"-"+rn[e[t+4]]+rn[e[t+5]]+"-"+rn[e[t+6]]+rn[e[t+7]]+"-"+rn[e[t+8]]+rn[e[t+9]]+"-"+rn[e[t+10]]+rn[e[t+11]]+rn[e[t+12]]+rn[e[t+13]]+rn[e[t+14]]+rn[e[t+15]]).toLowerCase()}var $l=new Uint8Array(256),vl=$l.length;function AT(){return vl>$l.length-16&&((0,R_.randomFillSync)($l),vl=0),$l.slice(vl,vl+=16)}var Fg={randomUUID:T_.randomUUID};function hT(e,t,r){if(Fg.randomUUID&&!t&&!e)return Fg.randomUUID();e=e||{};let n=e.random??e.rng?.()??AT();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let s=0;s<16;++s)t[r+s]=n[s];return t}return cT(n)}var eu=hT,dT=e=>e<=0?"none":e<=1024?"low":e<=8192?"medium":"high",fT=(e,t)=>(e.includes("base64")&&(e=e.split("base64").pop(),e.startsWith(",")&&(e=e.slice(1))),`data:${t};base64,${e}`),pT=class{constructor(e){this.options=e,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(e,t){let r={};return this.useBearer?(r.authorization=`Bearer ${t.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=t.apiKey,r.authorization=void 0),{body:e,config:{headers:r}}}async transformRequestOut(e){let t=[];if(e.system){if(typeof e.system=="string")t.push({role:"system",content:e.system});else if(Array.isArray(e.system)&&e.system.length){let n=e.system.filter(s=>s.type==="text"&&s.text).map(s=>({type:"text",text:s.text,cache_control:s.cache_control}));t.push({role:"system",content:n})}}JSON.parse(JSON.stringify(e.messages||[]))?.forEach(n=>{if(n.role==="user"||n.role==="assistant"){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});return}if(Array.isArray(n.content)){if(n.role==="user"){let s=n.content.filter(i=>i.type==="tool_result"&&i.tool_use_id);s.length&&s.forEach(i=>{let a={role:"tool",content:typeof i.content=="string"?i.content:JSON.stringify(i.content),tool_call_id:i.tool_use_id,cache_control:i.cache_control};t.push(a)});let o=n.content.filter(i=>i.type==="text"&&i.text||i.type==="image"&&i.source);o.length&&t.push({role:"user",content:o.map(i=>i?.type==="image"?{type:"image_url",image_url:{url:i.source?.type==="base64"?fT(i.source.data,i.source.media_type):i.source.url},media_type:i.source.media_type}:i)})}else if(n.role==="assistant"){let s={role:"assistant",content:""},o=n.content.filter(u=>u.type==="text"&&u.text);o.length&&(s.content=o.map(u=>u.text).join(`
583
583
  `));let i=n.content.filter(u=>u.type==="tool_use"&&u.id);i.length&&(s.tool_calls=i.map(u=>({id:u.id,type:"function",function:{name:u.name,arguments:JSON.stringify(u.input||{})}})));let a=n.content.find(u=>u.type==="thinking"&&u.signature);a&&(s.thinking={content:a.thinking,signature:a.signature}),t.push(s)}return}}});let r={messages:t,model:e.model,max_tokens:e.max_tokens,temperature:e.temperature,stream:e.stream,tools:e.tools?.length?this.convertAnthropicToolsToUnified(e.tools):void 0,tool_choice:e.tool_choice};return e.thinking&&(r.reasoning={effort:dT(e.thinking.budget_tokens),enabled:e.thinking.type==="enabled"}),e.tool_choice&&(e.tool_choice.type==="tool"?r.tool_choice={type:"function",function:{name:e.tool_choice.name}}:r.tool_choice=e.tool_choice.type),r}async transformResponseIn(e,t){if(e.headers.get("Content-Type")?.includes("text/event-stream")){if(!e.body)throw new Error("Stream response body is null");let r=await this.convertOpenAIStreamToAnthropic(e.body,t);return new Response(r,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let r=await e.json(),n=this.convertOpenAIResponseToAnthropic(r,t);return new Response(JSON.stringify(n),{headers:{"Content-Type":"application/json"}})}}convertAnthropicToolsToUnified(e){return e.map(t=>({type:"function",function:{name:t.name,description:t.description||"",parameters:t.input_schema}}))}async convertOpenAIStreamToAnthropic(e,t){return new ReadableStream({start:async r=>{let n=new TextEncoder,s=`msg_${Date.now()}`,o=null,i="unknown",a=!1,u=!1,c=!1,l=new Map,h=new Map,p=0,A=0,f=0,d=!1,g=!1,E=0,C=-1,m=()=>{let D=E;return E++,D},y=D=>{if(!d)try{r.enqueue(D);let b=new TextDecoder().decode(D);this.logger.debug({reqId:t.req.id,data:b,type:"send data"})}catch(b){if(b instanceof TypeError&&b.message.includes("Controller is already closed"))d=!0;else throw this.logger.debug({reqId:t.req.id,error:b instanceof Error?b.message:String(b),type:"send data error"}),b}},B=()=>{if(!d)try{if(C>=0){let b={type:"content_block_stop",index:C};y(n.encode(`event: content_block_stop
584
584
  data: ${JSON.stringify(b)}
585
585
 
@@ -666,7 +666,7 @@ data: ${JSON.stringify(_)}
666
666
  `);d=C.pop()||"";for(let m of C)await A(m,p)}}catch(g){p.error(g)}finally{p.close()}}});return new Response(h,{status:e.status,statusText:e.statusText,headers:e.headers})}}var mT=class{name="gemini";endPoint="/v1beta/models/:modelAndAction";async transformRequestIn(e,t){return{body:bC(e),config:{url:new URL(`./${e.model}:${e.stream?"streamGenerateContent?alt=sse":"generateContent"}`,t.baseUrl),headers:{"x-goog-api-key":t.apiKey,Authorization:void 0}}}}transformRequestOut=xC;async transformResponseOut(e){return vC(e,this.name,this.logger)}};async function yT(){try{let{GoogleAuth:e}=await Promise.resolve().then(()=>vs(fC(),1));return(await(await new e({scopes:["https://www.googleapis.com/auth/cloud-platform"]}).getClient()).getAccessToken()).token||""}catch(e){throw console.error("Error getting access token:",e),new Error(`Failed to get access token for Vertex AI. Please ensure you have set up authentication using one of these methods:
667
667
  1. Set GOOGLE_APPLICATION_CREDENTIALS to point to service account key file
668
668
  2. Run "gcloud auth application-default login"
669
- 3. Use Google Cloud environment with default service account`)}}var CT=class{name="vertex-gemini";async transformRequestIn(e,t){let r=process.env.GOOGLE_CLOUD_PROJECT,n=process.env.GOOGLE_CLOUD_LOCATION||"us-central1";if(!r&&process.env.GOOGLE_APPLICATION_CREDENTIALS)try{let o=(await import("fs")).readFileSync(process.env.GOOGLE_APPLICATION_CREDENTIALS,"utf8"),i=JSON.parse(o);i&&i.project_id&&(r=i.project_id)}catch(o){console.error("Error extracting project_id from GOOGLE_APPLICATION_CREDENTIALS:",o)}if(!r)throw new Error("Project ID is required for Vertex AI. Set GOOGLE_CLOUD_PROJECT environment variable or ensure project_id is in GOOGLE_APPLICATION_CREDENTIALS file.");let s=await yT();return{body:bC(e),config:{url:new URL(`./v1beta1/projects/${r}/locations/${n}/publishers/google/models/${e.model}:${e.stream?"streamGenerateContent":"generateContent"}`,t.baseUrl.endsWith("/")?t.baseUrl:t.baseUrl+"/"||`https://${n}-aiplatform.googleapis.com`),headers:{Authorization:`Bearer ${s}`,"x-goog-api-key":void 0}}}}async transformRequestOut(e){return xC(e)}async transformResponseOut(e){return vC(e,this.name)}},DT=class{name="deepseek";async transformRequestIn(e){return e.max_tokens&&e.max_tokens>8192&&(e.max_tokens=8192),e.messages.forEach(t=>{t.role==="assistant"&&t.thinking&&(t.reasoning_content=t.thinking.content||"",delete t.thinking)}),e}async transformResponseOut(e){if(e.headers.get("Content-Type")?.includes("application/json")){let t=await e.json();return new Response(JSON.stringify(t),{status:e.status,statusText:e.statusText,headers:e.headers})}else if(e.headers.get("Content-Type")?.includes("stream")){if(!e.body)return e;let t=new TextDecoder,r=new TextEncoder,n="",s=!1,o="",i=new ReadableStream({async start(a){let u=e.body.getReader(),c=(h,p,A)=>{let f=h.split(`
669
+ 3. Use Google Cloud environment with default service account`)}}var CT=class{name="vertex-gemini";async transformRequestIn(e,t){let r=process.env.GOOGLE_CLOUD_PROJECT,n=process.env.GOOGLE_CLOUD_LOCATION||"us-central1";if(!r&&process.env.GOOGLE_APPLICATION_CREDENTIALS)try{let o=(await import("fs")).readFileSync(process.env.GOOGLE_APPLICATION_CREDENTIALS,"utf8"),i=JSON.parse(o);i&&i.project_id&&(r=i.project_id)}catch(o){console.error("Error extracting project_id from GOOGLE_APPLICATION_CREDENTIALS:",o)}if(!r)throw new Error("Project ID is required for Vertex AI. Set GOOGLE_CLOUD_PROJECT environment variable or ensure project_id is in GOOGLE_APPLICATION_CREDENTIALS file.");let s=await yT();return{body:bC(e),config:{url:new URL(`./v1beta1/projects/${r}/locations/${n}/publishers/google/models/${e.model}:${e.stream?"streamGenerateContent":"generateContent"}`,t.baseUrl.endsWith("/")?t.baseUrl:t.baseUrl+"/"||`https://${n}-aiplatform.googleapis.com`),headers:{Authorization:`Bearer ${s}`,"x-goog-api-key":void 0}}}}async transformRequestOut(e){return xC(e)}async transformResponseOut(e){return vC(e,this.name)}},DT=class{name="deepseek";async transformRequestIn(e){return e.max_tokens&&e.max_tokens>8192&&(e.max_tokens=8192),e.messages.forEach(t=>{if(t.role==="assistant"){let r=t.thinking?.content;r&&typeof r=="string"&&r.trim()&&(t.reasoning_content=r),t.thinking&&delete t.thinking}}),e}async transformResponseOut(e){if(e.headers.get("Content-Type")?.includes("application/json")){let t=await e.json();return new Response(JSON.stringify(t),{status:e.status,statusText:e.statusText,headers:e.headers})}else if(e.headers.get("Content-Type")?.includes("stream")){if(!e.body)return e;let t=new TextDecoder,r=new TextEncoder,n="",s=!1,o="",i=new ReadableStream({async start(a){let u=e.body.getReader(),c=(h,p,A)=>{let f=h.split(`
670
670
  `);for(let d of f)d.trim()&&p.enqueue(A.encode(d+`
671
671
  `))},l=(h,p)=>{let{controller:A,encoder:f}=p;if(h.startsWith("data: ")&&h.trim()!=="data: [DONE]")try{let d=JSON.parse(h.slice(6));if(d.choices?.[0]?.delta?.reasoning_content){p.appendReasoningContent(d.choices[0].delta.reasoning_content);let g={...d,choices:[{...d.choices[0],delta:{...d.choices[0].delta,thinking:{content:d.choices[0].delta.reasoning_content}}}]};delete g.choices[0].delta.reasoning_content;let E=`data: ${JSON.stringify(g)}
672
672
 
@@ -872,7 +872,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
872
872
 
873
873
  Do not attempt to describe or analyze the image directly yourself.
874
874
  Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
875
- Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(s=>s.role==="user"&&Array.isArray(s.content)&&s.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(i=>i.type==="image"))),n=1;r.forEach(s=>{Array.isArray(s.content)&&s.content.forEach(o=>{o.type==="image"?(_l.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(i=>i.type==="image")&&(_l.storeImage(`${e.id}_Image#${n}`,o.content[0].source),o.content=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++)})})}},aO=new oO,uO=class{agents=new Map;registerAgent(e){this.agents.set(e.name,e)}getAgent(e){return this.agents.get(e)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let e=[];for(let t of this.agents.values())e.push(...t.tools.values());return e}},jC=new uO;jC.registerAgent(aO);var Fh=jC,lO=require("node:events"),rE=require("node:perf_hooks"),nE=new lO.EventEmitter;function iE(e){if(e.usageSessionId)return e.usageSessionId;let t=e.headers?.["x-request-id"],r=Array.isArray(t)?t[0]:t;return e.usageSessionId=e.sessionId||(typeof r=="string"?r:void 0)||e.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.usageSessionId}function cO(e){return Array.isArray(e.model)?e.model.join(","):e.model||e.body?.model||""}async function AO(){let e=(0,Wm.homedir)(),t=(0,zm.join)(e,".claude.json");if(!(0,m_.existsSync)(t)){let r={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,y_.writeFile)(t,JSON.stringify(r,null,2))}}async function hO(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:s,enabled:o=!1,options:i={}}=n;switch(s){case"token-speed":Yh.registerPlugin(UC,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...i});break;default:console.warn(`Unknown plugin: ${s}`);break}}await Yh.enablePlugins(e)}async function GC(e={}){await AO(),await S0();let t=await Zm(),r=t.Providers||t.providers||[],n=r&&r.length>0,s=t.HOST||"127.0.0.1";n?(s=t.HOST,t.APIKEY||(s="127.0.0.1")):(s="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,i=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=p=>(p>9?"":"0")+p,u=(p,A)=>{let f;p?typeof p=="number"?f=new Date(p):f=p:f=new Date;let d=f.getFullYear()+""+a(f.getMonth()+1),g=a(f.getDate()),E=a(f.getHours()),C=a(f.getMinutes());return`./logs/ccr-${d}${g}${E}${C}${a(f.getSeconds())}${A?`_${A}`:""}.log`},c;e.logger!==void 0?c=e.logger:t.LOG!==!1?(t.LOG===void 0&&(t.LOG=!0),c={level:t.LOG_LEVEL||"debug",stream:K6(u,{path:bh.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):c=!1;let l=await(0,bh.listPresets)(),h=await P6({jsonPath:bh.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:s,PORT:i,LOG_FILE:(0,zm.join)((0,Wm.homedir)(),".claude-code-router","claude-code-router.log")},logger:c});return await Promise.allSettled(l.map(async p=>await h.registerNamespace(`/preset/${p.name}`,p.config))),await hO(h,t),h.addHook("onRequest",async p=>{new URL(`http://127.0.0.1${p.url}`).pathname.endsWith("/v1/messages")&&!p.requestStartTime&&(p.requestStartTime=rE.performance.now())}),h.addHook("preHandler",async(p,A)=>new Promise((f,d)=>{let g=E=>{E?d(E):f()};U6(t)(p,A,g).catch(d)})),h.addHook("preHandler",async(p,A)=>{let f=new URL(`http://127.0.0.1${p.url}`);p.pathname=f.pathname,p.pathname.endsWith("/v1/messages")&&p.pathname!=="/v1/messages"&&(p.preset=p.pathname.replace("/v1/messages","").replace("/",""))}),h.addHook("preHandler",async(p,A)=>{if(p.pathname.endsWith("/v1/messages")){let f=[];for(let d of Fh.getAllAgents())d.shouldHandle(p,t)&&(f.push(d.name),d.reqHandler(p,t),d.tools.size&&(p.body?.tools?.length||(p.body.tools=[]),p.body.tools.unshift(...Array.from(d.tools.values()).map(g=>({name:g.name,description:g.description,input_schema:g.input_schema})))));f.length&&(p.agents=f)}}),h.addHook("onError",async(p,A,f)=>{nE.emit("onError",p,A,f)}),h.addHook("onSend",(p,A,f,d)=>{if(p.pathname?.endsWith("/v1/messages")){let g=iE(p);if(f instanceof ReadableStream){if(p.agents){let m=new AbortController,y=f.pipeThrough(new tE),B,w=-1,D="",b="",I="",v=[],x=[];return d(null,eO(y,async(F,Q)=>{try{if(F.event==="content_block_start"&&F?.data?.content_block?.name){let R=p.agents.find(S=>Fh.getAgent(S)?.tools.get(F.data.content_block.name));if(R){B=Fh.getAgent(R),w=F.data.index,D=F.data.content_block.name,I=F.data.content_block.id;return}}if(w>-1&&F.data.index===w&&F.data?.delta?.type==="input_json_delta"){b+=F.data?.delta?.partial_json;return}if(w>-1&&F.data.index===w&&F.data.type==="content_block_stop"){try{let R=tO.default.parse(b);x.push({type:"tool_use",id:I,name:D,input:R});let S=await B?.tools.get(D)?.handler(R,{req:p,config:t});v.push({tool_use_id:I,type:"tool_result",content:S}),B=void 0,w=-1,D="",b="",I=""}catch(R){console.log(R)}return}if(F.event==="message_delta"&&v.length){p.body.messages.push({role:"assistant",content:x}),p.body.messages.push({role:"user",content:v});let R=await fetch(`http://127.0.0.1:${t.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":t.APIKEY,"content-type":"application/json"},body:JSON.stringify(p.body)});if(!R.ok)return;let S=R.body.pipeThrough(new tE).getReader();for(;;)try{let{value:_,done:k}=await S.read();if(k)break;let U=_;if(["message_start","message_stop"].includes(U.event))continue;if(!Q.desiredSize)break;Q.enqueue(U)}catch(_){if(_.name==="AbortError"||_.code==="ERR_STREAM_PREMATURE_CLOSE"){m.abort();break}throw _}return}return F}catch(R){if(console.error("Unexpected error in stream processing:",R),R.code==="ERR_STREAM_PREMATURE_CLOSE"){m.abort();return}throw R}}).pipeThrough(new X6))}let[E,C]=f.tee();return(async m=>{let y=m.getReader();try{for(;;){let{done:B,value:w}=await y.read();if(B)break;let D=new TextDecoder().decode(w);if(!D.startsWith("event: message_delta"))continue;let b=D.slice(27);try{let I=JSON.parse(b);jl.put(g,I.usage)}catch{}}}catch(B){B.name==="AbortError"||B.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",B)}finally{y.releaseLock()}})(C),d(null,E)}if(jl.put(g,f.usage),typeof f=="object")return f.error?d(f.error,null):d(f,null)}if(typeof f=="object"&&f.error)return d(f.error,null);d(null,f)}),h.addHook("onSend",async(p,A,f)=>(nE.emit("onSend",p,A,f),f)),h.addHook("onResponse",async(p,A)=>{if(p.pathname?.endsWith("/v1/messages"))try{let f=iE(p),d=jl.get(f),g=L6(f);T6({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:f,provider:p.provider||"",model:cO(p),scenarioType:p.scenarioType||"default",stream:p.body?.stream??!1,inputTokens:p.tokenCount||0,outputTokens:d?.output_tokens||0,ttft:g.ttft,tokensPerSecond:g.tokensPerSecond,durationMs:p.requestStartTime?Math.round(rE.performance.now()-p.requestStartTime):0,status:A.statusCode<400?"success":"error"})}catch(f){console.error("Usage tracking error:",f)}}),process.on("uncaughtException",p=>{h.app.log.error("Uncaught exception:",p)}),process.on("unhandledRejection",(p,A)=>{h.app.log.error("Unhandled rejection at:",A,"reason:",p)}),h}async function dO(){let e=await GC();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===J0&&dO().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function WC(e){try{let{stdout:t}=await JC("npm view @wengine-ai/claude-code-router version"),r=t.trim();return{hasUpdate:fO(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function zC(){try{let{stdout:e,stderr:t}=await JC("npm update -g @wengine-ai/claude-code-router");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function fO(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let s=0;s<Math.max(r.length,n.length);s++){let o=s<r.length?r[s]:0,i=s<n.length?n[s]:0;if(o>i)return 1;if(o<i)return-1}return 0}var qC,YC,JC,ZC=dl(()=>{"use strict";qC=require("child_process"),YC=require("util"),JC=(0,YC.promisify)(qC.exec)});var Qc,W0=dl(()=>{Qc="2.0.4"});var Z0=It(z0=>{"use strict";Object.defineProperty(z0,"__esModule",{value:!0});var KC=require("child_process"),gO=1024*1024,XC={exec(e,t){let r={maxBuffer:2*gO,windowsHide:!0};(0,KC.exec)(e,r,t)},spawn(e,t,r){return(0,KC.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
875
+ Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(s=>s.role==="user"&&Array.isArray(s.content)&&s.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(i=>i.type==="image"))),n=1;r.forEach(s=>{Array.isArray(s.content)&&s.content.forEach(o=>{o.type==="image"?(_l.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(i=>i.type==="image")&&(_l.storeImage(`${e.id}_Image#${n}`,o.content[0].source),o.content=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++)})})}},aO=new oO,uO=class{agents=new Map;registerAgent(e){this.agents.set(e.name,e)}getAgent(e){return this.agents.get(e)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let e=[];for(let t of this.agents.values())e.push(...t.tools.values());return e}},jC=new uO;jC.registerAgent(aO);var Fh=jC,lO=require("node:events"),rE=require("node:perf_hooks"),nE=new lO.EventEmitter;function iE(e){if(e.usageSessionId)return e.usageSessionId;let t=e.headers?.["x-request-id"],r=Array.isArray(t)?t[0]:t;return e.usageSessionId=e.sessionId||(typeof r=="string"?r:void 0)||e.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.usageSessionId}function cO(e){return Array.isArray(e.model)?e.model.join(","):e.model||e.body?.model||""}async function AO(){let e=(0,Wm.homedir)(),t=(0,zm.join)(e,".claude.json");if(!(0,m_.existsSync)(t)){let r={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,y_.writeFile)(t,JSON.stringify(r,null,2))}}async function hO(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:s,enabled:o=!1,options:i={}}=n;switch(s){case"token-speed":Yh.registerPlugin(UC,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...i});break;default:console.warn(`Unknown plugin: ${s}`);break}}await Yh.enablePlugins(e)}async function GC(e={}){await AO(),await S0();let t=await Zm(),r=t.Providers||t.providers||[],n=r&&r.length>0,s=t.HOST||"127.0.0.1";n?(s=t.HOST,t.APIKEY||(s="127.0.0.1")):(s="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,i=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=p=>(p>9?"":"0")+p,u=(p,A)=>{let f;p?typeof p=="number"?f=new Date(p):f=p:f=new Date;let d=f.getFullYear()+""+a(f.getMonth()+1),g=a(f.getDate()),E=a(f.getHours()),C=a(f.getMinutes());return`./logs/ccr-${d}${g}${E}${C}${a(f.getSeconds())}${A?`_${A}`:""}.log`},c;e.logger!==void 0?c=e.logger:t.LOG!==!1?(t.LOG===void 0&&(t.LOG=!0),c={level:t.LOG_LEVEL||"debug",stream:K6(u,{path:bh.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):c=!1;let l=await(0,bh.listPresets)(),h=await P6({jsonPath:bh.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:s,PORT:i,LOG_FILE:(0,zm.join)((0,Wm.homedir)(),".claude-code-router","claude-code-router.log")},logger:c});return await Promise.allSettled(l.map(async p=>await h.registerNamespace(`/preset/${p.name}`,p.config))),await hO(h,t),h.addHook("onRequest",async p=>{new URL(`http://127.0.0.1${p.url}`).pathname.endsWith("/v1/messages")&&!p.requestStartTime&&(p.requestStartTime=rE.performance.now())}),h.addHook("preHandler",async(p,A)=>new Promise((f,d)=>{let g=E=>{E?d(E):f()};U6(t)(p,A,g).catch(d)})),h.addHook("preHandler",async(p,A)=>{let f=new URL(`http://127.0.0.1${p.url}`);p.pathname=f.pathname,p.pathname.endsWith("/v1/messages")&&p.pathname!=="/v1/messages"&&(p.preset=p.pathname.replace("/v1/messages","").replace("/",""))}),h.addHook("preHandler",async(p,A)=>{if(p.pathname.endsWith("/v1/messages")){let f=[];for(let d of Fh.getAllAgents())d.shouldHandle(p,t)&&(f.push(d.name),d.reqHandler(p,t),d.tools.size&&(p.body?.tools?.length||(p.body.tools=[]),p.body.tools.unshift(...Array.from(d.tools.values()).map(g=>({name:g.name,description:g.description,input_schema:g.input_schema})))));f.length&&(p.agents=f)}}),h.addHook("onError",async(p,A,f)=>{nE.emit("onError",p,A,f)}),h.addHook("onSend",(p,A,f,d)=>{if(p.pathname?.endsWith("/v1/messages")){let g=iE(p);if(f instanceof ReadableStream){if(p.agents){let m=new AbortController,y=f.pipeThrough(new tE),B,w=-1,D="",b="",I="",v=[],x=[];return d(null,eO(y,async(F,Q)=>{try{if(F.event==="content_block_start"&&F?.data?.content_block?.name){let R=p.agents.find(S=>Fh.getAgent(S)?.tools.get(F.data.content_block.name));if(R){B=Fh.getAgent(R),w=F.data.index,D=F.data.content_block.name,I=F.data.content_block.id;return}}if(w>-1&&F.data.index===w&&F.data?.delta?.type==="input_json_delta"){b+=F.data?.delta?.partial_json;return}if(w>-1&&F.data.index===w&&F.data.type==="content_block_stop"){try{let R=tO.default.parse(b);x.push({type:"tool_use",id:I,name:D,input:R});let S=await B?.tools.get(D)?.handler(R,{req:p,config:t});v.push({tool_use_id:I,type:"tool_result",content:S}),B=void 0,w=-1,D="",b="",I=""}catch(R){console.log(R)}return}if(F.event==="message_delta"&&v.length){p.body.messages.push({role:"assistant",content:x}),p.body.messages.push({role:"user",content:v});let R=await fetch(`http://127.0.0.1:${t.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":t.APIKEY,"content-type":"application/json"},body:JSON.stringify(p.body)});if(!R.ok)return;let S=R.body.pipeThrough(new tE).getReader();for(;;)try{let{value:_,done:k}=await S.read();if(k)break;let U=_;if(["message_start","message_stop"].includes(U.event))continue;if(!Q.desiredSize)break;Q.enqueue(U)}catch(_){if(_.name==="AbortError"||_.code==="ERR_STREAM_PREMATURE_CLOSE"){m.abort();break}throw _}return}return F}catch(R){if(console.error("Unexpected error in stream processing:",R),R.code==="ERR_STREAM_PREMATURE_CLOSE"){m.abort();return}throw R}}).pipeThrough(new X6))}let[E,C]=f.tee();return(async m=>{let y=m.getReader();try{for(;;){let{done:B,value:w}=await y.read();if(B)break;let D=new TextDecoder().decode(w);if(!D.startsWith("event: message_delta"))continue;let b=D.slice(27);try{let I=JSON.parse(b);jl.put(g,I.usage)}catch{}}}catch(B){B.name==="AbortError"||B.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",B)}finally{y.releaseLock()}})(C),d(null,E)}if(jl.put(g,f.usage),typeof f=="object")return f.error?d(f.error,null):d(f,null)}if(typeof f=="object"&&f.error)return d(f.error,null);d(null,f)}),h.addHook("onSend",async(p,A,f)=>(nE.emit("onSend",p,A,f),f)),h.addHook("onResponse",async(p,A)=>{if(p.pathname?.endsWith("/v1/messages"))try{let f=iE(p),d=jl.get(f),g=L6(f);T6({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:f,provider:p.provider||"",model:cO(p),scenarioType:p.scenarioType||"default",stream:p.body?.stream??!1,inputTokens:p.tokenCount||0,outputTokens:d?.output_tokens||0,ttft:g.ttft,tokensPerSecond:g.tokensPerSecond,durationMs:p.requestStartTime?Math.round(rE.performance.now()-p.requestStartTime):0,status:A.statusCode<400?"success":"error"})}catch(f){console.error("Usage tracking error:",f)}}),process.on("uncaughtException",p=>{h.app.log.error("Uncaught exception:",p)}),process.on("unhandledRejection",(p,A)=>{h.app.log.error("Unhandled rejection at:",A,"reason:",p)}),h}async function dO(){let e=await GC();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===J0&&dO().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function WC(e){try{let{stdout:t}=await JC("npm view @wengine-ai/claude-code-router version"),r=t.trim();return{hasUpdate:fO(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function zC(){try{let{stdout:e,stderr:t}=await JC("npm update -g @wengine-ai/claude-code-router");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function fO(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let s=0;s<Math.max(r.length,n.length);s++){let o=s<r.length?r[s]:0,i=s<n.length?n[s]:0;if(o>i)return 1;if(o<i)return-1}return 0}var qC,YC,JC,ZC=dl(()=>{"use strict";qC=require("child_process"),YC=require("util"),JC=(0,YC.promisify)(qC.exec)});var Qc,W0=dl(()=>{Qc="2.0.6"});var Z0=It(z0=>{"use strict";Object.defineProperty(z0,"__esModule",{value:!0});var KC=require("child_process"),gO=1024*1024,XC={exec(e,t){let r={maxBuffer:2*gO,windowsHide:!0};(0,KC.exec)(e,r,t)},spawn(e,t,r){return(0,KC.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
876
876
  `,r);n>=0&&(r=n+1)}return r>0?e.substring(r):e},split(e,t){let r=e.trim().split(/\s+/);return r.length>t&&(r[t-1]=r.slice(t-1).join(" ")),r},extractColumns(e,t,r){let n=e.split(/(\r\n|\n|\r)/),s=[];return r||(r=Math.max.apply(null,t)+1),n.forEach(o=>{let i=XC.split(o,r),a=[];t.forEach(u=>{a.push(i[u]||"")}),s.push(a)}),s},parseTable(e){let t=e.split(/(\r\n\r\n|\r\n\n|\n\r\n|\n\n)/).filter(r=>r&&r.trim().length>0).map(r=>r.split(/(\r\n|\n|\r)/).filter(n=>n.trim().length>0));return t.forEach(r=>{for(let n=0;r[n];){let s=r[n];s.startsWith(" ")?(r[n-1]+=s.trimLeft(),r.splice(n,1)):n+=1}}),t.map(r=>{let n={};return r.forEach(s=>{let o=s.indexOf(":"),i=s.slice(0,o).trim();n[i]=s.slice(o+1).trim()}),n})}};z0.default=XC});var tD=It((eD,_c)=>{(function(e,t){"use strict";typeof define=="function"&&define.amd?define(t):typeof _c=="object"&&_c.exports?_c.exports=t():e.log=t()})(eD,function(){"use strict";var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],s={},o=null;function i(f,d){var g=f[d];if(typeof g.bind=="function")return g.bind(f);try{return Function.prototype.bind.call(g,f)}catch{return function(){return Function.prototype.apply.apply(g,[f,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(f){return f==="debug"&&(f="log"),typeof console===t?!1:f==="trace"&&r?a:console[f]!==void 0?i(console,f):console.log!==void 0?i(console,"log"):e}function c(){for(var f=this.getLevel(),d=0;d<n.length;d++){var g=n[d];this[g]=d<f?e:this.methodFactory(g,f,this.name)}if(this.log=this.debug,typeof console===t&&f<this.levels.SILENT)return"No console available for logging"}function l(f){return function(){typeof console!==t&&(c.call(this),this[f].apply(this,arguments))}}function h(f,d,g){return u(f)||l.apply(this,arguments)}function p(f,d){var g=this,E,C,m,y="loglevel";typeof f=="string"?y+=":"+f:typeof f=="symbol"&&(y=void 0);function B(v){var x=(n[v]||"silent").toUpperCase();if(!(typeof window===t||!y)){try{window.localStorage[y]=x;return}catch{}try{window.document.cookie=encodeURIComponent(y)+"="+x+";"}catch{}}}function w(){var v;if(!(typeof window===t||!y)){try{v=window.localStorage[y]}catch{}if(typeof v===t)try{var x=window.document.cookie,F=encodeURIComponent(y),Q=x.indexOf(F+"=");Q!==-1&&(v=/^([^;]+)/.exec(x.slice(Q+F.length+1))[1])}catch{}return g.levels[v]===void 0&&(v=void 0),v}}function D(){if(!(typeof window===t||!y)){try{window.localStorage.removeItem(y)}catch{}try{window.document.cookie=encodeURIComponent(y)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function b(v){var x=v;if(typeof x=="string"&&g.levels[x.toUpperCase()]!==void 0&&(x=g.levels[x.toUpperCase()]),typeof x=="number"&&x>=0&&x<=g.levels.SILENT)return x;throw new TypeError("log.setLevel() called with invalid level: "+v)}g.name=f,g.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},g.methodFactory=d||h,g.getLevel=function(){return m??C??E},g.setLevel=function(v,x){return m=b(v),x!==!1&&B(m),c.call(g)},g.setDefaultLevel=function(v){C=b(v),w()||g.setLevel(v,!1)},g.resetLevel=function(){m=null,D(),c.call(g)},g.enableAll=function(v){g.setLevel(g.levels.TRACE,v)},g.disableAll=function(v){g.setLevel(g.levels.SILENT,v)},g.rebuild=function(){if(o!==g&&(E=b(o.getLevel())),c.call(g),o===g)for(var v in s)s[v].rebuild()},E=b(o?o.getLevel():"WARN");var I=w();I!=null&&(m=b(I)),c.call(g)}o=new p,o.getLogger=function(d){if(typeof d!="symbol"&&typeof d!="string"||d==="")throw new TypeError("You must supply a name when creating a logger.");var g=s[d];return g||(g=s[d]=new p(d,o.methodFactory)),g};var A=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=A),o},o.getLoggers=function(){return s},o.default=o,o})});var K0=It(Cu=>{"use strict";var EO=Cu&&Cu.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Cu,"__esModule",{value:!0});var mO=EO(tD());Cu.default=mO.default});var iD=It(mi=>{"use strict";var yO=mi&&mi.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),CO=mi&&mi.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),rD=mi&&mi.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),s=0;s<n.length;s++)n[s]!=="default"&&yO(r,t,n[s]);return CO(r,t),r}})(),nD=mi&&mi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(mi,"__esModule",{value:!0});var DO=rD(require("os")),Rc=rD(require("fs")),On=nD(Z0()),BO=nD(K0()),IO=e=>new Promise((t,r)=>{Rc.existsSync(e)?t():Rc.mkdir(e,n=>{n?r(n):t()})}),ea={darwin(e){return new Promise((t,r)=>{On.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(n,s,o){if(n)r(n);else{let i=o.toString().trim();if(i){r(new Error(i));return}let a=On.default.stripLine(s.toString(),1),u=a.slice(0,a.indexOf(`
877
877
  `)),c=On.default.stripLine(a,1),l=u.indexOf("rxbytes")>=0?10:8,h=On.default.extractColumns(c,[0,3,l],10).filter(p=>!!String(p[0]).match(/^(udp|tcp)/)).find(p=>{let A=String(p[1]).match(/\.(\d+)$/);return!!(A&&A[1]===String(e))});h&&h[2].length?t(parseInt(h[2],10)):r(new Error(`pid of port (${e}) not found`))}})})},linux(e){return new Promise((t,r)=>{On.default.exec("netstat -tunlp",function(s,o,i){if(s)r(s);else{let a=i.toString().trim();a&&BO.default.warn(a);let u=On.default.stripLine(o.toString(),2),c=On.default.extractColumns(u,[3,6],7).find(l=>{let h=String(l[0]).match(/:(\d+)$/);return!!(h&&h[1]===String(e))});if(c&&c[1]){let l=c[1].split("/",1)[0];l.length?t(parseInt(l,10)):r(new Error(`pid of port (${e}) not found`))}else r(new Error(`pid of port (${e}) not found`))}})})},win32(e){return new Promise((t,r)=>{On.default.exec("netstat -ano",function(n,s,o){if(n)r(n);else{let i=o.toString().trim();if(i){r(new Error(i));return}let a=On.default.stripLine(s.toString(),4),u=On.default.extractColumns(a,[1,4],5).find(c=>{let l=String(c[0]).match(/:(\d+)$/);return!!(l&&l[1]===String(e))});u&&u[1].length&&parseInt(u[1],10)>0?t(parseInt(u[1],10)):r(new Error(`pid of port (${e}) not found`))}})})},android(e){return new Promise((t,r)=>{let n=DO.tmpdir()+"/.find-process",s=n+"/"+process.pid,o='netstat -tunp >> "'+s+'"';IO(n).then(()=>{On.default.exec(o,()=>{Rc.readFile(s,"utf8",(i,a)=>{if(Rc.unlink(s,()=>{}),i)r(i);else{a=On.default.stripLine(a,2);let u=On.default.extractColumns(a,[3,6],7).find(c=>{let l=String(c[0]).match(/:(\d+)$/);return!!(l&&l[1]===String(e))});if(u&&u[1]){let c=u[1].split("/",1)[0];c.length?t(parseInt(c,10)):r(new Error(`pid of port (${e}) not found`))}else r(new Error(`pid of port (${e}) not found`))}})})})})}};ea.freebsd=ea.darwin;ea.sunos=ea.darwin;function wO(e){let t=process.platform;return new Promise((r,n)=>{if(!(t in ea))return n(new Error(`platform ${t} is unsupported`));let s=ea[t];s(e).then(r,n)})}mi.default=wO});var aD=It(yi=>{"use strict";var bO=yi&&yi.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),xO=yi&&yi.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),vO=yi&&yi.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),s=0;s<n.length;s++)n[s]!=="default"&&bO(r,t,n[s]);return xO(r,t),r}})(),FO=yi&&yi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yi,"__esModule",{value:!0});var Tc=vO(require("path")),Fs=FO(Z0());function X0(e,t){return t?e&&e.match?e.match(t)!==null:!1:!0}function sD(e){let t=e.split(Tc.sep),r=t[t.length-1];r&&(t[t.length-1]=r.split(" ")[0]);let n=[];for(let s of t){let o=s.indexOf(" -");if(o>=0){n.push(s.substring(0,o).trim());break}else if(s.endsWith(" ")){n.push(s.trim());break}n.push(s)}return n.join(Tc.sep)}function oD(e){if(process.platform==="darwin"){let t=e.indexOf(".app/");if(t>=0)return Tc.basename(e.substring(0,t))}return Tc.basename(e)}var so={darwin(e){return new Promise((t,r)=>{let n;"pid"in e&&e.pid!==void 0?n=`ps -p ${e.pid} -ww -o pid,ppid,uid,gid,args`:n="ps ax -ww -o pid,ppid,uid,gid,args",Fs.default.exec(n,function(s,o,i){if(s)"pid"in e&&e.pid!==void 0?t([]):r(s);else{let a=i.toString().trim();if(a){r(new Error(a));return}let u=Fs.default.stripLine(o.toString(),1),l=Fs.default.extractColumns(u,[0,1,2,3,4],5).filter(h=>h[0]&&e.pid!==void 0?h[0]===String(e.pid):h[4]&&e.name?X0(h[4],e.name):!!h[0]).map(h=>{let p=String(h[4]),A=sD(p);return{pid:parseInt(h[0],10),ppid:parseInt(h[1],10),uid:parseInt(h[2],10),gid:parseInt(h[3],10),name:oD(A),bin:A,cmd:h[4]}});e.config.strict&&e.name&&(l=l.filter(h=>h.name===e.name)),t(l)}})})},win32(e){return new Promise((t,r)=>{let n="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",s=[],o=Fs.default.spawn("powershell.exe",["/c",n],{detached:!1,windowsHide:!0});o.stdout.on("data",i=>{s.push(i.toString())}),o.on("error",i=>{r(new Error("Command '"+n+"' failed with reason: "+i.toString()))}),o.on("close",i=>{if(i!==0)return r(new Error("Command '"+n+"' terminated with code: "+i));let a=Fs.default.parseTable(s.join("")).filter(u=>{if(e.pid!==void 0)return u.ProcessId===String(e.pid);if(e.name){let c=u.Name||"";return e.config.strict?c===e.name||c.endsWith(".exe")&&c.slice(0,-4)===e.name:X0(u.CommandLine||c,e.name)}else return!0}).map(u=>({pid:parseInt(u.ProcessId,10),ppid:parseInt(u.ParentProcessId,10),bin:u.ExecutablePath,name:u.Name||"",cmd:u.CommandLine}));t(a)})})},android(e){return new Promise((t,r)=>{Fs.default.exec("ps",function(s,o,i){if(s)e.pid!==void 0?t([]):r(s);else{let a=i.toString().trim();if(a){r(new Error(a));return}let u=Fs.default.stripLine(o.toString(),1),l=Fs.default.extractColumns(u,[0,3],4).filter(h=>h[0]&&e.pid!==void 0?h[0]===String(e.pid):h[1]&&e.name?X0(h[1],e.name):!!h[0]).map(h=>{let p=String(h[1]),A=sD(p);return{pid:parseInt(h[0],10),ppid:0,name:oD(A),bin:A,cmd:h[1]}});e.config.strict&&e.name&&(l=l.filter(h=>h.name===e.name)),t(l)}})})}};so.linux=so.darwin;so.sunos=so.darwin;so.freebsd=so.darwin;function SO(e){let t=process.platform,r=so[t];return r?r(e):Promise.reject(new Error(`Platform "${t}" is not supported`))}yi.default=SO});var lD=It(Du=>{"use strict";var td=Du&&Du.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Du,"__esModule",{value:!0});var QO=td(iD()),uD=td(aD()),_O=td(K0()),ed={port(e,t){return(0,QO.default)(e).then(r=>ed.pid(r,t),()=>[])},pid(e,t){return(0,uD.default)({pid:e,config:t})},name(e,t){return(0,uD.default)({name:e,config:t,skipSelf:!0})}};function RO(e,t,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&_O.default.setLevel(n.logLevel),new Promise((s,o)=>{if(!(e in ed))o(new Error(`do not support find by "${e}"`));else{let i=/^\d+$/.test(String(t));e==="pid"&&!i?o(new Error("pid must be a number")):e==="port"&&!i?o(new Error("port must be a number")):ed[e](t,n).then(s,o)}})}Du.default=RO});var AD=It(cD=>{"use strict";Object.defineProperty(cD,"__esModule",{value:!0})});var hD=It(Ci=>{"use strict";var TO=Ci&&Ci.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),NO=Ci&&Ci.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&TO(t,e,r)},kO=Ci&&Ci.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ci,"__esModule",{value:!0});Ci.default=void 0;var OO=lD();Object.defineProperty(Ci,"default",{enumerable:!0,get:function(){return kO(OO).default}});NO(AD(),Ci)});function fD(){let e=0;(0,En.existsSync)(nn.REFERENCE_COUNT_FILE)&&(e=parseInt((0,En.readFileSync)(nn.REFERENCE_COUNT_FILE,"utf-8"))||0),e++,(0,En.writeFileSync)(nn.REFERENCE_COUNT_FILE,e.toString())}function rd(){let e=0;(0,En.existsSync)(nn.REFERENCE_COUNT_FILE)&&(e=parseInt((0,En.readFileSync)(nn.REFERENCE_COUNT_FILE,"utf-8"))||0),e=Math.max(0,e-1),(0,En.writeFileSync)(nn.REFERENCE_COUNT_FILE,e.toString())}function pD(){return(0,En.existsSync)(nn.REFERENCE_COUNT_FILE)&&parseInt((0,En.readFileSync)(nn.REFERENCE_COUNT_FILE,"utf-8"))||0}function oo(){if(!(0,En.existsSync)(nn.PID_FILE))return!1;let e;try{let t=(0,En.readFileSync)(nn.PID_FILE,"utf-8");if(e=parseInt(t,10),isNaN(e))return ts(),!1}catch{return!1}try{if(process.platform==="win32"){let t=`tasklist /FI "PID eq ${e}"`;return(0,dD.execSync)(t,{stdio:"pipe"}).toString().includes(e.toString())?!0:(ts(),!1)}else return process.kill(e,0),!0}catch{return ts(),!1}}function ts(){if((0,En.existsSync)(nn.PID_FILE))try{require("fs").unlinkSync(nn.PID_FILE)}catch{}}function gD(){if(!(0,En.existsSync)(nn.PID_FILE))return null;try{let e=parseInt((0,En.readFileSync)(nn.PID_FILE,"utf-8"));return isNaN(e)?null:e}catch{return null}}async function Nc(){let e=gD(),t=await oo(),n=(await Ln()).PORT||3456;return{running:t,pid:e,port:n,endpoint:`http://127.0.0.1:${n}`,pidFile:nn.PID_FILE,referenceCount:pD()}}async function ED(){if(pD()===0){let t=gD();if(t&&await oo())try{process.kill(t,"SIGTERM")}catch{}}}var En,nn,LO,dD,Bu=dl(()=>{"use strict";En=require("fs"),nn=Yt(li());Ss();LO=Yt(hD()),dD=require("child_process")});var bD={};Ap(bD,{backupConfigFile:()=>ID,getSettingsPath:()=>ad,initConfig:()=>PO,initDir:()=>BD,readConfigFile:()=>Ln,restartService:()=>od,run:()=>sd,writeConfigFile:()=>wD});var Fn,mD,Qs,yD,CD,Fr,DD,ta,id,nd,Iu,BD,Ln,ID,wD,PO,sd,od,ad,Ss=dl(()=>{"use strict";Fn=Yt(require("node:fs/promises")),mD=Yt(ml()),Qs=Yt(require("node:path")),yD=require("node:crypto"),CD=Yt(require("node:os")),Fr=Yt(li()),DD=Yt(VC()),ta=require("fs");ZC();W0();id=require("child_process");Bu();nd=e=>{if(typeof e=="string")return e.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g,(t,r,n)=>{let s=r||n;return process.env[s]||t});if(Array.isArray(e))return e.map(nd);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=nd(n);return t}return e},Iu=async e=>{try{await Fn.default.access(e)}catch{await Fn.default.mkdir(e,{recursive:!0})}},BD=async()=>{await Iu(Fr.HOME_DIR),await Iu(Fr.PLUGINS_DIR),await Iu(Fr.PRESETS_DIR),await Iu(Qs.default.join(Fr.HOME_DIR,"logs"))},Ln=async()=>{try{let e=await Fn.default.readFile(Fr.CONFIG_FILE,"utf-8");try{let t=mD.default.parse(e);return nd(t)}catch(t){console.error(`Failed to parse config file at ${Fr.CONFIG_FILE}`),console.error("Error details:",t.message),console.error("Please check your config file syntax."),process.exit(1)}}catch(e){if(e.code==="ENOENT")try{await BD();let t=await ID();t&&console.log(`Backed up existing configuration file to ${t}`);let r={PORT:3456,Providers:[],Router:{}};return await wD(r),console.log("Created minimal default configuration file at ~/.claude-code-router/config.json"),console.log("Please edit this file with your actual configuration."),r}catch(t){console.error("Failed to create default configuration:",t.message),process.exit(1)}else console.error(`Failed to read config file at ${Fr.CONFIG_FILE}`),console.error("Error details:",e.message),process.exit(1)}},ID=async()=>{try{if(await Fn.default.access(Fr.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=`${Fr.CONFIG_FILE}.${e}.bak`;await Fn.default.copyFile(Fr.CONFIG_FILE,t);try{let r=Qs.default.dirname(Fr.CONFIG_FILE),n=Qs.default.basename(Fr.CONFIG_FILE),o=(await Fn.default.readdir(r)).filter(i=>i.startsWith(n)&&i.endsWith(".bak")).sort().reverse();if(o.length>3)for(let i=3;i<o.length;i++){let a=Qs.default.join(r,o[i]);await Fn.default.unlink(a)}}catch(r){console.warn("Failed to clean up old backups:",r)}return t}}catch(e){console.error("Failed to backup config file:",e)}return null},wD=async e=>{await Iu(Fr.HOME_DIR);let t=`${JSON.stringify(e,null,2)}`;await Fn.default.writeFile(Fr.CONFIG_FILE,t)},PO=async()=>{let e=await Ln();return Object.assign(process.env,e),e},sd=async(e=[])=>{if(oo()){console.log("claude-code-router server is running");return}let r=await(0,DD.getServer)(),n=r.app;(0,ta.writeFileSync)(Fr.PID_FILE,process.pid.toString()),n.post("/api/update/perform",async()=>await zC()),n.get("/api/update/check",async()=>await WC(Qc)),n.post("/api/restart",async()=>(setTimeout(async()=>{(0,id.spawn)("ccr",["restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await r.start()},od=async()=>{try{let r=parseInt((0,ta.readFileSync)(Fr.PID_FILE,"utf-8"));if(process.kill(r),ts(),(0,ta.existsSync)(Fr.REFERENCE_COUNT_FILE))try{await Fn.default.unlink(Fr.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),ts()}console.log("Starting claude code router service...");let e=Qs.default.join(__dirname,"cli.js"),t=(0,id.spawn)("node",[e,"start"],{detached:!0,stdio:"ignore"});t.on("error",r=>{throw console.error("Failed to start service:",r),r}),t.unref(),console.log("\u2705 Service started successfully in the background.")},ad=async e=>{let t=(0,yD.createHash)("sha256").update(e,"utf-8").digest("hex"),r=Qs.default.join(CD.default.tmpdir(),"claude-code-router"),n=`ccr-settings-${t}.json`,s=Qs.default.join(r,n);try{await Fn.default.access(r)}catch{await Fn.default.mkdir(r,{recursive:!0})}try{return await Fn.default.access(s),s}catch{return await Fn.default.writeFile(s,e,"utf-8"),s}}});var bu=It((s7,RD)=>{var MO=require("node:tty"),$O=MO?.WriteStream?.prototype?.hasColors?.()??!1,Xt=(e,t)=>{if(!$O)return s=>s;let r=`\x1B[${e}m`,n=`\x1B[${t}m`;return s=>{let o=s+"",i=o.indexOf(n);if(i===-1)return r+o+n;let a=r,u=0,l=(t===22?n:"")+r;for(;i!==-1;)a+=o.slice(u,i)+l,u=i+n.length,i=o.indexOf(n,u);return a+=o.slice(u)+n,a}},Kt={};Kt.reset=Xt(0,0);Kt.bold=Xt(1,22);Kt.dim=Xt(2,22);Kt.italic=Xt(3,23);Kt.underline=Xt(4,24);Kt.overline=Xt(53,55);Kt.inverse=Xt(7,27);Kt.hidden=Xt(8,28);Kt.strikethrough=Xt(9,29);Kt.black=Xt(30,39);Kt.red=Xt(31,39);Kt.green=Xt(32,39);Kt.yellow=Xt(33,39);Kt.blue=Xt(34,39);Kt.magenta=Xt(35,39);Kt.cyan=Xt(36,39);Kt.white=Xt(37,39);Kt.gray=Xt(90,39);Kt.bgBlack=Xt(40,49);Kt.bgRed=Xt(41,49);Kt.bgGreen=Xt(42,49);Kt.bgYellow=Xt(43,49);Kt.bgBlue=Xt(44,49);Kt.bgMagenta=Xt(45,49);Kt.bgCyan=Xt(46,49);Kt.bgWhite=Xt(47,49);Kt.bgGray=Xt(100,49);Kt.redBright=Xt(91,39);Kt.greenBright=Xt(92,39);Kt.yellowBright=Xt(93,39);Kt.blueBright=Xt(94,39);Kt.magentaBright=Xt(95,39);Kt.cyanBright=Xt(96,39);Kt.whiteBright=Xt(97,39);Kt.bgRedBright=Xt(101,49);Kt.bgGreenBright=Xt(102,49);Kt.bgYellowBright=Xt(103,49);Kt.bgBlueBright=Xt(104,49);Kt.bgMagentaBright=Xt(105,49);Kt.bgCyanBright=Xt(106,49);Kt.bgWhiteBright=Xt(107,49);RD.exports=Kt});var UD=It((w7,PD)=>{"use strict";PD.exports=WO;function JO(e){let t={defaultWidth:0,output:process.stdout,tty:require("tty")};return e?(Object.keys(t).forEach(function(r){e[r]||(e[r]=t[r])}),e):t}function WO(e){let t=JO(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let r=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(r)&&r!==0)return r}return t.defaultWidth}});var $D=It((b7,MD)=>{"use strict";MD.exports=({onlyFirst:e=!1}={})=>{let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}});var jc=It((x7,HD)=>{"use strict";var zO=$D();HD.exports=e=>typeof e=="string"?e.replace(zO(),""):e});var GD=It((v7,Ad)=>{"use strict";var jD=e=>Number.isNaN(e)?!1:e>=4352&&(e<=4447||e===9001||e===9002||11904<=e&&e<=12871&&e!==12351||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141);Ad.exports=jD;Ad.exports.default=jD});var qD=It((F7,VD)=>{"use strict";VD.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 JD=It((S7,hd)=>{"use strict";var ZO=jc(),KO=GD(),XO=qD(),YD=e=>{if(typeof e!="string"||e.length===0||(e=ZO(e),e.length===0))return 0;e=e.replace(XO()," ");let t=0;for(let r=0;r<e.length;r++){let n=e.codePointAt(r);n<=31||n>=127&&n<=159||n>=768&&n<=879||(n>65535&&r++,t+=KO(n)?2:1)}return t};hd.exports=YD;hd.exports.default=YD});var zD=It((Q7,WD)=>{"use strict";WD.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 dd=It((_7,KD)=>{var xu=zD(),ZD={};for(let e of Object.keys(xu))ZD[xu[e]]=e;var kt={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"]}};KD.exports=kt;for(let e of Object.keys(kt)){if(!("channels"in kt[e]))throw new Error("missing channels property: "+e);if(!("labels"in kt[e]))throw new Error("missing channel labels property: "+e);if(kt[e].labels.length!==kt[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=kt[e];delete kt[e].channels,delete kt[e].labels,Object.defineProperty(kt[e],"channels",{value:t}),Object.defineProperty(kt[e],"labels",{value:r})}kt.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,s=Math.min(t,r,n),o=Math.max(t,r,n),i=o-s,a,u;o===s?a=0:t===o?a=(r-n)/i:r===o?a=2+(n-t)/i:n===o&&(a=4+(t-r)/i),a=Math.min(a*60,360),a<0&&(a+=360);let c=(s+o)/2;return o===s?u=0:c<=.5?u=i/(o+s):u=i/(2-o-s),[a,u*100,c*100]};kt.rgb.hsv=function(e){let t,r,n,s,o,i=e[0]/255,a=e[1]/255,u=e[2]/255,c=Math.max(i,a,u),l=c-Math.min(i,a,u),h=function(p){return(c-p)/6/l+1/2};return l===0?(s=0,o=0):(o=l/c,t=h(i),r=h(a),n=h(u),i===c?s=n-r:a===c?s=1/3+t-n:u===c&&(s=2/3+r-t),s<0?s+=1:s>1&&(s-=1)),[s*360,o*100,c*100]};kt.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],s=kt.rgb.hsl(e)[0],o=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[s,o*100,n*100]};kt.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,s=Math.min(1-t,1-r,1-n),o=(1-t-s)/(1-s)||0,i=(1-r-s)/(1-s)||0,a=(1-n-s)/(1-s)||0;return[o*100,i*100,a*100,s*100]};function eL(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}kt.rgb.keyword=function(e){let t=ZD[e];if(t)return t;let r=1/0,n;for(let s of Object.keys(xu)){let o=xu[s],i=eL(e,o);i<r&&(r=i,n=s)}return n};kt.keyword.rgb=function(e){return xu[e]};kt.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let s=t*.4124+r*.3576+n*.1805,o=t*.2126+r*.7152+n*.0722,i=t*.0193+r*.1192+n*.9505;return[s*100,o*100,i*100]};kt.rgb.lab=function(e){let t=kt.rgb.xyz(e),r=t[0],n=t[1],s=t[2];r/=95.047,n/=100,s/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let o=116*n-16,i=500*(r-n),a=200*(n-s);return[o,i,a]};kt.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,s,o,i;if(r===0)return i=n*255,[i,i,i];n<.5?s=n*(1+r):s=n+r-n*r;let a=2*n-s,u=[0,0,0];for(let c=0;c<3;c++)o=t+1/3*-(c-1),o<0&&o++,o>1&&o--,6*o<1?i=a+(s-a)*6*o:2*o<1?i=s:3*o<2?i=a+(s-a)*(2/3-o)*6:i=a,u[c]=i*255;return u};kt.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,s=r,o=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,s*=o<=1?o:2-o;let i=(n+r)/2,a=n===0?2*s/(o+s):2*r/(n+r);return[t,a*100,i*100]};kt.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,s=Math.floor(t)%6,o=t-Math.floor(t),i=255*n*(1-r),a=255*n*(1-r*o),u=255*n*(1-r*(1-o));switch(n*=255,s){case 0:return[n,u,i];case 1:return[a,n,i];case 2:return[i,n,u];case 3:return[i,a,n];case 4:return[u,i,n];case 5:return[n,i,a]}};kt.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,s=Math.max(n,.01),o,i;i=(2-r)*n;let a=(2-r)*s;return o=r*s,o/=a<=1?a:2-a,o=o||0,i/=2,[t,o*100,i*100]};kt.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,s=r+n,o;s>1&&(r/=s,n/=s);let i=Math.floor(6*t),a=1-n;o=6*t-i,(i&1)!==0&&(o=1-o);let u=r+o*(a-r),c,l,h;switch(i){default:case 6:case 0:c=a,l=u,h=r;break;case 1:c=u,l=a,h=r;break;case 2:c=r,l=a,h=u;break;case 3:c=r,l=u,h=a;break;case 4:c=u,l=r,h=a;break;case 5:c=a,l=r,h=u;break}return[c*255,l*255,h*255]};kt.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,s=e[3]/100,o=1-Math.min(1,t*(1-s)+s),i=1-Math.min(1,r*(1-s)+s),a=1-Math.min(1,n*(1-s)+s);return[o*255,i*255,a*255]};kt.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,s,o,i;return s=t*3.2406+r*-1.5372+n*-.4986,o=t*-.9689+r*1.8758+n*.0415,i=t*.0557+r*-.204+n*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),i=Math.min(Math.max(0,i),1),[s*255,o*255,i*255]};kt.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*r-16,o=500*(t-r),i=200*(r-n);return[s,o,i]};kt.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],s,o,i;o=(t+16)/116,s=r/500+o,i=o-n/200;let a=o**3,u=s**3,c=i**3;return o=a>.008856?a:(o-16/116)/7.787,s=u>.008856?u:(s-16/116)/7.787,i=c>.008856?c:(i-16/116)/7.787,s*=95.047,o*=100,i*=108.883,[s,o,i]};kt.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],s;s=Math.atan2(n,r)*360/2/Math.PI,s<0&&(s+=360);let i=Math.sqrt(r*r+n*n);return[t,i,s]};kt.lch.lab=function(e){let t=e[0],r=e[1],s=e[2]/360*2*Math.PI,o=r*Math.cos(s),i=r*Math.sin(s);return[t,o,i]};kt.rgb.ansi16=function(e,t=null){let[r,n,s]=e,o=t===null?kt.rgb.hsv(e)[2]:t;if(o=Math.round(o/50),o===0)return 30;let i=30+(Math.round(s/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return o===2&&(i+=60),i};kt.hsv.ansi16=function(e){return kt.rgb.ansi16(kt.hsv.rgb(e),e[2])};kt.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};kt.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,s=(t>>1&1)*r*255,o=(t>>2&1)*r*255;return[n,s,o]};kt.ansi256.rgb=function(e){if(e>=232){let o=(e-232)*10+8;return[o,o,o]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,s=t%6/5*255;return[r,n,s]};kt.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};kt.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),s=n>>16&255,o=n>>8&255,i=n&255;return[s,o,i]};kt.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,s=Math.max(Math.max(t,r),n),o=Math.min(Math.min(t,r),n),i=s-o,a,u;return i<1?a=o/(1-i):a=0,i<=0?u=0:s===t?u=(r-n)/i%6:s===r?u=2+(n-t)/i:u=4+(t-r)/i,u/=6,u%=1,[u*360,i*100,a*100]};kt.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),s=0;return n<1&&(s=(r-.5*n)/(1-n)),[e[0],n*100,s*100]};kt.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,s=0;return n<1&&(s=(r-n)/(1-n)),[e[0],n*100,s*100]};kt.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let s=[0,0,0],o=t%1*6,i=o%1,a=1-i,u=0;switch(Math.floor(o)){case 0:s[0]=1,s[1]=i,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=i;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=i,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return u=(1-r)*n,[(r*s[0]+u)*255,(r*s[1]+u)*255,(r*s[2]+u)*255]};kt.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),s=0;return n>0&&(s=t/n),[e[0],s*100,n*100]};kt.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,s=0;return n>0&&n<.5?s=t/(2*n):n>=.5&&n<1&&(s=t/(2*(1-n))),[e[0],s*100,n*100]};kt.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};kt.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,s=n-t,o=0;return s<1&&(o=(n-s)/(1-s)),[e[0],s*100,o*100]};kt.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};kt.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};kt.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};kt.gray.hsl=function(e){return[0,0,e[0]]};kt.gray.hsv=kt.gray.hsl;kt.gray.hwb=function(e){return[0,100,e[0]]};kt.gray.cmyk=function(e){return[0,0,0,e[0]]};kt.gray.lab=function(e){return[e[0],0,0]};kt.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};kt.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var eB=It((R7,XD)=>{var Gc=dd();function tL(){let e={},t=Object.keys(Gc);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function rL(e){let t=tL(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),s=Object.keys(Gc[n]);for(let o=s.length,i=0;i<o;i++){let a=s[i],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function nL(e,t){return function(r){return t(e(r))}}function iL(e,t){let r=[t[e].parent,e],n=Gc[t[e].parent][e],s=t[e].parent;for(;t[s].parent;)r.unshift(t[s].parent),n=nL(Gc[t[s].parent][s],n),s=t[s].parent;return n.conversion=r,n}XD.exports=function(e){let t=rL(e),r={},n=Object.keys(t);for(let s=n.length,o=0;o<s;o++){let i=n[o];t[i].parent!==null&&(r[i]=iL(i,t))}return r}});var rB=It((T7,tB)=>{var fd=dd(),sL=eB(),ia={},oL=Object.keys(fd);function aL(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function uL(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let s=e(r);if(typeof s=="object")for(let o=s.length,i=0;i<o;i++)s[i]=Math.round(s[i]);return s};return"conversion"in e&&(t.conversion=e.conversion),t}oL.forEach(e=>{ia[e]={},Object.defineProperty(ia[e],"channels",{value:fd[e].channels}),Object.defineProperty(ia[e],"labels",{value:fd[e].labels});let t=sL(e);Object.keys(t).forEach(n=>{let s=t[n];ia[e][n]=uL(s),ia[e][n].raw=aL(s)})});tB.exports=ia});var uB=It((N7,aB)=>{"use strict";var nB=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,iB=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},sB=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},Vc=e=>e,oB=(e,t,r)=>[e,t,r],sa=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},pd,oa=(e,t,r,n)=>{pd===void 0&&(pd=rB());let s=n?10:0,o={};for(let[i,a]of Object.entries(pd)){let u=i==="ansi16"?"ansi":i;i===t?o[u]=e(r,s):typeof a=="object"&&(o[u]=e(a[t],s))}return o};function lL(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[s,o]of Object.entries(n))t[s]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},n[s]=t[s],e.set(o[0],o[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",sa(t.color,"ansi",()=>oa(nB,"ansi16",Vc,!1)),sa(t.color,"ansi256",()=>oa(iB,"ansi256",Vc,!1)),sa(t.color,"ansi16m",()=>oa(sB,"rgb",oB,!1)),sa(t.bgColor,"ansi",()=>oa(nB,"ansi16",Vc,!0)),sa(t.bgColor,"ansi256",()=>oa(iB,"ansi256",Vc,!0)),sa(t.bgColor,"ansi16m",()=>oa(sB,"rgb",oB,!0)),t}Object.defineProperty(aB,"exports",{enumerable:!0,get:lL})});var AB=It((k7,cB)=>{"use strict";var vu=JD(),cL=jc(),AL=uB(),Ed=new Set(["\x1B","\x9B"]),hL=39,lB=e=>`${Ed.values().next().value}[${e}m`,dL=e=>e.split(" ").map(t=>vu(t)),gd=(e,t,r)=>{let n=[...t],s=!1,o=vu(cL(e[e.length-1]));for(let[i,a]of n.entries()){let u=vu(a);if(o+u<=r?e[e.length-1]+=a:(e.push(a),o=0),Ed.has(a))s=!0;else if(s&&a==="m"){s=!1;continue}s||(o+=u,o===r&&i<n.length-1&&(e.push(""),o=0))}!o&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},fL=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(vu(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},pL=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",s="",o,i=dL(e),a=[""];for(let[u,c]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimLeft());let l=vu(a[a.length-1]);if(u!==0&&(l>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),l=0),(l>0||r.trim===!1)&&(a[a.length-1]+=" ",l++)),r.hard&&i[u]>t){let h=t-l,p=1+Math.floor((i[u]-h-1)/t);Math.floor((i[u]-1)/t)<p&&a.push(""),gd(a,c,t);continue}if(l+i[u]>t&&l>0&&i[u]>0){if(r.wordWrap===!1&&l<t){gd(a,c,t);continue}a.push("")}if(l+i[u]>t&&r.wordWrap===!1){gd(a,c,t);continue}a[a.length-1]+=c}r.trim!==!1&&(a=a.map(fL)),n=a.join(`
878
878
  `);for(let[u,c]of[...n].entries()){if(s+=c,Ed.has(c)){let h=parseFloat(/\d[^m]*/.exec(n.slice(u,u+4)));o=h===hL?null:h}let l=AL.codes.get(Number(o));o&&l&&(n[u+1]===`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wengine-ai/claude-code-router",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
4
4
  "description": "CLI for Claude Code Router",
5
5
  "bin": {
6
6
  "ccr": "dist/cli.js"
@@ -34,7 +34,7 @@
34
34
  "LICENSE"
35
35
  ],
36
36
  "dependencies": {
37
- "@wengine-ai/llms": "^1.0.55"
37
+ "@wengine-ai/llms": "^1.0.57"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "node": ">=18.0.0"