@caeliq/claude-code-router 2.0.0 → 2.0.1

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 +2 -2
  2. package/package.json +4 -3
package/dist/cli.js CHANGED
@@ -580,7 +580,7 @@ ${this.toMarkdown(i,e+1)}`:`${r}- ${i}`).join(`
580
580
  `):typeof t=="object"&&t!==null?Object.entries(t).map(([i,A])=>typeof A=="object"&&A!==null?`${r}${i}:
581
581
  ${this.toMarkdown(A,e+1)}`:`${r}${i}: ${A}`).join(`
582
582
  `):`${r}${t}`}async output(t,e={}){try{let r=this.formatData(t,e);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}}}}),EV,IV=Xi(()=>{"use strict";EV=class{type="webhook";config;defaultTimeout=3e4;logger=null;setLogger(t){this.logger=t,this.logger&&(typeof this.logger.info=="function"&&(this.logger.info=this.logger.info.bind(this.logger)),typeof this.logger.warn=="function"&&(this.logger.warn=this.logger.warn.bind(this.logger)),typeof this.logger.error=="function"&&(this.logger.error=this.logger.error.bind(this.logger)))}constructor(t){if(!t.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...t}}buildHeaders(){let t={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(t.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let e=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");t.Authorization=`Basic ${e}`}break;case"custom":this.config.auth.custom&&(t[this.config.auth.custom.header]=this.config.auth.custom.value);break}return t}buildBody(t,e){let{format:r="json",timestamp:i=!0,prefix:A,metadata:n}=e||{},s={data:t};return i&&(s.timestamp=new Date().toISOString()),A&&(s.prefix=A),n&&Object.keys(n).length>0&&(s.metadata=n),s}async sendRequest(t,e,r,i,A){let n=new AbortController,s=setTimeout(()=>n.abort(),A);try{let o=await fetch(t,{method:e,headers:r,body:JSON.stringify(i),signal:n.signal});if(clearTimeout(s),!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);return o}catch(o){throw clearTimeout(s),o}}delay(t){return new Promise(e=>setTimeout(e,t))}async sendWithRetry(t,e,r,i,A,n){let s=null;for(let o=1;o<=n.maxAttempts;o++)try{return await this.sendRequest(t,e,r,i,A)}catch(a){if(s=a,o===n.maxAttempts)break;let u=n.backoffMs*Math.pow(2,o-1);(this.logger?.warn??console.warn)(`[WebhookOutputHandler] Request failed (attempt ${o}/${n.maxAttempts}), retrying in ${u}ms...`,a.message),await this.delay(u)}throw s}async output(t,e={}){let r=e.timeout||this.defaultTimeout;try{let i=this.buildHeaders(),A=this.buildBody(t,e),n=await this.sendWithRetry(this.config.url,this.config.method,i,A,r,this.config.retry);return!0}catch(i){let A=i instanceof Error?i.message:String(i);if(this.config.silent)return(this.logger?.error??console.error)(`[WebhookOutputHandler] Failed to send data: ${A}`),!1;throw new Error(`Webhook output failed: ${A}`)}}}}),pV,BV=Xi(()=>{"use strict";pV=class{type="temp-file";config;baseDir;constructor(t={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...t};let e=(0,Qwe.tmpdir)();this.baseDir=(0,L5.join)(e,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,Wk.existsSync)(this.baseDir)||(0,Wk.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(t){try{let e=t.match(/_session_([a-f0-9-]+)/i);return e?e[1]:null}catch{return null}}getFilePath(t){let e=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",i;if(this.config.includeTimestamp){let A=Date.now();i=`${e}-${t}-${A}${r}`}else i=`${e}-${t}${r}`;return(0,L5.join)(this.baseDir,i)}async output(t,e={}){try{let r=e.metadata?.sessionId;if(!r)return!1;let i={...t,timestamp:Date.now(),sessionId:r},A=this.getFilePath(r);return(0,Wk.writeFileSync)(A,JSON.stringify(i,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),oq,wp,hve=Xi(()=>{"use strict";CV(),IV(),BV(),oq=class{handlers=new Map;defaultOptions={};logger=null;setLogger(t){this.logger=t,this.logger&&(typeof this.logger.info=="function"&&(this.logger.info=this.logger.info.bind(this.logger)),typeof this.logger.warn=="function"&&(this.logger.warn=this.logger.warn.bind(this.logger)),typeof this.logger.error=="function"&&(this.logger.error=this.logger.error.bind(this.logger)))}registerHandler(t,e){this.handlers.set(t,e)}registerHandlers(t){for(let e of t)if(e.enabled!==!1)try{let r=this.createHandler(e),i=e.type+"_"+Date.now();this.registerHandler(i,r)}catch(r){(this.logger?.error??console.error)(`[OutputManager] Failed to register ${e.type} handler:`,r)}}createHandler(t){let e;switch(t.type){case"console":e=new fV(t.config);break;case"webhook":e=new EV(t.config);break;case"temp-file":e=new pV(t.config);break;default:throw new Error(`Unknown output handler type: ${t.type}`)}return this.logger&&typeof e.setLogger=="function"&&e.setLogger(this.logger),e}unregisterHandler(t){return this.handlers.delete(t)}getHandler(t){return this.handlers.get(t)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(t){this.defaultOptions={...this.defaultOptions,...t}}getDefaultOptions(){return{...this.defaultOptions}}async output(t,e){let r={...this.defaultOptions,...e},i={success:[],failed:[]},A=Array.from(this.handlers.entries()).map(async([n,s])=>{try{await s.output(t,r)?i.success.push(n):i.failed.push(n)}catch(o){(this.logger?.error??console.error)(`[OutputManager] Handler ${n} failed:`,o),i.failed.push(n)}});return await Promise.all(A),i}async outputTo(t,e,r){let i={...this.defaultOptions,...r},A={success:[],failed:[]},n=t.map(async s=>{let o=this.handlers.get(s);if(!o){(this.logger?.warn??console.warn)(`[OutputManager] Handler ${s} not found`),A.failed.push(s);return}try{await o.output(e,i)?A.success.push(s):A.failed.push(s)}catch(a){(this.logger?.error??console.error)(`[OutputManager] Handler ${s} failed:`,a),A.failed.push(s)}});return await Promise.all(n),A}async outputToType(t,e,r){let i=Array.from(this.handlers.entries()).filter(([A,n])=>n.type===t).map(([A])=>A);return this.outputTo(i,e,r)}},wp=new oq}),dve=Ja(s9(),1),aq=class{config={};options;logger;constructor(t={jsonPath:"./config.json"}){this.options={envPath:t.envPath||".env",jsonPath:t.jsonPath,useEnvFile:!1,useJsonFile:t.useJsonFile!==!1,useEnvironmentVariables:t.useEnvironmentVariables!==!1,...t},this.logger=t.logger,this.logger&&(typeof this.logger.info=="function"&&(this.logger.info=this.logger.info.bind(this.logger)),typeof this.logger.warn=="function"&&(this.logger.warn=this.logger.warn.bind(this.logger)),typeof this.logger.error=="function"&&(this.logger.error=this.logger.error.bind(this.logger))),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 t=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,U5.join)(process.cwd(),this.options.jsonPath);if((0,zk.existsSync)(t))try{let e=(0,zk.readFileSync)(t,"utf-8"),r=dve.default.parse(e);this.config={...this.config,...r},(this.logger?.info??console.log)(`Loaded JSON config from: ${t}`)}catch(e){(this.logger?.warn??console.warn)(`Failed to load JSON config from ${t}:`,e)}else(this.logger?.warn??console.warn)(`JSON config file not found: ${t}`)}loadEnvConfig(){let t=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,U5.join)(process.cwd(),this.options.envPath);if((0,zk.existsSync)(t))try{let e=(0,Dwe.config)({path:t});e.parsed&&(this.config={...this.config,...this.parseEnvConfig(e.parsed)})}catch(e){(this.logger?.warn??console.warn)(`Failed to load .env config from ${t}:`,e)}}loadEnvironmentVariables(){let t=this.parseEnvConfig(process.env);this.config={...this.config,...t}}parseEnvConfig(t){let e={};return Object.assign(e,t),e}isAbsolutePath(t){return t.startsWith("/")||t.includes(":")}get(t,e){let r=this.config[t];return r!==void 0?r:e}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(t){return this.config[t]!==void 0}set(t,e){this.config[t]=e}reload(){this.config={},this.loadConfig()}getConfigSummary(){let t=[];return this.options.initialConfig&&t.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&t.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&t.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&t.push("Environment Variables"),`Config sources: ${t.join(", ")}`}};function Xs(t,e=500,r="internal_error",i="api_error",A){let n=new Error(t);return n.statusCode=e,n.code=r,n.type=i,A&&(n.headers=A),n}async function fve(t,e,r){e.log.error(t);let i=t.statusCode||500,A={error:{message:t.message+(t.stack?`
583
- `+t.stack:""),type:t.type||"api_error",code:t.code||"internal_error"}};return t.headers&&r.headers(t.headers),r.header("Content-Type","application/json"),r.code(i).send(A)}function Cve(t,e,r,i,A){let n=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([u,l])=>{l&&n.set(u,l)});let s,o=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let u=new AbortController,l=()=>u.abort();r.signal.addEventListener("abort",l),o.addEventListener("abort",l),s=u.signal}else s=o;let a={method:"POST",headers:n,body:JSON.stringify(e),signal:s};return r.httpsProxy&&(a.dispatcher=new bwe.ProxyAgent(new URL(r.httpsProxy).toString())),A?.debug({reqId:i.req.id,request:a,headers:Object.fromEntries(n.entries()),requestUrl:typeof t=="string"?t:t.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof t=="string"?t:t.toString(),a)}var Eve="1.0.54";async function Ive(t,e,r,i){let A=t.body,n=t.provider,s=r.providerService.getProvider(n);if(!s)throw Xs(`Provider '${n}' not found`,404,"provider_not_found");try{let{requestBody:o,config:a,bypass:u}=await QV(A,s,i,t.headers,{req:t,provider:s}),l=await mV(o,a,s,r,u,i,{req:t}),g=await yV(o,l,s,i,u,{req:t});return await DV(g,e,A)}catch(o){if(o.code==="provider_response_error"){let a=await pve(t,e,r,i,o);if(a)return a}throw o}}async function pve(t,e,r,i,A){let n=t.scenarioType||"default",s=r.configService.get("fallback");if(!s||!s[n])return null;let o=s[n];if(!Array.isArray(o)||o.length===0)return null;t.log.warn(`Request failed for ${t.scenarioType}, trying ${o.length} fallback models`);for(let a of o)try{t.log.info(`Trying fallback model: ${a}`);let u={...t.body},[l,...g]=a.split(",");u.model=g.join(",");let h={...t,provider:l,body:u},c=r.providerService.getProvider(l);if(!c){t.log.warn(`Fallback provider '${l}' not found, skipping`);continue}let{requestBody:d,config:f,bypass:C}=await QV(u,c,i,t.headers,{req:h,provider:c}),E=await mV(d,f,c,r,C,i,{req:h}),p=await yV(d,E,c,i,C,{req:h});return t.log.info(`Fallback model ${a} succeeded`),await DV(p,e,u)}catch(u){t.log.warn(`Fallback model ${a} failed: ${u.message}`);continue}return t.log.error(`All fallback models failed for yichu ${n}`),null}async function QV(t,e,r,i,A){let n=t,s={},o=!1;o=Bve(e,r,t);let a=o||e.transformer?.passthrough;if(o&&(i instanceof Headers?i.delete("content-length"):delete i["content-length"],s.headers=i),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(n,A);u.body?(n=u.body,s=u.config||{}):n=u}if(!o&&e.transformer?.use?.length)for(let u of e.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(n,e,A);l.body?(n=l.body,s={...s,...l.config}):n=l}if(!o&&e.transformer?.[t.model]?.use?.length)for(let u of e.transformer[t.model].use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(n,e,A);l.body?(n=l.body,s={...s,...l.config}):n=l}return{requestBody:n,config:s,bypass:o}}function Bve(t,e,r){return t.transformer?.use?.length===1&&t.transformer.use[0].name===e.name&&(!t.transformer?.[r.model]?.use.length||t.transformer?.[r.model]?.use.length===1&&t.transformer?.[r.model]?.use[0].name===e.name)}async function mV(t,e,r,i,A,n,s){if(e?.__providerResponse)return e.__providerResponse;let o=e.url||new URL(r.baseUrl);if((A||r.transformer?.passthrough)&&typeof n.auth=="function"){let l=await n.auth(t,r);if(l.body){t=l.body;let g=e.headers||{};l.config?.headers&&(g={...g,...l.config.headers},delete g.host,delete l.config.headers),e={...e,...l.config,headers:g}}else t=l}let a={Authorization:`Bearer ${r.apiKey}`,...e?.headers||{}};a["x-api-key"]&&delete a.Authorization;for(let l in a)(a[l]==="undefined"||["authorization","Authorization"].includes(l)&&a[l]?.includes("undefined"))&&delete a[l];let u=await Cve(o,t,{httpsProxy:i.configService.getHttpsProxy(),...e,headers:JSON.parse(JSON.stringify(a))},s,i.log);if(!u.ok){let l=await u.text(),g,h=u.headers.get("retry-after");if(h)g={"Retry-After":h};else if(u.status===429)try{let c=JSON.parse(l),d=c?.error?.details||c?.details;if(Array.isArray(d)){let f=d.find(C=>C["@type"]==="type.googleapis.com/google.rpc.RetryInfo");if(f?.retryDelay){let C=parseInt(f.retryDelay,10);isNaN(C)||(g={"Retry-After":C.toString()})}}}catch{}try{let c=JSON.parse(l);i.log.error({error:c,status:u.status,provider:r.name,model:t.model},`[provider_response_error] ${r.name},${t.model}: ${c?.error?.message||l}`)}catch{i.log.error({errorText:l,status:u.status,provider:r.name,model:t.model},`[provider_response_error] ${r.name},${t.model}: ${l}`)}throw Xs(`Error from provider(${r.name},${t.model}: ${u.status}): ${l}`,u.status,"provider_response_error","api_error",g)}return u}async function yV(t,e,r,i,A,n){let s=e,o=A||r.transformer?.passthrough;if(!A&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,n));if(!A&&r.transformer?.[t.model]?.use?.length)for(let a of Array.from(r.transformer[t.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,n));return!o&&i.transformResponseIn&&(s=await i.transformResponseIn(s,n)),s}async function DV(t,e,r){if(t.ok||e.code(t.status),r.stream===!0&&t.ok)return e.header("Content-Type","text/event-stream"),e.header("Cache-Control","no-cache"),e.header("Connection","keep-alive"),t.body&&typeof t.body.getReader=="function"?e.send(wwe.Readable.fromWeb(t.body)):e.send(t.body);{let i=await t.json();return e.send(i)}}var uq=async t=>{t.get("/",async()=>({message:"LLMs API",version:Eve})),t.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let e=t.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of e)r.endPoint&&t.post(r.endPoint,async(i,A)=>Ive(i,A,t,r));t.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,i)=>{let{name:A,baseUrl:n,apiKey:s,models:o}=r.body;if(!A?.trim())throw Xs("Provider name is required",400,"invalid_request");if(!n||!Qve(n))throw Xs("Valid base URL is required",400,"invalid_request");if(!s?.trim())throw Xs("API key is required",400,"invalid_request");if(!o||!Array.isArray(o)||o.length===0)throw Xs("At least one model is required",400,"invalid_request");if(t.providerService.getProvider(r.body.name))throw Xs(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return t.providerService.registerProvider(r.body)}),t.get("/providers",async()=>t.providerService.getProviders()),t.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let i=t.providerService.getProvider(r.params.id);if(!i)throw Xs("Provider not found",404,"provider_not_found");return i}),t.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,i)=>{let A=t.providerService.updateProvider(r.params.id,r.body);if(!A)throw Xs("Provider not found",404,"provider_not_found");return A}),t.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!t.providerService.deleteProvider(r.params.id))throw Xs("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),t.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,i)=>{if(!t.providerService.toggleProvider(r.params.id,r.body.enabled))throw Xs("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function Qve(t){try{return new URL(t),!0}catch{return!1}}var lq=class{constructor(t,e,r){this.configService=t,this.transformerService=e,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let t=this.configService.get("providers");if(t&&Array.isArray(t)){this.initializeFromProvidersArray(t);return}}initializeFromProvidersArray(t){t.forEach(e=>{try{if(!e.name||!e.api_base_url||!e.api_key)return;let r={};e.transformer&&Object.keys(e.transformer).forEach(i=>{i==="use"?Array.isArray(e.transformer.use)&&(r.use=e.transformer.use.map(A=>{if(Array.isArray(A)&&typeof A[0]=="string"){let n=this.transformerService.getTransformer(A[0]);if(n)return this.attachTransformerLogger(new n(A[1]))}if(typeof A=="string"){let n=this.transformerService.getTransformer(A);return typeof n=="function"?this.attachTransformerLogger(new n):this.attachTransformerLogger(n)}}).filter(A=>typeof A<"u")):i==="passthrough"?r.passthrough=e.transformer.passthrough:Array.isArray(e.transformer[i]?.use)&&(r[i]={use:e.transformer[i].use.map(A=>{if(Array.isArray(A)&&typeof A[0]=="string"){let n=this.transformerService.getTransformer(A[0]);if(n)return this.attachTransformerLogger(new n(A[1]))}if(typeof A=="string"){let n=this.transformerService.getTransformer(A);return typeof n=="function"?this.attachTransformerLogger(new n):this.attachTransformerLogger(n)}}).filter(A=>typeof A<"u")})}),this.registerProvider({name:e.name,baseUrl:e.api_base_url,apiKey:e.api_key,models:e.models||[],transformer:e.transformer?r:void 0}),this.logger.info(`${e.name} provider registered`)}catch(r){this.logger.error(`${e.name} provider registered error: ${r}`)}})}attachTransformerLogger(t){return t&&typeof t=="object"&&(t.logger=this.logger),t}registerProvider(t){let e={...t};return this.providers.set(e.name,e),t.models.forEach(r=>{let i=`${e.name},${r}`,A={provider:e.name,model:r,fullModel:i};this.modelRoutes.set(i,A),this.modelRoutes.has(r)||this.modelRoutes.set(r,A)}),e}getProviders(){return Array.from(this.providers.values())}getProvider(t){return this.providers.get(t)}updateProvider(t,e){let r=this.providers.get(t);if(!r)return null;let i={...r,...e,updatedAt:new Date};return this.providers.set(t,i),e.models&&(r.models.forEach(A=>{let n=`${r.name},${A}`;this.modelRoutes.delete(n),this.modelRoutes.delete(A)}),e.models.forEach(A=>{let n=`${r.name},${A}`,s={provider:r.name,model:A,fullModel:n};this.modelRoutes.set(n,s),this.modelRoutes.has(A)||this.modelRoutes.set(A,s)})),i}deleteProvider(t){let e=this.providers.get(t);return e?(e.models.forEach(r=>{let i=`${e.name},${r}`;this.modelRoutes.delete(i),this.modelRoutes.delete(r)}),this.providers.delete(t),!0):!1}toggleProvider(t,e){return!!this.providers.get(t)}resolveModelRoute(t){let e=this.modelRoutes.get(t);if(!e)return null;let r=this.providers.get(e.provider);return r?{provider:r,originalModel:t,targetModel:e.model}:null}getAvailableModelNames(){let t=[];return this.providers.forEach(e=>{e.models.forEach(r=>{t.push(r),t.push(`${e.name},${r}`)})}),t}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(t){return t?Array.isArray(t)?t.reduce((e,r)=>{if(Array.isArray(r)){let[i,A={}]=r;e[i]=A}else e[r]={};return e},{}):t:{}}async getAvailableModels(){let t=[];return this.providers.forEach(e=>{e.models.forEach(r=>{t.push({id:r,object:"model",owned_by:e.name,provider:e.name}),t.push({id:`${e.name},${r}`,object:"model",owned_by:e.name,provider:e.name})})}),{object:"list",data:t}}},ZA=[];for(let t=0;t<256;++t)ZA.push((t+256).toString(16).slice(1));function mve(t,e=0){return(ZA[t[e+0]]+ZA[t[e+1]]+ZA[t[e+2]]+ZA[t[e+3]]+"-"+ZA[t[e+4]]+ZA[t[e+5]]+"-"+ZA[t[e+6]]+ZA[t[e+7]]+"-"+ZA[t[e+8]]+ZA[t[e+9]]+"-"+ZA[t[e+10]]+ZA[t[e+11]]+ZA[t[e+12]]+ZA[t[e+13]]+ZA[t[e+14]]+ZA[t[e+15]]).toLowerCase()}var dy=new Uint8Array(256),Xm=dy.length;function yve(){return Xm>dy.length-16&&((0,vwe.randomFillSync)(dy),Xm=0),dy.slice(Xm,Xm+=16)}var cq={randomUUID:Swe.randomUUID};function Dve(t,e,r){if(cq.randomUUID&&!e&&!t)return cq.randomUUID();t=t||{};let i=t.random??t.rng?.()??yve();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let A=0;A<16;++A)e[r+A]=i[A];return e}return mve(i)}var Fp=Dve,wve=(t,e)=>(t.includes("base64")&&(t=t.split("base64").pop(),t.startsWith(",")&&(t=t.slice(1))),`data:${e};base64,${t}`),wV=class{constructor(t){this.options=t,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(t,e){let r={};return this.useBearer?(r.authorization=`Bearer ${e.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=e.apiKey,r.authorization=void 0),{body:t,config:{headers:r}}}async transformRequestOut(t,e){let r=[];if(t.system){if(typeof t.system=="string")r.push({role:"system",content:t.system});else if(Array.isArray(t.system)&&t.system.length){let A=t.system.filter(n=>n.type==="text"&&n.text).map(n=>({type:"text",text:n.text,cache_control:n.cache_control}));r.push({role:"system",content:A})}}JSON.parse(JSON.stringify(t.messages||[]))?.forEach(A=>{if(A.role==="user"||A.role==="assistant"){if(typeof A.content=="string"){r.push({role:A.role,content:A.content});return}if(Array.isArray(A.content)){if(A.role==="user"){let n=A.content.filter(o=>o.type==="tool_result"&&o.tool_use_id);n.length&&n.forEach(o=>{let a={role:"tool",content:typeof o.content=="string"?o.content:Array.isArray(o.content)&&o.content.filter(u=>u.type==="text"&&u.text).map(u=>u.text).join(`
583
+ `+t.stack:""),type:t.type||"api_error",code:t.code||"internal_error"}};return t.headers&&r.headers(t.headers),r.header("Content-Type","application/json"),r.code(i).send(A)}function Cve(t,e,r,i,A){let n=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([u,l])=>{l&&n.set(u,l)});let s,o=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let u=new AbortController,l=()=>u.abort();r.signal.addEventListener("abort",l),o.addEventListener("abort",l),s=u.signal}else s=o;let a={method:"POST",headers:n,body:JSON.stringify(e),signal:s};return r.httpsProxy&&(a.dispatcher=new bwe.ProxyAgent(new URL(r.httpsProxy).toString())),A?.debug({reqId:i.req.id,request:a,headers:Object.fromEntries(n.entries()),requestUrl:typeof t=="string"?t:t.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof t=="string"?t:t.toString(),a)}var Eve="1.0.55";async function Ive(t,e,r,i){let A=t.body,n=t.provider,s=r.providerService.getProvider(n);if(!s)throw Xs(`Provider '${n}' not found`,404,"provider_not_found");try{let{requestBody:o,config:a,bypass:u}=await QV(A,s,i,t.headers,{req:t,provider:s}),l=await mV(o,a,s,r,u,i,{req:t}),g=await yV(o,l,s,i,u,{req:t});return await DV(g,e,A)}catch(o){if(o.code==="provider_response_error"){let a=await pve(t,e,r,i,o);if(a)return a}throw o}}async function pve(t,e,r,i,A){let n=t.scenarioType||"default",s=r.configService.get("fallback");if(!s||!s[n])return null;let o=s[n];if(!Array.isArray(o)||o.length===0)return null;t.log.warn(`Request failed for ${t.scenarioType}, trying ${o.length} fallback models`);for(let a of o)try{t.log.info(`Trying fallback model: ${a}`);let u={...t.body},[l,...g]=a.split(",");u.model=g.join(",");let h={...t,provider:l,body:u},c=r.providerService.getProvider(l);if(!c){t.log.warn(`Fallback provider '${l}' not found, skipping`);continue}let{requestBody:d,config:f,bypass:C}=await QV(u,c,i,t.headers,{req:h,provider:c}),E=await mV(d,f,c,r,C,i,{req:h}),p=await yV(d,E,c,i,C,{req:h});return t.log.info(`Fallback model ${a} succeeded`),await DV(p,e,u)}catch(u){t.log.warn(`Fallback model ${a} failed: ${u.message}`);continue}return t.log.error(`All fallback models failed for yichu ${n}`),null}async function QV(t,e,r,i,A){let n=t,s={},o=!1;o=Bve(e,r,t);let a=o||e.transformer?.passthrough;if(o&&(i instanceof Headers?i.delete("content-length"):delete i["content-length"],s.headers=i),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(n,A);u.body?(n=u.body,s=u.config||{}):n=u}if(!o&&e.transformer?.use?.length)for(let u of e.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(n,e,A);l.body?(n=l.body,s={...s,...l.config}):n=l}if(!o&&e.transformer?.[t.model]?.use?.length)for(let u of e.transformer[t.model].use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(n,e,A);l.body?(n=l.body,s={...s,...l.config}):n=l}return{requestBody:n,config:s,bypass:o}}function Bve(t,e,r){return t.transformer?.use?.length===1&&t.transformer.use[0].name===e.name&&(!t.transformer?.[r.model]?.use.length||t.transformer?.[r.model]?.use.length===1&&t.transformer?.[r.model]?.use[0].name===e.name)}async function mV(t,e,r,i,A,n,s){if(e?.__providerResponse)return e.__providerResponse;let o=e.url||new URL(r.baseUrl);if((A||r.transformer?.passthrough)&&typeof n.auth=="function"){let l=await n.auth(t,r);if(l.body){t=l.body;let g=e.headers||{};l.config?.headers&&(g={...g,...l.config.headers},delete g.host,delete l.config.headers),e={...e,...l.config,headers:g}}else t=l}let a={Authorization:`Bearer ${r.apiKey}`,...e?.headers||{}};a["x-api-key"]&&delete a.Authorization;for(let l in a)(a[l]==="undefined"||["authorization","Authorization"].includes(l)&&a[l]?.includes("undefined"))&&delete a[l];let u=await Cve(o,t,{httpsProxy:i.configService.getHttpsProxy(),...e,headers:JSON.parse(JSON.stringify(a))},s,i.log);if(!u.ok){let l=await u.text(),g,h=u.headers.get("retry-after");if(h)g={"Retry-After":h};else if(u.status===429)try{let c=JSON.parse(l),d=c?.error?.details||c?.details;if(Array.isArray(d)){let f=d.find(C=>C["@type"]==="type.googleapis.com/google.rpc.RetryInfo");if(f?.retryDelay){let C=parseInt(f.retryDelay,10);isNaN(C)||(g={"Retry-After":C.toString()})}}}catch{}try{let c=JSON.parse(l);i.log.error({error:c,status:u.status,provider:r.name,model:t.model},`[provider_response_error] ${r.name},${t.model}: ${c?.error?.message||l}`)}catch{i.log.error({errorText:l,status:u.status,provider:r.name,model:t.model},`[provider_response_error] ${r.name},${t.model}: ${l}`)}throw Xs(`Error from provider(${r.name},${t.model}: ${u.status}): ${l}`,u.status,"provider_response_error","api_error",g)}return u}async function yV(t,e,r,i,A,n){let s=e,o=A||r.transformer?.passthrough;if(!A&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,n));if(!A&&r.transformer?.[t.model]?.use?.length)for(let a of Array.from(r.transformer[t.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(s=await a.transformResponseOut(s,n));return!o&&i.transformResponseIn&&(s=await i.transformResponseIn(s,n)),s}async function DV(t,e,r){if(t.ok||e.code(t.status),r.stream===!0&&t.ok)return e.header("Content-Type","text/event-stream"),e.header("Cache-Control","no-cache"),e.header("Connection","keep-alive"),t.body&&typeof t.body.getReader=="function"?e.send(wwe.Readable.fromWeb(t.body)):e.send(t.body);{let i=await t.json();return e.send(i)}}var uq=async t=>{t.get("/",async()=>({message:"LLMs API",version:Eve})),t.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let e=t.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of e)r.endPoint&&t.post(r.endPoint,async(i,A)=>Ive(i,A,t,r));t.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,i)=>{let{name:A,baseUrl:n,apiKey:s,models:o}=r.body;if(!A?.trim())throw Xs("Provider name is required",400,"invalid_request");if(!n||!Qve(n))throw Xs("Valid base URL is required",400,"invalid_request");if(!s?.trim())throw Xs("API key is required",400,"invalid_request");if(!o||!Array.isArray(o)||o.length===0)throw Xs("At least one model is required",400,"invalid_request");if(t.providerService.getProvider(r.body.name))throw Xs(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return t.providerService.registerProvider(r.body)}),t.get("/providers",async()=>t.providerService.getProviders()),t.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let i=t.providerService.getProvider(r.params.id);if(!i)throw Xs("Provider not found",404,"provider_not_found");return i}),t.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,i)=>{let A=t.providerService.updateProvider(r.params.id,r.body);if(!A)throw Xs("Provider not found",404,"provider_not_found");return A}),t.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!t.providerService.deleteProvider(r.params.id))throw Xs("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),t.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,i)=>{if(!t.providerService.toggleProvider(r.params.id,r.body.enabled))throw Xs("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function Qve(t){try{return new URL(t),!0}catch{return!1}}var lq=class{constructor(t,e,r){this.configService=t,this.transformerService=e,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let t=this.configService.get("providers");if(t&&Array.isArray(t)){this.initializeFromProvidersArray(t);return}}initializeFromProvidersArray(t){t.forEach(e=>{try{if(!e.name||!e.api_base_url||!e.api_key)return;let r={};e.transformer&&Object.keys(e.transformer).forEach(i=>{i==="use"?Array.isArray(e.transformer.use)&&(r.use=e.transformer.use.map(A=>{if(Array.isArray(A)&&typeof A[0]=="string"){let n=this.transformerService.getTransformer(A[0]);if(n)return this.attachTransformerLogger(new n(A[1]))}if(typeof A=="string"){let n=this.transformerService.getTransformer(A);return typeof n=="function"?this.attachTransformerLogger(new n):this.attachTransformerLogger(n)}}).filter(A=>typeof A<"u")):i==="passthrough"?r.passthrough=e.transformer.passthrough:Array.isArray(e.transformer[i]?.use)&&(r[i]={use:e.transformer[i].use.map(A=>{if(Array.isArray(A)&&typeof A[0]=="string"){let n=this.transformerService.getTransformer(A[0]);if(n)return this.attachTransformerLogger(new n(A[1]))}if(typeof A=="string"){let n=this.transformerService.getTransformer(A);return typeof n=="function"?this.attachTransformerLogger(new n):this.attachTransformerLogger(n)}}).filter(A=>typeof A<"u")})}),this.registerProvider({name:e.name,baseUrl:e.api_base_url,apiKey:e.api_key,models:e.models||[],transformer:e.transformer?r:void 0}),this.logger.info(`${e.name} provider registered`)}catch(r){this.logger.error(`${e.name} provider registered error: ${r}`)}})}attachTransformerLogger(t){return t&&typeof t=="object"&&(t.logger=this.logger),t}registerProvider(t){let e={...t};return this.providers.set(e.name,e),t.models.forEach(r=>{let i=`${e.name},${r}`,A={provider:e.name,model:r,fullModel:i};this.modelRoutes.set(i,A),this.modelRoutes.has(r)||this.modelRoutes.set(r,A)}),e}getProviders(){return Array.from(this.providers.values())}getProvider(t){return this.providers.get(t)}updateProvider(t,e){let r=this.providers.get(t);if(!r)return null;let i={...r,...e,updatedAt:new Date};return this.providers.set(t,i),e.models&&(r.models.forEach(A=>{let n=`${r.name},${A}`;this.modelRoutes.delete(n),this.modelRoutes.delete(A)}),e.models.forEach(A=>{let n=`${r.name},${A}`,s={provider:r.name,model:A,fullModel:n};this.modelRoutes.set(n,s),this.modelRoutes.has(A)||this.modelRoutes.set(A,s)})),i}deleteProvider(t){let e=this.providers.get(t);return e?(e.models.forEach(r=>{let i=`${e.name},${r}`;this.modelRoutes.delete(i),this.modelRoutes.delete(r)}),this.providers.delete(t),!0):!1}toggleProvider(t,e){return!!this.providers.get(t)}resolveModelRoute(t){let e=this.modelRoutes.get(t);if(!e)return null;let r=this.providers.get(e.provider);return r?{provider:r,originalModel:t,targetModel:e.model}:null}getAvailableModelNames(){let t=[];return this.providers.forEach(e=>{e.models.forEach(r=>{t.push(r),t.push(`${e.name},${r}`)})}),t}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(t){return t?Array.isArray(t)?t.reduce((e,r)=>{if(Array.isArray(r)){let[i,A={}]=r;e[i]=A}else e[r]={};return e},{}):t:{}}async getAvailableModels(){let t=[];return this.providers.forEach(e=>{e.models.forEach(r=>{t.push({id:r,object:"model",owned_by:e.name,provider:e.name}),t.push({id:`${e.name},${r}`,object:"model",owned_by:e.name,provider:e.name})})}),{object:"list",data:t}}},ZA=[];for(let t=0;t<256;++t)ZA.push((t+256).toString(16).slice(1));function mve(t,e=0){return(ZA[t[e+0]]+ZA[t[e+1]]+ZA[t[e+2]]+ZA[t[e+3]]+"-"+ZA[t[e+4]]+ZA[t[e+5]]+"-"+ZA[t[e+6]]+ZA[t[e+7]]+"-"+ZA[t[e+8]]+ZA[t[e+9]]+"-"+ZA[t[e+10]]+ZA[t[e+11]]+ZA[t[e+12]]+ZA[t[e+13]]+ZA[t[e+14]]+ZA[t[e+15]]).toLowerCase()}var dy=new Uint8Array(256),Xm=dy.length;function yve(){return Xm>dy.length-16&&((0,vwe.randomFillSync)(dy),Xm=0),dy.slice(Xm,Xm+=16)}var cq={randomUUID:Swe.randomUUID};function Dve(t,e,r){if(cq.randomUUID&&!e&&!t)return cq.randomUUID();t=t||{};let i=t.random??t.rng?.()??yve();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let A=0;A<16;++A)e[r+A]=i[A];return e}return mve(i)}var Fp=Dve,wve=(t,e)=>(t.includes("base64")&&(t=t.split("base64").pop(),t.startsWith(",")&&(t=t.slice(1))),`data:${e};base64,${t}`),wV=class{constructor(t){this.options=t,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(t,e){let r={};return this.useBearer?(r.authorization=`Bearer ${e.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=e.apiKey,r.authorization=void 0),{body:t,config:{headers:r}}}async transformRequestOut(t,e){let r=[];if(t.system){if(typeof t.system=="string")r.push({role:"system",content:t.system});else if(Array.isArray(t.system)&&t.system.length){let A=t.system.filter(n=>n.type==="text"&&n.text).map(n=>({type:"text",text:n.text,cache_control:n.cache_control}));r.push({role:"system",content:A})}}JSON.parse(JSON.stringify(t.messages||[]))?.forEach(A=>{if(A.role==="user"||A.role==="assistant"){if(typeof A.content=="string"){r.push({role:A.role,content:A.content});return}if(Array.isArray(A.content)){if(A.role==="user"){let n=A.content.filter(o=>o.type==="tool_result"&&o.tool_use_id);n.length&&n.forEach(o=>{let a={role:"tool",content:typeof o.content=="string"?o.content:Array.isArray(o.content)&&o.content.filter(u=>u.type==="text"&&u.text).map(u=>u.text).join(`
584
584
  `)||JSON.stringify(o.content),tool_call_id:o.tool_use_id,cache_control:o.cache_control};r.push(a)});let s=A.content.filter(o=>o.type==="text"&&o.text||o.type==="image"&&o.source);s.length&&r.push({role:"user",content:s.map(o=>o?.type==="image"?{type:"image_url",image_url:{url:o.source?.type==="base64"?wve(o.source.data,o.source.media_type):o.source.url},media_type:o.source.media_type}:o)})}else if(A.role==="assistant"){let n={role:"assistant",content:""},s=A.content.filter(u=>u.type==="text"&&u.text);s.length&&(n.content=s.map(u=>u.text).join(`
585
585
  `));let o=A.content.filter(u=>u.type==="tool_use"&&u.id);o.length&&(n.tool_calls=o.map(u=>({id:u.id,type:"function",function:{name:u.name,arguments:JSON.stringify(u.input||{})}})));let a=A.content.find(u=>u.type==="thinking"&&u.signature);a&&(n.thinking={content:a.thinking,signature:a.signature}),r.push(n)}return}}});let i={messages:r,model:t.model,max_tokens:t.max_tokens,temperature:t.temperature,stream:t.stream,tools:t.tools?.length?this.convertAnthropicToolsToUnified(t.tools):void 0,tool_choice:t.tool_choice};return t.thinking&&(i.reasoning={effort:t.output_config?.effort||t.effort,enabled:t.thinking.type==="enabled"||t.thinking.type==="adaptive"}),Array.isArray(e?.provider?.transformer?.use)&&e.provider.transformer.use.some(A=>A?.name==="claude-auth")&&(t.thinking&&(i.anthropic_thinking=t.thinking),t.output_config&&(i.anthropic_output_config=t.output_config),t.metadata&&(i.anthropic_metadata=t.metadata),t.stop_sequences&&(i.anthropic_stop_sequences=t.stop_sequences)),t.tool_choice&&(t.tool_choice.type==="tool"?i.tool_choice={type:"function",function:{name:t.tool_choice.name}}:i.tool_choice=t.tool_choice.type),i}async transformResponseIn(t,e){if(t.headers.get("Content-Type")?.includes("text/event-stream")){if(!t.body)throw new Error("Stream response body is null");let r=await this.convertOpenAIStreamToAnthropic(t.body,e);return new Response(r,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let r=await t.json(),i=this.convertOpenAIResponseToAnthropic(r,e);return new Response(JSON.stringify(i),{headers:{"Content-Type":"application/json"}})}}static buildAnthropicBody(t,e){let r;t.system&&(typeof t.system=="string"?r=t.system:Array.isArray(t.system)&&t.system.length&&(r=t.system.map(o=>({type:"text",text:o.text,...o.cache_control?{cache_control:o.cache_control}:{}}))));let i=[];for(let o of t.messages){if(o.role==="system"){if(!r){if(typeof o.content=="string")r=o.content;else if(Array.isArray(o.content)){let a=o.content.filter(u=>u.type==="text"&&u.text);a.length===1&&!a[0].cache_control?r=a[0].text:a.length>0&&(r=a.map(u=>({type:"text",text:u.text,...u.cache_control?{cache_control:u.cache_control}:{}})))}}continue}if(o.role==="tool"){let a={type:"tool_result",tool_use_id:o.tool_call_id,content:typeof o.content=="string"?o.content:JSON.stringify(o.content)},u=i[i.length-1];u?.role==="user"&&Array.isArray(u.content)?u.content.push(a):i.push({role:"user",content:[a]});continue}if(o.role==="assistant"){let a=[];if(o.thinking&&a.push({type:"thinking",thinking:o.thinking.content,signature:o.thinking.signature}),typeof o.content=="string"&&o.content&&a.push({type:"text",text:o.content}),o.tool_calls?.length)for(let u of o.tool_calls){let l={};try{l=JSON.parse(u.function.arguments||"{}")}catch(g){(e?.error??console.error)("Failed to parse tool_call arguments for tool '%s': %s",u.function.name,g)}a.push({type:"tool_use",id:u.id,name:u.function.name,input:l})}a.length>0&&i.push({role:"assistant",content:a});continue}if(o.role==="user"){let a=[];if(typeof o.content=="string")a.push({type:"text",text:o.content});else if(Array.isArray(o.content)){for(let u of o.content)if(u.type==="text"&&u.text)a.push({type:"text",text:u.text,...u.cache_control?{cache_control:u.cache_control}:{}});else if(u.type==="image_url"&&u.image_url?.url){let l=u.image_url.url;if(l.startsWith("data:")){let[g,h]=l.split(","),c=g.split(":")[1]?.split(";")[0]??"image/jpeg";a.push({type:"image",source:{type:"base64",media_type:c,data:h}})}else a.push({type:"image",source:{type:"url",url:l}})}}a.length>0&&i.push({role:"user",content:a});continue}}let A;t.tools?.length&&(A=t.tools.map(o=>({name:o.function.name,description:o.function.description||"",input_schema:o.function.parameters})));let n;if(t.tool_choice){let o=t.tool_choice;o==="auto"?n={type:"auto"}:o==="required"?n={type:"any"}:typeof o=="string"?n={type:"tool",name:o}:o.type==="function"&&(n={type:"tool",name:o.function?.name})}let s={model:t.model,max_tokens:t.max_tokens??8192,messages:i,stream:t.stream??!0};return r!==void 0&&(s.system=r),t.temperature!==void 0&&(s.temperature=t.temperature),t.tool_choice!=="none"&&A?.length&&(s.tools=A),t.tool_choice!=="none"&&n&&(s.tool_choice=n),t.anthropic_thinking&&(s.thinking=t.anthropic_thinking),t.anthropic_output_config&&(s.output_config=t.anthropic_output_config),t.anthropic_metadata&&(s.metadata=t.anthropic_metadata),t.anthropic_stop_sequences&&(s.stop_sequences=t.anthropic_stop_sequences),s}convertAnthropicToolsToUnified(t){return t.map(e=>({type:"function",function:{name:e.name,description:e.description||"",parameters:e.input_schema}}))}async convertOpenAIStreamToAnthropic(t,e){return new ReadableStream({start:async r=>{let i=new TextEncoder,A=`msg_${Date.now()}`,n=null,s="unknown",o=!1,a=!1,u=!1,l=new Map,g=new Map,h=0,c=0,d=0,f=!1,C=!1,E=0,p=-1,I=0,B=()=>{let y=E;return E++,y},m=y=>{if(!f)try{r.enqueue(y);let D=new TextDecoder().decode(y);this.logger.debug({reqId:e.req.id,data:D,type:"send data"})}catch(D){if(D instanceof TypeError&&D.message.includes("Controller is already closed"))f=!0;else throw this.logger.debug({reqId:e.req.id,error:D instanceof Error?D.message:String(D),type:"send data error"}),D}},w=()=>{if(!f)try{if(p>=0){let D={type:"content_block_stop",index:p};m(i.encode(`event: content_block_stop
586
586
  data: ${JSON.stringify(D)}
@@ -1082,7 +1082,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
1082
1082
 
1083
1083
  Do not attempt to describe or analyze the image directly yourself.
1084
1084
  Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
1085
- Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=t.body.messages.filter(A=>A.role==="user"&&Array.isArray(A.content)&&A.content.some(n=>n.type==="image"||Array.isArray(n.content)&&n.content.some(s=>s.type==="image"))),i=1;r.forEach(A=>{Array.isArray(A.content)&&A.content.forEach(n=>{n.type==="image"?(iy.storeImage(`${t.id}_Image#${i}`,n.source),n.type="text",delete n.source,n.text=`[Image #${i}]This is an image, if you need to view or analyze it, you need to extract the imageId`,i++):n.type==="text"&&n.text.includes("[Image #")?n.text=n.text.replace(/\[Image #\d+\]/g,""):n.type==="tool_result"&&Array.isArray(n.content)&&n.content.some(s=>s.type==="image")&&(iy.storeImage(`${t.id}_Image#${i}`,n.content[0].source),n.content=`[Image #${i}]This is an image, if you need to view or analyze it, you need to extract the imageId`,i++)})})}},tke=new eke,rke=class{agents=new Map;registerAgent(t){this.agents.set(t.name,t)}getAgent(t){return this.agents.get(t)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let t=[];for(let e of this.agents.values())t.push(...e.tools.values());return t}},EW=new rke;EW.registerAgent(tke);var QR=EW,ike=require("node:events"),Zq=new ike.EventEmitter;async function Ake(){let t=(0,jK.homedir)(),e=(0,JK.join)(t,".claude.json");if(!(0,gwe.existsSync)(e)){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,hwe.writeFile)(e,JSON.stringify(r,null,2))}}async function nke(t,e){let r=e.plugins||e.Plugins||[];for(let i of r){let{name:A,enabled:n=!1,options:s={}}=i;switch(A){case"token-speed":VR.registerPlugin(hW,{enabled:n,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:t.app.log.warn(`Unknown plugin: ${A}`);break}}await VR.enablePlugins(t)}async function IW(t={}){await Ake(),await FN();let e=await qK(),r=e.Providers||e.providers||[],i=r&&r.length>0,A=e.HOST||"127.0.0.1";i?(A=e.HOST,e.APIKEY||(A="127.0.0.1")):(A="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let n=e.PORT||3456,s=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):n,o=h=>(h>9?"":"0")+h,a=(h,c)=>{let d;h?typeof h=="number"?d=new Date(h):d=h:d=new Date;let f=d.getFullYear()+""+o(d.getMonth()+1),C=o(d.getDate()),E=o(d.getHours()),p=o(d.getMinutes());return`./logs/ccr-${f}${C}${E}${p}${o(d.getSeconds())}${c?`_${c}`:""}.log`},u;t.logger!==void 0?u=t.logger:e.LOG!==!1?(e.LOG===void 0&&(e.LOG=!0),u={level:e.LOG_LEVEL||"debug",stream:$_e(a,{path:IR.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):u=!1;let l=await(0,IR.listPresets)(),g=await L_e({jsonPath:IR.CONFIG_FILE,initialConfig:{providers:e.Providers||e.providers,HOST:A,PORT:s,LOG_FILE:(0,JK.join)((0,jK.homedir)(),".claude-code-router","claude-code-router.log")},logger:u});return await Promise.allSettled(l.map(async h=>await g.registerNamespace(`/preset/${h.name}`,h.config))),await nke(g,e),g.addHook("preHandler",async(h,c)=>new Promise((d,f)=>{let C=E=>{E?f(E):d()};U_e(e)(h,c,C).catch(f)})),g.addHook("preHandler",async(h,c)=>{let d=new URL(`http://127.0.0.1${h.url}`);h.pathname=d.pathname,h.pathname.endsWith("/v1/messages")&&h.pathname!=="/v1/messages"&&(h.preset=h.pathname.replace("/v1/messages","").replace("/",""))}),g.addHook("preHandler",async(h,c)=>{if(h.pathname.endsWith("/v1/messages")){let d=[];for(let f of QR.getAllAgents())f.shouldHandle(h,e)&&(d.push(f.name),f.reqHandler(h,e),f.tools.size&&(h.body?.tools?.length||(h.body.tools=[]),h.body.tools.unshift(...Array.from(f.tools.values()).map(C=>({name:C.name,description:C.description,input_schema:C.input_schema})))));d.length&&(h.agents=d)}}),g.addHook("onError",async(h,c,d)=>{Zq.emit("onError",h,c,d)}),g.addHook("onSend",(h,c,d,f)=>{if(h.sessionId&&h.pathname.endsWith("/v1/messages")){if(d instanceof ReadableStream){if(h.agents){let p=new AbortController,I=d.pipeThrough(new Qy),B,m=-1,w="",Q="",y="",D=[],v=[];return f(null,vve(I,async(b,S)=>{try{if(b.event==="content_block_start"&&b?.data?.content_block?.name){let x=h.agents.find(N=>QR.getAgent(N)?.tools.get(b.data.content_block.name));if(x){B=QR.getAgent(x),m=b.data.index,w=b.data.content_block.name,y=b.data.content_block.id;return}}if(m>-1&&b.data.index===m&&b.data?.delta?.type==="input_json_delta"){Q+=b.data?.delta?.partial_json;return}if(m>-1&&b.data.index===m&&b.data.type==="content_block_stop"){try{let x=Z_e.default.parse(Q);v.push({type:"tool_use",id:y,name:w,input:x});let N=await B?.tools.get(w)?.handler(x,{req:h,config:e});D.push({tool_use_id:y,type:"tool_result",content:N}),B=void 0,m=-1,w="",Q="",y=""}catch(x){g.app.log.error({err:x},"Agent tool execution error")}return}if(b.event==="message_delta"&&D.length){h.body.messages.push({role:"assistant",content:v}),h.body.messages.push({role:"user",content:D});let x=await fetch(`http://127.0.0.1:${e.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":e.APIKEY,"content-type":"application/json"},body:JSON.stringify(h.body)});if(!x.ok)return;let N=x.body.pipeThrough(new Qy).getReader();for(;;)try{let{value:F,done:_}=await N.read();if(_)break;let k=F;if(["message_start","message_stop"].includes(k.event))continue;if(!S.desiredSize)break;S.enqueue(k)}catch(F){if(F.name==="AbortError"||F.code==="ERR_STREAM_PREMATURE_CLOSE"){p.abort();break}throw F}return}return b}catch(x){if(g.app.log.error("Unexpected error in stream processing:",x),x.code==="ERR_STREAM_PREMATURE_CLOSE"){p.abort();return}throw x}}).pipeThrough(new vV))}let[C,E]=d.tee();return(async p=>{let I=p.getReader();try{for(;;){let{done:B,value:m}=await I.read();if(B)break;let w=new TextDecoder().decode(m);if(!w.startsWith("event: message_delta"))continue;let Q=w.slice(27);try{let y=JSON.parse(Q);KR.put(h.sessionId,y.usage)}catch{}}}catch(B){B.name==="AbortError"||B.code==="ERR_STREAM_PREMATURE_CLOSE"?g.app.log.error("Background read stream closed prematurely"):g.app.log.error("Error in background stream reading:",B)}finally{I.releaseLock()}})(E),f(null,C)}typeof d=="object"&&d!==null&&KR.put(h.sessionId,d.usage)}f(null,d)}),g.addHook("onSend",async(h,c,d)=>(Zq.emit("onSend",h,c,d),d)),process.on("uncaughtException",h=>{g.app.log.error("Uncaught exception:",h)}),process.on("unhandledRejection",(h,c)=>{g.app.log.error("Unhandled rejection at:",c,"reason:",h)}),g}async function ske(){let t=await IW();t.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await t.start()}require.main===eM&&ske().catch(t=>{console.error("Failed to start server:",t),process.exit(1)});});async function yW(t){try{let{stdout:e}=await mW("npm view @caeliq/claude-code-router version"),r=e.trim();return{hasUpdate:oke(r,t)>0,latestVersion:r,changelog:""}}catch(e){return console.error("Error checking for updates:",e),{hasUpdate:!1,latestVersion:t,changelog:""}}}async function DW(){try{let{stdout:t,stderr:e}=await mW("npm update -g @caeliq/claude-code-router");return e&&console.error("Update stderr:",e),console.log("Update stdout:",t),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(t){return console.error("Error performing update:",t),{success:!1,message:`Failed to perform update: ${t instanceof Error?t.message:"Unknown error"}`}}}function oke(t,e){let r=t.split(".").map(Number),i=e.split(".").map(Number);for(let A=0;A<Math.max(r.length,i.length);A++){let n=A<r.length?r[A]:0,s=A<i.length?i[A]:0;if(n>s)return 1;if(n<s)return-1}return 0}var BW,QW,mW,wW=Fr(()=>{"use strict";BW=require("child_process"),QW=require("util"),mW=(0,QW.promisify)(BW.exec)});var oD,tM=Fr(()=>{oD="2.0.0"});var iM=oe(rM=>{"use strict";Object.defineProperty(rM,"__esModule",{value:!0});var bW=require("child_process"),uke=1024*1024,vW={exec(t,e){let r={maxBuffer:2*uke,windowsHide:!0};(0,bW.exec)(t,r,e)},spawn(t,e,r){return(0,bW.spawn)(t,e,r)},stripLine(t,e){let r=0;for(;e-- >0;){let i=t.indexOf(`
1085
+ Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=t.body.messages.filter(A=>A.role==="user"&&Array.isArray(A.content)&&A.content.some(n=>n.type==="image"||Array.isArray(n.content)&&n.content.some(s=>s.type==="image"))),i=1;r.forEach(A=>{Array.isArray(A.content)&&A.content.forEach(n=>{n.type==="image"?(iy.storeImage(`${t.id}_Image#${i}`,n.source),n.type="text",delete n.source,n.text=`[Image #${i}]This is an image, if you need to view or analyze it, you need to extract the imageId`,i++):n.type==="text"&&n.text.includes("[Image #")?n.text=n.text.replace(/\[Image #\d+\]/g,""):n.type==="tool_result"&&Array.isArray(n.content)&&n.content.some(s=>s.type==="image")&&(iy.storeImage(`${t.id}_Image#${i}`,n.content[0].source),n.content=`[Image #${i}]This is an image, if you need to view or analyze it, you need to extract the imageId`,i++)})})}},tke=new eke,rke=class{agents=new Map;registerAgent(t){this.agents.set(t.name,t)}getAgent(t){return this.agents.get(t)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let t=[];for(let e of this.agents.values())t.push(...e.tools.values());return t}},EW=new rke;EW.registerAgent(tke);var QR=EW,ike=require("node:events"),Zq=new ike.EventEmitter;async function Ake(){let t=(0,jK.homedir)(),e=(0,JK.join)(t,".claude.json");if(!(0,gwe.existsSync)(e)){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,hwe.writeFile)(e,JSON.stringify(r,null,2))}}async function nke(t,e){let r=e.plugins||e.Plugins||[];for(let i of r){let{name:A,enabled:n=!1,options:s={}}=i;switch(A){case"token-speed":VR.registerPlugin(hW,{enabled:n,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:t.app.log.warn(`Unknown plugin: ${A}`);break}}await VR.enablePlugins(t)}async function IW(t={}){await Ake(),await FN();let e=await qK(),r=e.Providers||e.providers||[],i=r&&r.length>0,A=e.HOST||"127.0.0.1";i?(A=e.HOST,e.APIKEY||(A="127.0.0.1")):(A="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let n=e.PORT||3456,s=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):n,o=h=>(h>9?"":"0")+h,a=(h,c)=>{let d;h?typeof h=="number"?d=new Date(h):d=h:d=new Date;let f=d.getFullYear()+""+o(d.getMonth()+1),C=o(d.getDate()),E=o(d.getHours()),p=o(d.getMinutes());return`./logs/ccr-${f}${C}${E}${p}${o(d.getSeconds())}${c?`_${c}`:""}.log`},u;t.logger!==void 0?u=t.logger:e.LOG!==!1?(e.LOG===void 0&&(e.LOG=!0),u={level:e.LOG_LEVEL||"debug",stream:$_e(a,{path:IR.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):u=!1;let l=await(0,IR.listPresets)(),g=await L_e({jsonPath:IR.CONFIG_FILE,initialConfig:{providers:e.Providers||e.providers,HOST:A,PORT:s,LOG_FILE:(0,JK.join)((0,jK.homedir)(),".claude-code-router","claude-code-router.log")},logger:u});return await Promise.allSettled(l.map(async h=>await g.registerNamespace(`/preset/${h.name}`,h.config))),await nke(g,e),g.addHook("preHandler",async(h,c)=>new Promise((d,f)=>{let C=E=>{E?f(E):d()};U_e(e)(h,c,C).catch(f)})),g.addHook("preHandler",async(h,c)=>{let d=new URL(`http://127.0.0.1${h.url}`);h.pathname=d.pathname,h.pathname.endsWith("/v1/messages")&&h.pathname!=="/v1/messages"&&(h.preset=h.pathname.replace("/v1/messages","").replace("/",""))}),g.addHook("preHandler",async(h,c)=>{if(h.pathname.endsWith("/v1/messages")){let d=[];for(let f of QR.getAllAgents())f.shouldHandle(h,e)&&(d.push(f.name),f.reqHandler(h,e),f.tools.size&&(h.body?.tools?.length||(h.body.tools=[]),h.body.tools.unshift(...Array.from(f.tools.values()).map(C=>({name:C.name,description:C.description,input_schema:C.input_schema})))));d.length&&(h.agents=d)}}),g.addHook("onError",async(h,c,d)=>{Zq.emit("onError",h,c,d)}),g.addHook("onSend",(h,c,d,f)=>{if(h.sessionId&&h.pathname.endsWith("/v1/messages")){if(d instanceof ReadableStream){if(h.agents){let p=new AbortController,I=d.pipeThrough(new Qy),B,m=-1,w="",Q="",y="",D=[],v=[];return f(null,vve(I,async(b,S)=>{try{if(b.event==="content_block_start"&&b?.data?.content_block?.name){let x=h.agents.find(N=>QR.getAgent(N)?.tools.get(b.data.content_block.name));if(x){B=QR.getAgent(x),m=b.data.index,w=b.data.content_block.name,y=b.data.content_block.id;return}}if(m>-1&&b.data.index===m&&b.data?.delta?.type==="input_json_delta"){Q+=b.data?.delta?.partial_json;return}if(m>-1&&b.data.index===m&&b.data.type==="content_block_stop"){try{let x=Z_e.default.parse(Q);v.push({type:"tool_use",id:y,name:w,input:x});let N=await B?.tools.get(w)?.handler(x,{req:h,config:e});D.push({tool_use_id:y,type:"tool_result",content:N}),B=void 0,m=-1,w="",Q="",y=""}catch(x){g.app.log.error({err:x},"Agent tool execution error")}return}if(b.event==="message_delta"&&D.length){h.body.messages.push({role:"assistant",content:v}),h.body.messages.push({role:"user",content:D});let x=await fetch(`http://127.0.0.1:${e.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":e.APIKEY,"content-type":"application/json"},body:JSON.stringify(h.body)});if(!x.ok)return;let N=x.body.pipeThrough(new Qy).getReader();for(;;)try{let{value:F,done:_}=await N.read();if(_)break;let k=F;if(["message_start","message_stop"].includes(k.event))continue;if(!S.desiredSize)break;S.enqueue(k)}catch(F){if(F.name==="AbortError"||F.code==="ERR_STREAM_PREMATURE_CLOSE"){p.abort();break}throw F}return}return b}catch(x){if(g.app.log.error("Unexpected error in stream processing:",x),x.code==="ERR_STREAM_PREMATURE_CLOSE"){p.abort();return}throw x}}).pipeThrough(new vV))}let[C,E]=d.tee();return(async p=>{let I=p.getReader();try{for(;;){let{done:B,value:m}=await I.read();if(B)break;let w=new TextDecoder().decode(m);if(!w.startsWith("event: message_delta"))continue;let Q=w.slice(27);try{let y=JSON.parse(Q);KR.put(h.sessionId,y.usage)}catch{}}}catch(B){B.name==="AbortError"||B.code==="ERR_STREAM_PREMATURE_CLOSE"?g.app.log.error("Background read stream closed prematurely"):g.app.log.error("Error in background stream reading:",B)}finally{I.releaseLock()}})(E),f(null,C)}typeof d=="object"&&d!==null&&KR.put(h.sessionId,d.usage)}f(null,d)}),g.addHook("onSend",async(h,c,d)=>(Zq.emit("onSend",h,c,d),d)),process.on("uncaughtException",h=>{g.app.log.error("Uncaught exception:",h)}),process.on("unhandledRejection",(h,c)=>{g.app.log.error("Unhandled rejection at:",c,"reason:",h)}),g}async function ske(){let t=await IW();t.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await t.start()}require.main===eM&&ske().catch(t=>{console.error("Failed to start server:",t),process.exit(1)});});async function yW(t){try{let{stdout:e}=await mW("npm view @caeliq/claude-code-router version"),r=e.trim();return{hasUpdate:oke(r,t)>0,latestVersion:r,changelog:""}}catch(e){return console.error("Error checking for updates:",e),{hasUpdate:!1,latestVersion:t,changelog:""}}}async function DW(){try{let{stdout:t,stderr:e}=await mW("npm update -g @caeliq/claude-code-router");return e&&console.error("Update stderr:",e),console.log("Update stdout:",t),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(t){return console.error("Error performing update:",t),{success:!1,message:`Failed to perform update: ${t instanceof Error?t.message:"Unknown error"}`}}}function oke(t,e){let r=t.split(".").map(Number),i=e.split(".").map(Number);for(let A=0;A<Math.max(r.length,i.length);A++){let n=A<r.length?r[A]:0,s=A<i.length?i[A]:0;if(n>s)return 1;if(n<s)return-1}return 0}var BW,QW,mW,wW=Fr(()=>{"use strict";BW=require("child_process"),QW=require("util"),mW=(0,QW.promisify)(BW.exec)});var oD,tM=Fr(()=>{oD="2.0.1"});var iM=oe(rM=>{"use strict";Object.defineProperty(rM,"__esModule",{value:!0});var bW=require("child_process"),uke=1024*1024,vW={exec(t,e){let r={maxBuffer:2*uke,windowsHide:!0};(0,bW.exec)(t,r,e)},spawn(t,e,r){return(0,bW.spawn)(t,e,r)},stripLine(t,e){let r=0;for(;e-- >0;){let i=t.indexOf(`
1086
1086
  `,r);i>=0&&(r=i+1)}return r>0?t.substring(r):t},split(t,e){let r=t.trim().split(/\s+/);return r.length>e&&(r[e-1]=r.slice(e-1).join(" ")),r},extractColumns(t,e,r){let i=t.split(/(\r\n|\n|\r)/),A=[];return r||(r=Math.max.apply(null,e)+1),i.forEach(n=>{let s=vW.split(n,r),o=[];e.forEach(a=>{o.push(s[a]||"")}),A.push(o)}),A},parseTable(t){let e=t.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(i=>i.trim().length>0));return e.forEach(r=>{for(let i=0;r[i];){let A=r[i];A.startsWith(" ")?(r[i-1]+=A.trimLeft(),r.splice(i,1)):i+=1}}),e.map(r=>{let i={};return r.forEach(A=>{let n=A.indexOf(":"),s=A.slice(0,n).trim();i[s]=A.slice(n+1).trim()}),i})}};rM.default=vW});var FW=oe((SW,aD)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define(e):typeof aD=="object"&&aD.exports?aD.exports=e():t.log=e()})(SW,function(){"use strict";var t=function(){},e="undefined",r=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),i=["trace","debug","info","warn","error"],A={},n=null;function s(d,f){var C=d[f];if(typeof C.bind=="function")return C.bind(d);try{return Function.prototype.bind.call(C,d)}catch{return function(){return Function.prototype.apply.apply(C,[d,arguments])}}}function o(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function a(d){return d==="debug"&&(d="log"),typeof console===e?!1:d==="trace"&&r?o:console[d]!==void 0?s(console,d):console.log!==void 0?s(console,"log"):t}function u(){for(var d=this.getLevel(),f=0;f<i.length;f++){var C=i[f];this[C]=f<d?t:this.methodFactory(C,d,this.name)}if(this.log=this.debug,typeof console===e&&d<this.levels.SILENT)return"No console available for logging"}function l(d){return function(){typeof console!==e&&(u.call(this),this[d].apply(this,arguments))}}function g(d,f,C){return a(d)||l.apply(this,arguments)}function h(d,f){var C=this,E,p,I,B="loglevel";typeof d=="string"?B+=":"+d:typeof d=="symbol"&&(B=void 0);function m(v){var b=(i[v]||"silent").toUpperCase();if(!(typeof window===e||!B)){try{window.localStorage[B]=b;return}catch{}try{window.document.cookie=encodeURIComponent(B)+"="+b+";"}catch{}}}function w(){var v;if(!(typeof window===e||!B)){try{v=window.localStorage[B]}catch{}if(typeof v===e)try{var b=window.document.cookie,S=encodeURIComponent(B),x=b.indexOf(S+"=");x!==-1&&(v=/^([^;]+)/.exec(b.slice(x+S.length+1))[1])}catch{}return C.levels[v]===void 0&&(v=void 0),v}}function Q(){if(!(typeof window===e||!B)){try{window.localStorage.removeItem(B)}catch{}try{window.document.cookie=encodeURIComponent(B)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function y(v){var b=v;if(typeof b=="string"&&C.levels[b.toUpperCase()]!==void 0&&(b=C.levels[b.toUpperCase()]),typeof b=="number"&&b>=0&&b<=C.levels.SILENT)return b;throw new TypeError("log.setLevel() called with invalid level: "+v)}C.name=d,C.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},C.methodFactory=f||g,C.getLevel=function(){return I??p??E},C.setLevel=function(v,b){return I=y(v),b!==!1&&m(I),u.call(C)},C.setDefaultLevel=function(v){p=y(v),w()||C.setLevel(v,!1)},C.resetLevel=function(){I=null,Q(),u.call(C)},C.enableAll=function(v){C.setLevel(C.levels.TRACE,v)},C.disableAll=function(v){C.setLevel(C.levels.SILENT,v)},C.rebuild=function(){if(n!==C&&(E=y(n.getLevel())),u.call(C),n===C)for(var v in A)A[v].rebuild()},E=y(n?n.getLevel():"WARN");var D=w();D!=null&&(I=y(D)),u.call(C)}n=new h,n.getLogger=function(f){if(typeof f!="symbol"&&typeof f!="string"||f==="")throw new TypeError("You must supply a name when creating a logger.");var C=A[f];return C||(C=A[f]=new h(f,n.methodFactory)),C};var c=typeof window!==e?window.log:void 0;return n.noConflict=function(){return typeof window!==e&&window.log===n&&(window.log=c),n},n.getLoggers=function(){return A},n.default=n,n})});var AM=oe($p=>{"use strict";var lke=$p&&$p.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty($p,"__esModule",{value:!0});var cke=lke(FW());$p.default=cke.default});var kW=oe(ua=>{"use strict";var gke=ua&&ua.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var A=Object.getOwnPropertyDescriptor(e,r);(!A||("get"in A?!e.__esModule:A.writable||A.configurable))&&(A={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,A)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),hke=ua&&ua.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),xW=ua&&ua.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var i=[];for(var A in r)Object.prototype.hasOwnProperty.call(r,A)&&(i[i.length]=A);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var i=t(e),A=0;A<i.length;A++)i[A]!=="default"&&gke(r,e,i[A]);return hke(r,e),r}})(),_W=ua&&ua.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ua,"__esModule",{value:!0});var dke=xW(require("os")),uD=xW(require("fs")),bs=_W(iM()),fke=_W(AM()),Cke=t=>new Promise((e,r)=>{uD.existsSync(t)?e():uD.mkdir(t,i=>{i?r(i):e()})}),kf={darwin(t){return new Promise((e,r)=>{bs.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(i,A,n){if(i)r(i);else{let s=n.toString().trim();if(s){r(new Error(s));return}let o=bs.default.stripLine(A.toString(),1),a=o.slice(0,o.indexOf(`
1087
1087
  `)),u=bs.default.stripLine(o,1),l=a.indexOf("rxbytes")>=0?10:8,g=bs.default.extractColumns(u,[0,3,l],10).filter(h=>!!String(h[0]).match(/^(udp|tcp)/)).find(h=>{let c=String(h[1]).match(/\.(\d+)$/);return!!(c&&c[1]===String(t))});g&&g[2].length?e(parseInt(g[2],10)):r(new Error(`pid of port (${t}) not found`))}})})},linux(t){return new Promise((e,r)=>{bs.default.exec("netstat -tunlp",function(A,n,s){if(A)r(A);else{let o=s.toString().trim();o&&fke.default.warn(o);let a=bs.default.stripLine(n.toString(),2),u=bs.default.extractColumns(a,[3,6],7).find(l=>{let g=String(l[0]).match(/:(\d+)$/);return!!(g&&g[1]===String(t))});if(u&&u[1]){let l=u[1].split("/",1)[0];l.length?e(parseInt(l,10)):r(new Error(`pid of port (${t}) not found`))}else r(new Error(`pid of port (${t}) not found`))}})})},win32(t){return new Promise((e,r)=>{bs.default.exec("netstat -ano",function(i,A,n){if(i)r(i);else{let s=n.toString().trim();if(s){r(new Error(s));return}let o=bs.default.stripLine(A.toString(),4),a=bs.default.extractColumns(o,[1,4],5).find(u=>{let l=String(u[0]).match(/:(\d+)$/);return!!(l&&l[1]===String(t))});a&&a[1].length&&parseInt(a[1],10)>0?e(parseInt(a[1],10)):r(new Error(`pid of port (${t}) not found`))}})})},android(t){return new Promise((e,r)=>{let i=dke.tmpdir()+"/.find-process",A=i+"/"+process.pid,n='netstat -tunp >> "'+A+'"';Cke(i).then(()=>{bs.default.exec(n,()=>{uD.readFile(A,"utf8",(s,o)=>{if(uD.unlink(A,()=>{}),s)r(s);else{o=bs.default.stripLine(o,2);let a=bs.default.extractColumns(o,[3,6],7).find(u=>{let l=String(u[0]).match(/:(\d+)$/);return!!(l&&l[1]===String(t))});if(a&&a[1]){let u=a[1].split("/",1)[0];u.length?e(parseInt(u,10)):r(new Error(`pid of port (${t}) not found`))}else r(new Error(`pid of port (${t}) not found`))}})})})})}};kf.freebsd=kf.darwin;kf.sunos=kf.darwin;function Eke(t){let e=process.platform;return new Promise((r,i)=>{if(!(e in kf))return i(new Error(`platform ${e} is unsupported`));let A=kf[e];A(t).then(r,i)})}ua.default=Eke});var MW=oe(la=>{"use strict";var Ike=la&&la.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var A=Object.getOwnPropertyDescriptor(e,r);(!A||("get"in A?!e.__esModule:A.writable||A.configurable))&&(A={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,A)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),pke=la&&la.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),Bke=la&&la.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var i=[];for(var A in r)Object.prototype.hasOwnProperty.call(r,A)&&(i[i.length]=A);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var i=t(e),A=0;A<i.length;A++)i[A]!=="default"&&Ike(r,e,i[A]);return pke(r,e),r}})(),Qke=la&&la.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(la,"__esModule",{value:!0});var lD=Bke(require("path")),dc=Qke(iM());function nM(t,e){return e?t&&t.match?t.match(e)!==null:!1:!0}function RW(t){let e=t.split(lD.sep),r=e[e.length-1];r&&(e[e.length-1]=r.split(" ")[0]);let i=[];for(let A of e){let n=A.indexOf(" -");if(n>=0){i.push(A.substring(0,n).trim());break}else if(A.endsWith(" ")){i.push(A.trim());break}i.push(A)}return i.join(lD.sep)}function NW(t){if(process.platform==="darwin"){let e=t.indexOf(".app/");if(e>=0)return lD.basename(t.substring(0,e))}return lD.basename(t)}var ph={darwin(t){return new Promise((e,r)=>{let i;"pid"in t&&t.pid!==void 0?i=`ps -p ${t.pid} -ww -o pid,ppid,uid,gid,args`:i="ps ax -ww -o pid,ppid,uid,gid,args",dc.default.exec(i,function(A,n,s){if(A)"pid"in t&&t.pid!==void 0?e([]):r(A);else{let o=s.toString().trim();if(o){r(new Error(o));return}let a=dc.default.stripLine(n.toString(),1),l=dc.default.extractColumns(a,[0,1,2,3,4],5).filter(g=>g[0]&&t.pid!==void 0?g[0]===String(t.pid):g[4]&&t.name?nM(g[4],t.name):!!g[0]).map(g=>{let h=String(g[4]),c=RW(h);return{pid:parseInt(g[0],10),ppid:parseInt(g[1],10),uid:parseInt(g[2],10),gid:parseInt(g[3],10),name:NW(c),bin:c,cmd:g[4]}});t.config.strict&&t.name&&(l=l.filter(g=>g.name===t.name)),e(l)}})})},win32(t){return new Promise((e,r)=>{let i="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",A=[],n=dc.default.spawn("powershell.exe",["/c",i],{detached:!1,windowsHide:!0});n.stdout.on("data",s=>{A.push(s.toString())}),n.on("error",s=>{r(new Error("Command '"+i+"' failed with reason: "+s.toString()))}),n.on("close",s=>{if(s!==0)return r(new Error("Command '"+i+"' terminated with code: "+s));let o=dc.default.parseTable(A.join("")).filter(a=>{if(t.pid!==void 0)return a.ProcessId===String(t.pid);if(t.name){let u=a.Name||"";return t.config.strict?u===t.name||u.endsWith(".exe")&&u.slice(0,-4)===t.name:nM(a.CommandLine||u,t.name)}else return!0}).map(a=>({pid:parseInt(a.ProcessId,10),ppid:parseInt(a.ParentProcessId,10),bin:a.ExecutablePath,name:a.Name||"",cmd:a.CommandLine}));e(o)})})},android(t){return new Promise((e,r)=>{dc.default.exec("ps",function(A,n,s){if(A)t.pid!==void 0?e([]):r(A);else{let o=s.toString().trim();if(o){r(new Error(o));return}let a=dc.default.stripLine(n.toString(),1),l=dc.default.extractColumns(a,[0,3],4).filter(g=>g[0]&&t.pid!==void 0?g[0]===String(t.pid):g[1]&&t.name?nM(g[1],t.name):!!g[0]).map(g=>{let h=String(g[1]),c=RW(h);return{pid:parseInt(g[0],10),ppid:0,name:NW(c),bin:c,cmd:g[1]}});t.config.strict&&t.name&&(l=l.filter(g=>g.name===t.name)),e(l)}})})}};ph.linux=ph.darwin;ph.sunos=ph.darwin;ph.freebsd=ph.darwin;function mke(t){let e=process.platform,r=ph[e];return r?r(t):Promise.reject(new Error(`Platform "${e}" is not supported`))}la.default=mke});var LW=oe(Zp=>{"use strict";var oM=Zp&&Zp.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Zp,"__esModule",{value:!0});var yke=oM(kW()),TW=oM(MW()),Dke=oM(AM()),sM={port(t,e){return(0,yke.default)(t).then(r=>sM.pid(r,e),()=>[])},pid(t,e){return(0,TW.default)({pid:t,config:e})},name(t,e){return(0,TW.default)({name:t,config:e,skipSelf:!0})}};function wke(t,e,r){let i=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return i.logLevel&&Dke.default.setLevel(i.logLevel),new Promise((A,n)=>{if(!(t in sM))n(new Error(`do not support find by "${t}"`));else{let s=/^\d+$/.test(String(e));t==="pid"&&!s?n(new Error("pid must be a number")):t==="port"&&!s?n(new Error("port must be a number")):sM[t](e,i).then(A,n)}})}Zp.default=wke});var OW=oe(UW=>{"use strict";Object.defineProperty(UW,"__esModule",{value:!0})});var PW=oe(ca=>{"use strict";var bke=ca&&ca.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var A=Object.getOwnPropertyDescriptor(e,r);(!A||("get"in A?!e.__esModule:A.writable||A.configurable))&&(A={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,A)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),vke=ca&&ca.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&bke(e,t,r)},Ske=ca&&ca.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ca,"__esModule",{value:!0});ca.default=void 0;var Fke=LW();Object.defineProperty(ca,"default",{enumerable:!0,get:function(){return Ske(Fke).default}});vke(OW(),ca)});function HW(){let t=0;(0,Dn.existsSync)(XA.REFERENCE_COUNT_FILE)&&(t=parseInt((0,Dn.readFileSync)(XA.REFERENCE_COUNT_FILE,"utf-8"))||0),t++,(0,Dn.writeFileSync)(XA.REFERENCE_COUNT_FILE,t.toString())}function aM(){let t=0;(0,Dn.existsSync)(XA.REFERENCE_COUNT_FILE)&&(t=parseInt((0,Dn.readFileSync)(XA.REFERENCE_COUNT_FILE,"utf-8"))||0),t=Math.max(0,t-1),(0,Dn.writeFileSync)(XA.REFERENCE_COUNT_FILE,t.toString())}function jW(){return(0,Dn.existsSync)(XA.REFERENCE_COUNT_FILE)&&parseInt((0,Dn.readFileSync)(XA.REFERENCE_COUNT_FILE,"utf-8"))||0}function Bh(){if(!(0,Dn.existsSync)(XA.PID_FILE))return!1;let t;try{let e=(0,Dn.readFileSync)(XA.PID_FILE,"utf-8");if(t=parseInt(e,10),isNaN(t))return Al(),!1}catch{return!1}try{if(process.platform==="win32"){let e=`tasklist /FI "PID eq ${t}"`;return(0,GW.execSync)(e,{stdio:"pipe"}).toString().includes(t.toString())?!0:(Al(),!1)}else return process.kill(t,0),!0}catch{return Al(),!1}}function Al(){if((0,Dn.existsSync)(XA.PID_FILE))try{require("fs").unlinkSync(XA.PID_FILE)}catch{}}function JW(){if(!(0,Dn.existsSync)(XA.PID_FILE))return null;try{let t=parseInt((0,Dn.readFileSync)(XA.PID_FILE,"utf-8"));return isNaN(t)?null:t}catch{return null}}async function cD(){let t=JW(),e=await Bh(),i=(await Gn()).PORT||3456;return{running:e,pid:t,port:i,endpoint:`http://127.0.0.1:${i}`,pidFile:XA.PID_FILE,referenceCount:jW()}}async function qW(){if(jW()===0){let e=JW();if(e&&await Bh())try{process.kill(e,"SIGTERM")}catch{}}}var Dn,XA,xke,GW,Xp=Fr(()=>{"use strict";Dn=require("fs"),XA=er($s());nl();xke=er(PW()),GW=require("child_process")});var $W={};nf($W,{backupConfigFile:()=>hD,getSettingsPath:()=>hM,initConfig:()=>_ke,initDir:()=>zW,readConfigFile:()=>Gn,readConfigFileRaw:()=>gD,restartService:()=>gM,run:()=>cM,writeConfigFile:()=>dD});var is,YW,sl,KW,VW,Gi,WW,Rf,lM,uM,e0,zW,gD,Gn,hD,dD,_ke,cM,gM,hM,nl=Fr(()=>{"use strict";is=er(require("node:fs/promises")),YW=er(Jm()),sl=er(require("node:path")),KW=require("node:crypto"),VW=er(require("node:os")),Gi=er($s()),WW=er(pW()),Rf=require("fs");wW();tM();lM=require("child_process");Xp();uM=t=>{if(typeof t=="string")return t.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g,(e,r,i)=>{let A=r||i;return process.env[A]||e});if(Array.isArray(t))return t.map(uM);if(t!==null&&typeof t=="object"){let e={};for(let[r,i]of Object.entries(t))e[r]=uM(i);return e}return t},e0=async t=>{try{await is.default.access(t)}catch{await is.default.mkdir(t,{recursive:!0})}},zW=async()=>{await e0(Gi.HOME_DIR),await e0(Gi.PLUGINS_DIR),await e0(Gi.PRESETS_DIR),await e0(sl.default.join(Gi.HOME_DIR,"logs"))},gD=async()=>{try{let t=await is.default.readFile(Gi.CONFIG_FILE,"utf-8");try{return YW.default.parse(t)}catch(e){console.error(`Failed to parse config file at ${Gi.CONFIG_FILE}`),console.error("Error details:",e.message),console.error("Please check your config file syntax."),process.exit(1)}}catch(t){if(t.code==="ENOENT")try{await zW();let e=await hD();e&&console.log(`Backed up existing configuration file to ${e}`);let r={PORT:3456,Providers:[],Router:{}};return await dD(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(e){console.error("Failed to create default configuration:",e.message),process.exit(1)}else console.error(`Failed to read config file at ${Gi.CONFIG_FILE}`),console.error("Error details:",t.message),process.exit(1)}},Gn=async()=>{let t=await gD();return uM(t)},hD=async()=>{try{if(await is.default.access(Gi.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let t=new Date().toISOString().replace(/[:.]/g,"-"),e=`${Gi.CONFIG_FILE}.${t}.bak`;await is.default.copyFile(Gi.CONFIG_FILE,e);try{let r=sl.default.dirname(Gi.CONFIG_FILE),i=sl.default.basename(Gi.CONFIG_FILE),n=(await is.default.readdir(r)).filter(s=>s.startsWith(i)&&s.endsWith(".bak")).sort().reverse();if(n.length>3)for(let s=3;s<n.length;s++){let o=sl.default.join(r,n[s]);await is.default.unlink(o)}}catch(r){console.warn("Failed to clean up old backups:",r)}return e}}catch(t){console.error("Failed to backup config file:",t)}return null},dD=async t=>{await e0(Gi.HOME_DIR);let e=`${JSON.stringify(t,null,2)}`;await is.default.writeFile(Gi.CONFIG_FILE,e)},_ke=async()=>{let t=await Gn();return Object.assign(process.env,t),t},cM=async(t=[])=>{if(Bh()){console.log("claude-code-router server is running");return}let r=await(0,WW.getServer)(),i=r.app;(0,Rf.writeFileSync)(Gi.PID_FILE,process.pid.toString()),i.post("/api/update/perform",async()=>await DW()),i.get("/api/update/check",async()=>await yW(oD)),i.post("/api/restart",async()=>(setTimeout(async()=>{let A=sl.default.join(__dirname,"cli.js");(0,lM.spawn)(process.execPath,[A,"restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await r.start()},gM=async()=>{try{let r=parseInt((0,Rf.readFileSync)(Gi.PID_FILE,"utf-8"));if(process.kill(r),Al(),(0,Rf.existsSync)(Gi.REFERENCE_COUNT_FILE))try{await is.default.unlink(Gi.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),Al()}console.log("Starting claude code router service...");let t=sl.default.join(__dirname,"cli.js"),e=(0,lM.spawn)(process.execPath,[t,"start"],{detached:!0,stdio:"ignore"});e.on("error",r=>{throw console.error("Failed to start service:",r),r}),e.unref(),console.log("\u2705 Service started successfully in the background.")},hM=async t=>{let e=(0,KW.createHash)("sha256").update(t,"utf-8").digest("hex"),r=sl.default.join(VW.default.tmpdir(),"claude-code-router"),i=`ccr-settings-${e}.json`,A=sl.default.join(r,i);try{await is.default.access(r)}catch{await is.default.mkdir(r,{recursive:!0})}try{return await is.default.access(A),A}catch{return await is.default.writeFile(A,t,"utf-8"),A}}});var e7=oe((mdt,XW)=>{"use strict";XW.exports=function(e){return e.map(function(r){return r===""?"''":r&&typeof r=="object"?r.op.replace(/(.)/g,"\\$1"):/["\s\\]/.test(r)&&!/'/.test(r)?"'"+r.replace(/(['])/g,"\\$1")+"'":/["'\s]/.test(r)?'"'+r.replace(/(["\\$`!])/g,"\\$1")+'"':String(r).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")}).join(" ")}});var o7=oe((ydt,s7)=>{"use strict";var n7="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",t7=new RegExp("^"+n7+"$"),r7="|&;()<> \\t",kke='"((\\\\"|[^"])*?)"',Rke="'((\\\\'|[^'])*?)'",Nke=/^#$/,i7="'",A7='"',dM="$",Qh="",Mke=4294967296;for(fM=0;fM<4;fM++)Qh+=(Mke*Math.random()).toString(16);var fM,Tke=new RegExp("^"+Qh);function Lke(t,e){for(var r=e.lastIndex,i=[],A;A=e.exec(t);)i.push(A),e.lastIndex===A.index&&(e.lastIndex+=1);return e.lastIndex=r,i}function Uke(t,e,r){var i=typeof t=="function"?t(r):t[r];return typeof i>"u"&&r!=""?i="":typeof i>"u"&&(i="$"),typeof i=="object"?e+Qh+JSON.stringify(i)+Qh:e+i}function Oke(t,e,r){r||(r={});var i=r.escape||"\\",A="(\\"+i+`['"`+r7+`]|[^\\s'"`+r7+"])+",n=new RegExp(["("+n7+")","("+A+"|"+kke+"|"+Rke+")+"].join("|"),"g"),s=Lke(t,n);if(s.length===0)return[];e||(e={});var o=!1;return s.map(function(a){var u=a[0];if(!u||o)return;if(t7.test(u))return{op:u};var l=!1,g=!1,h="",c=!1,d;function f(){d+=1;var p,I,B=u.charAt(d);if(B==="{"){if(d+=1,u.charAt(d)==="}")throw new Error("Bad substitution: "+u.slice(d-2,d+1));if(p=u.indexOf("}",d),p<0)throw new Error("Bad substitution: "+u.slice(d));I=u.slice(d,p),d=p}else if(/[*@#?$!_-]/.test(B))I=B,d+=1;else{var m=u.slice(d);p=m.match(/[^\w\d_]/),p?(I=m.slice(0,p.index),d+=p.index-1):(I=m,d=u.length)}return Uke(e,"",I)}for(d=0;d<u.length;d++){var C=u.charAt(d);if(c=c||!l&&(C==="*"||C==="?"),g)h+=C,g=!1;else if(l)C===l?l=!1:l==i7?h+=C:C===i?(d+=1,C=u.charAt(d),C===A7||C===i||C===dM?h+=C:h+=i+C):C===dM?h+=f():h+=C;else if(C===A7||C===i7)l=C;else{if(t7.test(C))return{op:u};if(Nke.test(C)){o=!0;var E={comment:t.slice(a.index+d+1)};return h.length?[h,E]:[E]}else C===i?g=!0:C===dM?h+=f():h+=C}}return c?{op:"glob",pattern:h}:h}).reduce(function(a,u){return typeof u>"u"?a:a.concat(u)},[])}s7.exports=function(e,r,i){var A=Oke(e,r,i);return typeof r!="function"?A:A.reduce(function(n,s){if(typeof s=="object")return n.concat(s);var o=s.split(RegExp("("+Qh+".*?"+Qh+")","g"));return o.length===1?n.concat(o[0]):n.concat(o.filter(Boolean).map(function(a){return Tke.test(a)?JSON.parse(a.split(Qh)[1]):a}))},[])}});var a7=oe(CM=>{"use strict";CM.quote=e7();CM.parse=o7()});var g7=oe((wdt,c7)=>{"use strict";function Pke(t,e){var r=t;e.slice(0,-1).forEach(function(A){r=r[A]||{}});var i=e[e.length-1];return i in r}function u7(t){return typeof t=="number"||/^0x[0-9a-f]+$/i.test(t)?!0:/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(t)}function l7(t,e){return e==="constructor"&&typeof t[e]=="function"||e==="__proto__"}c7.exports=function(t,e){e||(e={});var r={bools:{},strings:{},unknownFn:null};typeof e.unknown=="function"&&(r.unknownFn=e.unknown),typeof e.boolean=="boolean"&&e.boolean?r.allBools=!0:[].concat(e.boolean).filter(Boolean).forEach(function(B){r.bools[B]=!0});var i={};function A(B){return i[B].some(function(m){return r.bools[m]})}Object.keys(e.alias||{}).forEach(function(B){i[B]=[].concat(e.alias[B]),i[B].forEach(function(m){i[m]=[B].concat(i[B].filter(function(w){return m!==w}))})}),[].concat(e.string).filter(Boolean).forEach(function(B){r.strings[B]=!0,i[B]&&[].concat(i[B]).forEach(function(m){r.strings[m]=!0})});var n=e.default||{},s={_:[]};function o(B,m){return r.allBools&&/^--[^=]+$/.test(m)||r.strings[B]||r.bools[B]||i[B]}function a(B,m,w){for(var Q=B,y=0;y<m.length-1;y++){var D=m[y];if(l7(Q,D))return;Q[D]===void 0&&(Q[D]={}),(Q[D]===Object.prototype||Q[D]===Number.prototype||Q[D]===String.prototype)&&(Q[D]={}),Q[D]===Array.prototype&&(Q[D]=[]),Q=Q[D]}var v=m[m.length-1];l7(Q,v)||((Q===Object.prototype||Q===Number.prototype||Q===String.prototype)&&(Q={}),Q===Array.prototype&&(Q=[]),Q[v]===void 0||r.bools[v]||typeof Q[v]=="boolean"?Q[v]=w:Array.isArray(Q[v])?Q[v].push(w):Q[v]=[Q[v],w])}function u(B,m,w){if(!(w&&r.unknownFn&&!o(B,w)&&r.unknownFn(w)===!1)){var Q=!r.strings[B]&&u7(m)?Number(m):m;a(s,B.split("."),Q),(i[B]||[]).forEach(function(y){a(s,y.split("."),Q)})}}Object.keys(r.bools).forEach(function(B){u(B,n[B]===void 0?!1:n[B])});var l=[];t.indexOf("--")!==-1&&(l=t.slice(t.indexOf("--")+1),t=t.slice(0,t.indexOf("--")));for(var g=0;g<t.length;g++){var h=t[g],c,d;if(/^--.+=/.test(h)){var f=h.match(/^--([^=]+)=([\s\S]*)$/);c=f[1];var C=f[2];r.bools[c]&&(C=C!=="false"),u(c,C,h)}else if(/^--no-.+/.test(h))c=h.match(/^--no-(.+)/)[1],u(c,!1,h);else if(/^--.+/.test(h))c=h.match(/^--(.+)/)[1],d=t[g+1],d!==void 0&&!/^(-|--)[^-]/.test(d)&&!r.bools[c]&&!r.allBools&&(!i[c]||!A(c))?(u(c,d,h),g+=1):/^(true|false)$/.test(d)?(u(c,d==="true",h),g+=1):u(c,r.strings[c]?"":!0,h);else if(/^-[^-]+/.test(h)){for(var E=h.slice(1,-1).split(""),p=!1,I=0;I<E.length;I++){if(d=h.slice(I+2),d==="-"){u(E[I],d,h);continue}if(/[A-Za-z]/.test(E[I])&&d[0]==="="){u(E[I],d.slice(1),h),p=!0;break}if(/[A-Za-z]/.test(E[I])&&/-?\d+(\.\d*)?(e-?\d+)?$/.test(d)){u(E[I],d,h),p=!0;break}if(E[I+1]&&E[I+1].match(/\W/)){u(E[I],h.slice(I+2),h),p=!0;break}else u(E[I],r.strings[E[I]]?"":!0,h)}c=h.slice(-1)[0],!p&&c!=="-"&&(t[g+1]&&!/^(-|--)[^-]/.test(t[g+1])&&!r.bools[c]&&(!i[c]||!A(c))?(u(c,t[g+1],h),g+=1):t[g+1]&&/^(true|false)$/.test(t[g+1])?(u(c,t[g+1]==="true",h),g+=1):u(c,r.strings[c]?"":!0,h))}else if((!r.unknownFn||r.unknownFn(h)!==!1)&&s._.push(r.strings._||!u7(h)?h:Number(h)),e.stopEarly){s._.push.apply(s._,t.slice(g+1));break}}return Object.keys(n).forEach(function(B){Pke(s,B.split("."))||(a(s,B.split("."),n[B]),(i[B]||[]).forEach(function(m){a(s,m.split("."),n[B])}))}),e["--"]?s["--"]=l.slice():l.forEach(function(B){s._.push(B)}),s}});var r0=oe((Pdt,B7)=>{var Hke=require("node:tty"),jke=Hke?.WriteStream?.prototype?.hasColors?.()??!1,vr=(t,e)=>{if(!jke)return A=>A;let r=`\x1B[${t}m`,i=`\x1B[${e}m`;return A=>{let n=A+"",s=n.indexOf(i);if(s===-1)return r+n+i;let o=r,a=0,l=(e===22?i:"")+r;for(;s!==-1;)o+=n.slice(a,s)+l,a=s+i.length,s=n.indexOf(i,a);return o+=n.slice(a)+i,o}},yr={};yr.reset=vr(0,0);yr.bold=vr(1,22);yr.dim=vr(2,22);yr.italic=vr(3,23);yr.underline=vr(4,24);yr.overline=vr(53,55);yr.inverse=vr(7,27);yr.hidden=vr(8,28);yr.strikethrough=vr(9,29);yr.black=vr(30,39);yr.red=vr(31,39);yr.green=vr(32,39);yr.yellow=vr(33,39);yr.blue=vr(34,39);yr.magenta=vr(35,39);yr.cyan=vr(36,39);yr.white=vr(37,39);yr.gray=vr(90,39);yr.bgBlack=vr(40,49);yr.bgRed=vr(41,49);yr.bgGreen=vr(42,49);yr.bgYellow=vr(43,49);yr.bgBlue=vr(44,49);yr.bgMagenta=vr(45,49);yr.bgCyan=vr(46,49);yr.bgWhite=vr(47,49);yr.bgGray=vr(100,49);yr.redBright=vr(91,39);yr.greenBright=vr(92,39);yr.yellowBright=vr(93,39);yr.blueBright=vr(94,39);yr.magentaBright=vr(95,39);yr.cyanBright=vr(96,39);yr.whiteBright=vr(97,39);yr.bgRedBright=vr(101,49);yr.bgGreenBright=vr(102,49);yr.bgYellowBright=vr(103,49);yr.bgBlueBright=vr(104,49);yr.bgMagentaBright=vr(105,49);yr.bgCyanBright=vr(106,49);yr.bgWhiteBright=vr(107,49);B7.exports=yr});var v7=oe((nft,b7)=>{"use strict";b7.exports=$ke;function zke(t){let e={defaultWidth:0,output:process.stdout,tty:require("tty")};return t?(Object.keys(e).forEach(function(r){t[r]||(t[r]=e[r])}),t):e}function $ke(t){let e=zke(t);if(e.output.getWindowSize)return e.output.getWindowSize()[0]||e.defaultWidth;if(e.tty.getWindowSize)return e.tty.getWindowSize()[1]||e.defaultWidth;if(e.output.columns)return e.output.columns;if(process.env.CLI_WIDTH){let r=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(r)&&r!==0)return r}return e.defaultWidth}});var F7=oe((sft,S7)=>{"use strict";S7.exports=({onlyFirst:t=!1}={})=>{let e=["[\\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(e,t?void 0:"g")}});var yD=oe((oft,x7)=>{"use strict";var Zke=F7();x7.exports=t=>typeof t=="string"?t.replace(Zke(),""):t});var k7=oe((aft,BM)=>{"use strict";var _7=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);BM.exports=_7;BM.exports.default=_7});var N7=oe((uft,R7)=>{"use strict";R7.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 T7=oe((lft,QM)=>{"use strict";var Xke=yD(),eRe=k7(),tRe=N7(),M7=t=>{if(typeof t!="string"||t.length===0||(t=Xke(t),t.length===0))return 0;t=t.replace(tRe()," ");let e=0;for(let r=0;r<t.length;r++){let i=t.codePointAt(r);i<=31||i>=127&&i<=159||i>=768&&i<=879||(i>65535&&r++,e+=eRe(i)?2:1)}return e};QM.exports=M7;QM.exports.default=M7});var U7=oe((cft,L7)=>{"use strict";L7.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 mM=oe((gft,P7)=>{var i0=U7(),O7={};for(let t of Object.keys(i0))O7[i0[t]]=t;var $t={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"]}};P7.exports=$t;for(let t of Object.keys($t)){if(!("channels"in $t[t]))throw new Error("missing channels property: "+t);if(!("labels"in $t[t]))throw new Error("missing channel labels property: "+t);if($t[t].labels.length!==$t[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=$t[t];delete $t[t].channels,delete $t[t].labels,Object.defineProperty($t[t],"channels",{value:e}),Object.defineProperty($t[t],"labels",{value:r})}$t.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,A=Math.min(e,r,i),n=Math.max(e,r,i),s=n-A,o,a;n===A?o=0:e===n?o=(r-i)/s:r===n?o=2+(i-e)/s:i===n&&(o=4+(e-r)/s),o=Math.min(o*60,360),o<0&&(o+=360);let u=(A+n)/2;return n===A?a=0:u<=.5?a=s/(n+A):a=s/(2-n-A),[o,a*100,u*100]};$t.rgb.hsv=function(t){let e,r,i,A,n,s=t[0]/255,o=t[1]/255,a=t[2]/255,u=Math.max(s,o,a),l=u-Math.min(s,o,a),g=function(h){return(u-h)/6/l+1/2};return l===0?(A=0,n=0):(n=l/u,e=g(s),r=g(o),i=g(a),s===u?A=i-r:o===u?A=1/3+e-i:a===u&&(A=2/3+r-e),A<0?A+=1:A>1&&(A-=1)),[A*360,n*100,u*100]};$t.rgb.hwb=function(t){let e=t[0],r=t[1],i=t[2],A=$t.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,i));return i=1-1/255*Math.max(e,Math.max(r,i)),[A,n*100,i*100]};$t.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,A=Math.min(1-e,1-r,1-i),n=(1-e-A)/(1-A)||0,s=(1-r-A)/(1-A)||0,o=(1-i-A)/(1-A)||0;return[n*100,s*100,o*100,A*100]};function rRe(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}$t.rgb.keyword=function(t){let e=O7[t];if(e)return e;let r=1/0,i;for(let A of Object.keys(i0)){let n=i0[A],s=rRe(t,n);s<r&&(r=s,i=A)}return i};$t.keyword.rgb=function(t){return i0[t]};$t.rgb.xyz=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let A=e*.4124+r*.3576+i*.1805,n=e*.2126+r*.7152+i*.0722,s=e*.0193+r*.1192+i*.9505;return[A*100,n*100,s*100]};$t.rgb.lab=function(t){let e=$t.rgb.xyz(t),r=e[0],i=e[1],A=e[2];r/=95.047,i/=100,A/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,A=A>.008856?A**(1/3):7.787*A+16/116;let n=116*i-16,s=500*(r-i),o=200*(i-A);return[n,s,o]};$t.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,i=t[2]/100,A,n,s;if(r===0)return s=i*255,[s,s,s];i<.5?A=i*(1+r):A=i+r-i*r;let o=2*i-A,a=[0,0,0];for(let u=0;u<3;u++)n=e+1/3*-(u-1),n<0&&n++,n>1&&n--,6*n<1?s=o+(A-o)*6*n:2*n<1?s=A:3*n<2?s=o+(A-o)*(2/3-n)*6:s=o,a[u]=s*255;return a};$t.hsl.hsv=function(t){let e=t[0],r=t[1]/100,i=t[2]/100,A=r,n=Math.max(i,.01);i*=2,r*=i<=1?i:2-i,A*=n<=1?n:2-n;let s=(i+r)/2,o=i===0?2*A/(n+A):2*r/(i+r);return[e,o*100,s*100]};$t.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,i=t[2]/100,A=Math.floor(e)%6,n=e-Math.floor(e),s=255*i*(1-r),o=255*i*(1-r*n),a=255*i*(1-r*(1-n));switch(i*=255,A){case 0:return[i,a,s];case 1:return[o,i,s];case 2:return[s,i,a];case 3:return[s,o,i];case 4:return[a,s,i];case 5:return[i,s,o]}};$t.hsv.hsl=function(t){let e=t[0],r=t[1]/100,i=t[2]/100,A=Math.max(i,.01),n,s;s=(2-r)*i;let o=(2-r)*A;return n=r*A,n/=o<=1?o:2-o,n=n||0,s/=2,[e,n*100,s*100]};$t.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,i=t[2]/100,A=r+i,n;A>1&&(r/=A,i/=A);let s=Math.floor(6*e),o=1-i;n=6*e-s,(s&1)!==0&&(n=1-n);let a=r+n*(o-r),u,l,g;switch(s){default:case 6:case 0:u=o,l=a,g=r;break;case 1:u=a,l=o,g=r;break;case 2:u=r,l=o,g=a;break;case 3:u=r,l=a,g=o;break;case 4:u=a,l=r,g=o;break;case 5:u=o,l=r,g=a;break}return[u*255,l*255,g*255]};$t.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,i=t[2]/100,A=t[3]/100,n=1-Math.min(1,e*(1-A)+A),s=1-Math.min(1,r*(1-A)+A),o=1-Math.min(1,i*(1-A)+A);return[n*255,s*255,o*255]};$t.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,i=t[2]/100,A,n,s;return A=e*3.2406+r*-1.5372+i*-.4986,n=e*-.9689+r*1.8758+i*.0415,s=e*.0557+r*-.204+i*1.057,A=A>.0031308?1.055*A**(1/2.4)-.055:A*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,A=Math.min(Math.max(0,A),1),n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),[A*255,n*255,s*255]};$t.xyz.lab=function(t){let e=t[0],r=t[1],i=t[2];e/=95.047,r/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let A=116*r-16,n=500*(e-r),s=200*(r-i);return[A,n,s]};$t.lab.xyz=function(t){let e=t[0],r=t[1],i=t[2],A,n,s;n=(e+16)/116,A=r/500+n,s=n-i/200;let o=n**3,a=A**3,u=s**3;return n=o>.008856?o:(n-16/116)/7.787,A=a>.008856?a:(A-16/116)/7.787,s=u>.008856?u:(s-16/116)/7.787,A*=95.047,n*=100,s*=108.883,[A,n,s]};$t.lab.lch=function(t){let e=t[0],r=t[1],i=t[2],A;A=Math.atan2(i,r)*360/2/Math.PI,A<0&&(A+=360);let s=Math.sqrt(r*r+i*i);return[e,s,A]};$t.lch.lab=function(t){let e=t[0],r=t[1],A=t[2]/360*2*Math.PI,n=r*Math.cos(A),s=r*Math.sin(A);return[e,n,s]};$t.rgb.ansi16=function(t,e=null){let[r,i,A]=t,n=e===null?$t.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let s=30+(Math.round(A/255)<<2|Math.round(i/255)<<1|Math.round(r/255));return n===2&&(s+=60),s};$t.hsv.ansi16=function(t){return $t.rgb.ansi16($t.hsv.rgb(t),t[2])};$t.rgb.ansi256=function(t){let e=t[0],r=t[1],i=t[2];return e===r&&r===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(i/255*5)};$t.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,i=(e&1)*r*255,A=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[i,A,n]};$t.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,i=Math.floor((e=t%36)/6)/5*255,A=e%6/5*255;return[r,i,A]};$t.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};$t.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(o=>o+o).join(""));let i=parseInt(r,16),A=i>>16&255,n=i>>8&255,s=i&255;return[A,n,s]};$t.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,A=Math.max(Math.max(e,r),i),n=Math.min(Math.min(e,r),i),s=A-n,o,a;return s<1?o=n/(1-s):o=0,s<=0?a=0:A===e?a=(r-i)/s%6:A===r?a=2+(i-e)/s:a=4+(e-r)/s,a/=6,a%=1,[a*360,s*100,o*100]};$t.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,i=r<.5?2*e*r:2*e*(1-r),A=0;return i<1&&(A=(r-.5*i)/(1-i)),[t[0],i*100,A*100]};$t.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,i=e*r,A=0;return i<1&&(A=(r-i)/(1-i)),[t[0],i*100,A*100]};$t.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,i=t[2]/100;if(r===0)return[i*255,i*255,i*255];let A=[0,0,0],n=e%1*6,s=n%1,o=1-s,a=0;switch(Math.floor(n)){case 0:A[0]=1,A[1]=s,A[2]=0;break;case 1:A[0]=o,A[1]=1,A[2]=0;break;case 2:A[0]=0,A[1]=1,A[2]=s;break;case 3:A[0]=0,A[1]=o,A[2]=1;break;case 4:A[0]=s,A[1]=0,A[2]=1;break;default:A[0]=1,A[1]=0,A[2]=o}return a=(1-r)*i,[(r*A[0]+a)*255,(r*A[1]+a)*255,(r*A[2]+a)*255]};$t.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,i=e+r*(1-e),A=0;return i>0&&(A=e/i),[t[0],A*100,i*100]};$t.hcg.hsl=function(t){let e=t[1]/100,i=t[2]/100*(1-e)+.5*e,A=0;return i>0&&i<.5?A=e/(2*i):i>=.5&&i<1&&(A=e/(2*(1-i))),[t[0],A*100,i*100]};$t.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,i=e+r*(1-e);return[t[0],(i-e)*100,(1-i)*100]};$t.hwb.hcg=function(t){let e=t[1]/100,i=1-t[2]/100,A=i-e,n=0;return A<1&&(n=(i-A)/(1-A)),[t[0],A*100,n*100]};$t.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};$t.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};$t.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};$t.gray.hsl=function(t){return[0,0,t[0]]};$t.gray.hsv=$t.gray.hsl;$t.gray.hwb=function(t){return[0,100,t[0]]};$t.gray.cmyk=function(t){return[0,0,0,t[0]]};$t.gray.lab=function(t){return[t[0],0,0]};$t.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};$t.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var H7=oe((hft,G7)=>{var DD=mM();function iRe(){let t={},e=Object.keys(DD);for(let r=e.length,i=0;i<r;i++)t[e[i]]={distance:-1,parent:null};return t}function ARe(t){let e=iRe(),r=[t];for(e[t].distance=0;r.length;){let i=r.pop(),A=Object.keys(DD[i]);for(let n=A.length,s=0;s<n;s++){let o=A[s],a=e[o];a.distance===-1&&(a.distance=e[i].distance+1,a.parent=i,r.unshift(o))}}return e}function nRe(t,e){return function(r){return e(t(r))}}function sRe(t,e){let r=[e[t].parent,t],i=DD[e[t].parent][t],A=e[t].parent;for(;e[A].parent;)r.unshift(e[A].parent),i=nRe(DD[e[A].parent][A],i),A=e[A].parent;return i.conversion=r,i}G7.exports=function(t){let e=ARe(t),r={},i=Object.keys(e);for(let A=i.length,n=0;n<A;n++){let s=i[n];e[s].parent!==null&&(r[s]=sRe(s,e))}return r}});var J7=oe((dft,j7)=>{var yM=mM(),oRe=H7(),Tf={},aRe=Object.keys(yM);function uRe(t){let e=function(...r){let i=r[0];return i==null?i:(i.length>1&&(r=i),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function lRe(t){let e=function(...r){let i=r[0];if(i==null)return i;i.length>1&&(r=i);let A=t(r);if(typeof A=="object")for(let n=A.length,s=0;s<n;s++)A[s]=Math.round(A[s]);return A};return"conversion"in t&&(e.conversion=t.conversion),e}aRe.forEach(t=>{Tf[t]={},Object.defineProperty(Tf[t],"channels",{value:yM[t].channels}),Object.defineProperty(Tf[t],"labels",{value:yM[t].labels});let e=oRe(t);Object.keys(e).forEach(i=>{let A=e[i];Tf[t][i]=lRe(A),Tf[t][i].raw=uRe(A)})});j7.exports=Tf});var z7=oe((fft,W7)=>{"use strict";var q7=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,Y7=(t,e)=>(...r)=>{let i=t(...r);return`\x1B[${38+e};5;${i}m`},K7=(t,e)=>(...r)=>{let i=t(...r);return`\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},wD=t=>t,V7=(t,e,r)=>[t,e,r],Lf=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let i=r();return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},DM,Uf=(t,e,r,i)=>{DM===void 0&&(DM=J7());let A=i?10:0,n={};for(let[s,o]of Object.entries(DM)){let a=s==="ansi16"?"ansi":s;s===e?n[a]=t(r,A):typeof o=="object"&&(n[a]=t(o[e],A))}return n};function cRe(){let t=new Map,e={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]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,i]of Object.entries(e)){for(let[A,n]of Object.entries(i))e[A]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},i[A]=e[A],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",Lf(e.color,"ansi",()=>Uf(q7,"ansi16",wD,!1)),Lf(e.color,"ansi256",()=>Uf(Y7,"ansi256",wD,!1)),Lf(e.color,"ansi16m",()=>Uf(K7,"rgb",V7,!1)),Lf(e.bgColor,"ansi",()=>Uf(q7,"ansi16",wD,!0)),Lf(e.bgColor,"ansi256",()=>Uf(Y7,"ansi256",wD,!0)),Lf(e.bgColor,"ansi16m",()=>Uf(K7,"rgb",V7,!0)),e}Object.defineProperty(W7,"exports",{enumerable:!0,get:cRe})});var X7=oe((Cft,Z7)=>{"use strict";var A0=T7(),gRe=yD(),hRe=z7(),bM=new Set(["\x1B","\x9B"]),dRe=39,$7=t=>`${bM.values().next().value}[${t}m`,fRe=t=>t.split(" ").map(e=>A0(e)),wM=(t,e,r)=>{let i=[...e],A=!1,n=A0(gRe(t[t.length-1]));for(let[s,o]of i.entries()){let a=A0(o);if(n+a<=r?t[t.length-1]+=o:(t.push(o),n=0),bM.has(o))A=!0;else if(A&&o==="m"){A=!1;continue}A||(n+=a,n===r&&s<i.length-1&&(t.push(""),n=0))}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},CRe=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(A0(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},ERe=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let i="",A="",n,s=fRe(t),o=[""];for(let[a,u]of t.split(" ").entries()){r.trim!==!1&&(o[o.length-1]=o[o.length-1].trimLeft());let l=A0(o[o.length-1]);if(a!==0&&(l>=e&&(r.wordWrap===!1||r.trim===!1)&&(o.push(""),l=0),(l>0||r.trim===!1)&&(o[o.length-1]+=" ",l++)),r.hard&&s[a]>e){let g=e-l,h=1+Math.floor((s[a]-g-1)/e);Math.floor((s[a]-1)/e)<h&&o.push(""),wM(o,u,e);continue}if(l+s[a]>e&&l>0&&s[a]>0){if(r.wordWrap===!1&&l<e){wM(o,u,e);continue}o.push("")}if(l+s[a]>e&&r.wordWrap===!1){wM(o,u,e);continue}o[o.length-1]+=u}r.trim!==!1&&(o=o.map(CRe)),i=o.join(`
1088
1088
  `);for(let[a,u]of[...i].entries()){if(A+=u,bM.has(u)){let g=parseFloat(/\d[^m]*/.exec(i.slice(a,a+4)));n=g===dRe?null:g}let l=hRe.codes.get(Number(n));n&&l&&(i[a+1]===`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caeliq/claude-code-router",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "CLI for Claude Code Router",
5
5
  "bin": {
6
6
  "ccr": "dist/cli.js"
@@ -19,12 +19,13 @@
19
19
  "devDependencies": {},
20
20
  "repository": {
21
21
  "type": "git",
22
- "url": "https://github.com/oakimov/claude-code-router.git",
22
+ "url": "git+https://github.com/oakimov/claude-code-router.git",
23
23
  "directory": "packages/cli"
24
24
  },
25
25
  "publishConfig": {
26
26
  "access": "public",
27
- "registry": "https://registry.npmjs.org/"
27
+ "registry": "https://registry.npmjs.org/",
28
+ "provenance": true
28
29
  },
29
30
  "files": [
30
31
  "dist",