@thxp/claude-code-router 3.0.3 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -579,7 +579,7 @@ https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys`};var m=
|
|
|
579
579
|
${this.toMarkdown(n,t+1)}`:`${r}- ${n}`).join(`
|
|
580
580
|
`):typeof e=="object"&&e!==null?Object.entries(e).map(([n,s])=>typeof s=="object"&&s!==null?`${r}${n}:
|
|
581
581
|
${this.toMarkdown(s,t+1)}`:`${r}${n}: ${s}`).join(`
|
|
582
|
-
`):`${r}${e}`}async output(e,t={}){try{let r=this.formatData(e,t);switch(this.config.level||"log"){case"info":console.info(r);break;case"warn":console.warn(r);break;case"error":console.error(r);break;case"debug":console.debug(r);break;case"log":default:console.log(r);break}return!0}catch(r){return console.error("[ConsoleOutputHandler] Output failed:",r),!1}}}}),AD,hD=Tr(()=>{"use strict";AD=class{type="webhook";config;defaultTimeout=3e4;constructor(e){if(!e.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...e}}buildHeaders(){let e={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(e.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let t=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");e.Authorization=`Basic ${t}`}break;case"custom":this.config.auth.custom&&(e[this.config.auth.custom.header]=this.config.auth.custom.value);break}return e}buildBody(e,t){let{format:r="json",timestamp:n=!0,prefix:s,metadata:o}=t||{},i={data:e};return n&&(i.timestamp=new Date().toISOString()),s&&(i.prefix=s),o&&Object.keys(o).length>0&&(i.metadata=o),i}async sendRequest(e,t,r,n,s){let o=new AbortController,i=setTimeout(()=>o.abort(),s);try{let a=await fetch(e,{method:t,headers:r,body:JSON.stringify(n),signal:o.signal});if(clearTimeout(i),!a.ok)throw new Error(`HTTP ${a.status}: ${a.statusText}`);return a}catch(a){throw clearTimeout(i),a}}delay(e){return new Promise(t=>setTimeout(t,e))}async sendWithRetry(e,t,r,n,s,o){let i=null;for(let a=1;a<=o.maxAttempts;a++)try{return await this.sendRequest(e,t,r,n,s)}catch(u){if(i=u,a===o.maxAttempts)break;let l=o.backoffMs*Math.pow(2,a-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${a}/${o.maxAttempts}), retrying in ${l}ms...`,u.message),await this.delay(l)}throw i}async output(e,t={}){let r=t.timeout||this.defaultTimeout;try{let n=this.buildHeaders(),s=this.buildBody(e,t),o=await this.sendWithRetry(this.config.url,this.config.method,n,s,r,this.config.retry);return!0}catch(n){let s=n instanceof Error?n.message:String(n);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${s}`),!1;throw new Error(`Webhook output failed: ${s}`)}}}}),fD,dD=Tr(()=>{"use strict";fD=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,R_.tmpdir)();this.baseDir=(0,Kp.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,oh.existsSync)(this.baseDir)||(0,oh.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(e){try{let t=e.match(/_session_([a-f0-9-]+)/i);return t?t[1]:null}catch{return null}}getFilePath(e){let t=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",n;if(this.config.includeTimestamp){let s=Date.now();n=`${t}-${e}-${s}${r}`}else n=`${t}-${e}${r}`;return(0,Kp.join)(this.baseDir,n)}async output(e,t={}){try{let r=t.metadata?.sessionId;if(!r)return!1;let n={...e,timestamp:Date.now(),sessionId:r},s=this.getFilePath(r);return(0,oh.writeFileSync)(s,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),Cg,Ja,oN=Tr(()=>{"use strict";cD(),hD(),dD(),Cg=class{handlers=new Map;defaultOptions={};registerHandler(e,t){this.handlers.set(e,t)}registerHandlers(e){for(let t of e)if(t.enabled!==!1)try{let r=this.createHandler(t),n=t.type+"_"+Date.now();this.registerHandler(n,r)}catch(r){console.error(`[OutputManager] Failed to register ${t.type} handler:`,r)}}createHandler(e){switch(e.type){case"console":return new lD(e.config);case"webhook":return new AD(e.config);case"temp-file":return new fD(e.config);default:throw new Error(`Unknown output handler type: ${e.type}`)}}unregisterHandler(e){return this.handlers.delete(e)}getHandler(e){return this.handlers.get(e)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(e){this.defaultOptions={...this.defaultOptions,...e}}getDefaultOptions(){return{...this.defaultOptions}}async output(e,t){let r={...this.defaultOptions,...t},n={success:[],failed:[]},s=Array.from(this.handlers.entries()).map(async([o,i])=>{try{await i.output(e,r)?n.success.push(o):n.failed.push(o)}catch(a){console.error(`[OutputManager] Handler ${o} failed:`,a),n.failed.push(o)}});return await Promise.all(s),n}async outputTo(e,t,r){let n={...this.defaultOptions,...r},s={success:[],failed:[]},o=e.map(async i=>{let a=this.handlers.get(i);if(!a){console.warn(`[OutputManager] Handler ${i} not found`),s.failed.push(i);return}try{await a.output(t,n)?s.success.push(i):s.failed.push(i)}catch(u){console.error(`[OutputManager] Handler ${i} failed:`,u),s.failed.push(i)}});return await Promise.all(o),s}async outputToType(e,t,r){let n=Array.from(this.handlers.entries()).filter(([s,o])=>o.type===e).map(([s])=>s);return this.outputTo(n,t,r)}},Ja=new Cg}),aN=xs(Xm(),1),Bg=class{config={};options;constructor(e={jsonPath:"./config.json"}){this.options={envPath:e.envPath||".env",jsonPath:e.jsonPath,useEnvFile:!1,useJsonFile:e.useJsonFile!==!1,useEnvironmentVariables:e.useEnvironmentVariables!==!1,...e},this.loadConfig()}loadConfig(){this.options.useJsonFile&&this.options.jsonPath&&this.loadJsonConfig(),this.options.initialConfig&&(this.config={...this.config,...this.options.initialConfig}),this.options.useEnvFile&&this.loadEnvConfig(),this.config.LOG_FILE&&(process.env.LOG_FILE=this.config.LOG_FILE),this.config.LOG&&(process.env.LOG=this.config.LOG)}loadJsonConfig(){if(!this.options.jsonPath)return;let e=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,Xp.join)(process.cwd(),this.options.jsonPath);if((0,ah.existsSync)(e))try{let t=(0,ah.readFileSync)(e,"utf-8"),r=aN.default.parse(t);this.config={...this.config,...r},console.log(`Loaded JSON config from: ${e}`)}catch(t){console.warn(`Failed to load JSON config from ${e}:`,t)}else console.warn(`JSON config file not found: ${e}`)}loadEnvConfig(){let e=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,Xp.join)(process.cwd(),this.options.envPath);if((0,ah.existsSync)(e))try{let t=(0,k_.config)({path:e});t.parsed&&(this.config={...this.config,...this.parseEnvConfig(t.parsed)})}catch(t){console.warn(`Failed to load .env config from ${e}:`,t)}}loadEnvironmentVariables(){let e=this.parseEnvConfig(process.env);this.config={...this.config,...e}}parseEnvConfig(e){let t={};return Object.assign(t,e),t}isAbsolutePath(e){return e.startsWith("/")||e.includes(":")}get(e,t){let r=this.config[e];return r!==void 0?r:t}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(e){return this.config[e]!==void 0}set(e,t){this.config[e]=t}reload(){this.config={},this.loadConfig()}getConfigSummary(){let e=[];return this.options.initialConfig&&e.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&e.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&e.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&e.push("Environment Variables"),`Config sources: ${e.join(", ")}`}};function Vn(e,t=500,r="internal_error",n="api_error"){let s=new Error(e);return s.statusCode=t,s.code=r,s.type=n,s}async function uN(e,t,r){t.log.error(e);let n=e.statusCode||500,s={error:{message:e.message+e.stack||"Internal Server Error",type:e.type||"api_error",code:e.code||"internal_error"}};return r.code(n).send(s)}function lN(e,t,r,n,s){let o=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([l,c])=>{c&&o.set(l,c)});let i,a=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let l=new AbortController,c=()=>l.abort();r.signal.addEventListener("abort",c),a.addEventListener("abort",c),i=l.signal}else i=a;let u={method:"POST",headers:o,body:JSON.stringify(t),signal:i};return r.httpsProxy&&(u.dispatcher=new O_.ProxyAgent(new URL(r.httpsProxy).toString())),s?.debug({reqId:n.req.id,request:u,headers:Object.fromEntries(o.entries()),requestUrl:typeof e=="string"?e:e.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof e=="string"?e:e.toString(),u)}var cN="3.0.3",pD=class{capacity;cache;constructor(e){this.capacity=e,this.cache=new Map}get(e){if(!this.cache.has(e))return;let t=this.cache.get(e);return this.cache.delete(e),this.cache.set(e,t),t}put(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.capacity){let r=this.cache.keys().next().value;r!==void 0&&this.cache.delete(r)}this.cache.set(e,t)}has(e){return this.cache.has(e)}clear(){this.cache.clear()}values(){return Array.from(this.cache.values())}},Mh=new pD(100),gD=new pD(1e3),AN=e=>{gD.put(e,Date.now())},$h=e=>gD.has(e),Hh=(e,t)=>`${e},${t}`;async function hN(e,t,r,n){let s=e.body,o=e.provider,i=r.providerService.getProvider(o);if(!i)throw Vn(`Provider '${o}' not found`,404,"provider_not_found");let a=s,u=i,l=n,c=0,h=15;for(;c<h;)try{e.provider=u.name,e.scenarioType=e.scenarioType||"default";let{requestBody:p,config:A,bypass:d}=await dN(a,u,l,e.headers,{req:e}),f=await gN(p,A,u,r,d,l,{req:e}),g=await EN(p,f,u,l,d,{req:e});return mN(g,t,a)}catch(p){c++,e.log.warn(`[Fallback] Error on attempt ${c}: ${p.message?.substring(0,100)}`);let A=await fN(e,p);if(A){e.log.warn(`[Fallback] Rotating to ${A.provider.name},${A.modelName}`),u=A.provider,l=A.transformerConfig,a={...s,model:A.modelName};continue}throw p}}async function fN(e,t){if(t.code!=="provider_response_error"&&t.statusCode!==403&&t.statusCode!==400)return null;let r=Hh(e);AN(r);let n=e.scenarioType||"default",s=e.server.configService,o=e.server.providerService,i=e.server.transformerService,a=(await s.getConfig()).Router||{},u=getArrayValue(a[n]||a.default);if(!Array.isArray(u)||u.length===0)return null;let l=u.filter(f=>!$h(f));if(l.length===0)return null;let c=l[0],[h,p]=c.split(","),A=await o.getProvider(h);if(!A)return null;let d=await i.getTransformerConfig(A,p);return{provider:A,modelName:p,transformerConfig:d}}async function dN(e,t,r,n,s){let o=e,i={},a=!1;if(a=pN(t,r,e),a&&(n instanceof Headers?n.delete("content-length"):delete n["content-length"],i.headers=n),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(o);u.body?(o=u.body,i=u.config||{}):o=u}if(!a&&t.transformer?.use?.length)for(let u of t.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(o,t,s);l.body?(o=l.body,i={...i,...l.config}):o=l}if(!a&&t.transformer?.[e.model]?.use?.length)for(let u of t.transformer[e.model].use)!u||typeof u.transformRequestIn!="function"||(o=await u.transformRequestIn(o,t,s));return{requestBody:o,config:i,bypass:a}}function pN(e,t,r){return e.transformer?.use?.length===1&&e.transformer.use[0].name===t.name&&(!e.transformer?.[r.model]?.use.length||e.transformer?.[r.model]?.use.length===1&&e.transformer?.[r.model]?.use[0].name===t.name)}async function gN(e,t,r,n,s,o,i){let a=t.url||new URL(r.baseUrl);if(s&&typeof o.auth=="function"){let c=await o.auth(e,r);if(c.body){e=c.body;let h=t.headers||{};c.config?.headers&&(h={...h,...c.config.headers},delete h.host,delete c.config.headers),t={...t,...c.config,headers:h}}else e=c}let u={Authorization:`Bearer ${r.apiKey}`,...t?.headers||{}};for(let c in u)(u[c]==="undefined"||["authorization","Authorization"].includes(c)&&u[c]?.includes("undefined"))&&delete u[c];let l=await lN(a,e,{httpsProxy:n.configService.getHttpsProxy(),...t,headers:JSON.parse(JSON.stringify(u))},i,n.log);if(!l.ok){let c=await l.text();throw n.log.error(`[provider_response_error] Error from provider(${r.name},${e.model}: ${l.status}): ${c}`),Vn(`Error from provider(${r.name},${e.model}: ${l.status}): ${c}`,l.status,"provider_response_error")}return l}async function EN(e,t,r,n,s,o){let i=t;if(!s&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));if(!s&&r.transformer?.[e.model]?.use?.length)for(let a of Array.from(r.transformer[e.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));return!s&&n.transformResponseIn&&(i=await n.transformResponseIn(i,o)),i}function mN(e,t,r){return e.ok||t.code(e.status),r.stream===!0?(t.header("Content-Type","text/event-stream"),t.header("Cache-Control","no-cache"),t.header("Connection","keep-alive"),t.send(e.body)):e.json()}var wg=async e=>{e.get("/",async()=>({message:"LLMs API",version:cN})),e.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let t=e.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of t)r.endPoint&&e.post(r.endPoint,async(n,s)=>hN(n,s,e,r));e.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(r,n)=>{let{name:s,baseUrl:o,apiKey:i,models:a}=r.body;if(!s?.trim())throw Vn("Provider name is required",400,"invalid_request");if(!o||!yN(o))throw Vn("Valid base URL is required",400,"invalid_request");if(!i?.trim())throw Vn("API key is required",400,"invalid_request");if(!a||!Array.isArray(a)||a.length===0)throw Vn("At least one model is required",400,"invalid_request");if(e.providerService.getProvider(r.body.name))throw Vn(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return e.providerService.registerProvider(r.body)}),e.get("/providers",async()=>e.providerService.getProviders()),e.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let n=e.providerService.getProvider(r.params.id);if(!n)throw Vn("Provider not found",404,"provider_not_found");return n}),e.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(r,n)=>{let s=e.providerService.updateProvider(r.params.id,r.body);if(!s)throw Vn("Provider not found",404,"provider_not_found");return s}),e.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!e.providerService.deleteProvider(r.params.id))throw Vn("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),e.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(r,n)=>{if(!e.providerService.toggleProvider(r.params.id,r.body.enabled))throw Vn("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function yN(e){try{return new URL(e),!0}catch{return!1}}var Ig=class{constructor(e,t,r){this.configService=e,this.transformerService=t,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let e=this.configService.get("providers");if(e&&Array.isArray(e)){this.initializeFromProvidersArray(e);return}}initializeFromProvidersArray(e){e.forEach(t=>{try{if(!t.name||!t.api_base_url||!t.api_key)return;let r={};t.transformer&&Object.keys(t.transformer).forEach(n=>{n==="use"?Array.isArray(t.transformer.use)&&(r.use=t.transformer.use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")):Array.isArray(t.transformer[n]?.use)&&(r[n]={use:t.transformer[n].use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")})}),this.registerProvider({name:t.name,baseUrl:t.api_base_url,apiKey:t.api_key,models:t.models||[],transformer:t.transformer?r:void 0}),this.logger.info(`${t.name} provider registered`)}catch(r){this.logger.error(`${t.name} provider registered error: ${r}`)}})}registerProvider(e){let t={...e};return this.providers.set(t.name,t),e.models.forEach(r=>{let n=`${t.name},${r}`,s={provider:t.name,model:r,fullModel:n};this.modelRoutes.set(n,s),this.modelRoutes.has(r)||this.modelRoutes.set(r,s)}),t}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}updateProvider(e,t){let r=this.providers.get(e);if(!r)return null;let n={...r,...t,updatedAt:new Date};return this.providers.set(e,n),t.models&&(r.models.forEach(s=>{let o=`${r.name},${s}`;this.modelRoutes.delete(o),this.modelRoutes.delete(s)}),t.models.forEach(s=>{let o=`${r.name},${s}`,i={provider:r.name,model:s,fullModel:o};this.modelRoutes.set(o,i),this.modelRoutes.has(s)||this.modelRoutes.set(s,i)})),n}deleteProvider(e){let t=this.providers.get(e);return t?(t.models.forEach(r=>{let n=`${t.name},${r}`;this.modelRoutes.delete(n),this.modelRoutes.delete(r)}),this.providers.delete(e),!0):!1}toggleProvider(e,t){return!!this.providers.get(e)}resolveModelRoute(e){let t=this.modelRoutes.get(e);if(!t)return null;let r=this.providers.get(t.provider);return r?{provider:r,originalModel:e,targetModel:t.model}:null}getAvailableModelNames(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push(r),e.push(`${t.name},${r}`)})}),e}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(e){return e?Array.isArray(e)?e.reduce((t,r)=>{if(Array.isArray(r)){let[n,s={}]=r;t[n]=s}else t[r]={};return t},{}):e:{}}async getAvailableModels(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push({id:r,object:"model",owned_by:t.name,provider:t.name}),e.push({id:`${t.name},${r}`,object:"model",owned_by:t.name,provider:t.name})})}),{object:"list",data:e}}},rn=[];for(let e=0;e<256;++e)rn.push((e+256).toString(16).slice(1));function DN(e,t=0){return(rn[e[t+0]]+rn[e[t+1]]+rn[e[t+2]]+rn[e[t+3]]+"-"+rn[e[t+4]]+rn[e[t+5]]+"-"+rn[e[t+6]]+rn[e[t+7]]+"-"+rn[e[t+8]]+rn[e[t+9]]+"-"+rn[e[t+10]]+rn[e[t+11]]+rn[e[t+12]]+rn[e[t+13]]+rn[e[t+14]]+rn[e[t+15]]).toLowerCase()}var Pl=new Uint8Array(256),bl=Pl.length;function CN(){return bl>Pl.length-16&&((0,L_.randomFillSync)(Pl),bl=0),Pl.slice(bl,bl+=16)}var bg={randomUUID:P_.randomUUID};function BN(e,t,r){if(bg.randomUUID&&!t&&!e)return bg.randomUUID();e=e||{};let n=e.random??e.rng?.()??CN();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let s=0;s<16;++s)t[r+s]=n[s];return t}return DN(n)}var Ka=BN,wN=e=>e<=0?"none":e<=1024?"low":e<=8192?"medium":"high",IN=(e,t)=>(e.includes("base64")&&(e=e.split("base64").pop(),e.startsWith(",")&&(e=e.slice(1))),`data:${t};base64,${e}`),bN=class{constructor(e){this.options=e,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(e,t){let r={};return this.useBearer?(r.authorization=`Bearer ${t.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=t.apiKey,r.authorization=void 0),{body:e,config:{headers:r}}}async transformRequestOut(e){let t=[];if(e.system){if(typeof e.system=="string")t.push({role:"system",content:e.system});else if(Array.isArray(e.system)&&e.system.length){let n=e.system.filter(s=>s.type==="text"&&s.text).map(s=>({type:"text",text:s.text,cache_control:s.cache_control}));t.push({role:"system",content:n})}}JSON.parse(JSON.stringify(e.messages||[]))?.forEach(n=>{if(n.role==="user"||n.role==="assistant"){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});return}if(Array.isArray(n.content)){if(n.role==="user"){let s=n.content.filter(i=>i.type==="tool_result"&&i.tool_use_id);s.length&&s.forEach(i=>{let a={role:"tool",content:typeof i.content=="string"?i.content:JSON.stringify(i.content),tool_call_id:i.tool_use_id,cache_control:i.cache_control};t.push(a)});let o=n.content.filter(i=>i.type==="text"&&i.text||i.type==="image"&&i.source);o.length&&t.push({role:"user",content:o.map(i=>i?.type==="image"?{type:"image_url",image_url:{url:i.source?.type==="base64"?IN(i.source.data,i.source.media_type):i.source.url},media_type:i.source.media_type}:i)})}else if(n.role==="assistant"){let s={role:"assistant",content:""},o=n.content.filter(u=>u.type==="text"&&u.text);o.length&&(s.content=o.map(u=>u.text).join(`
|
|
582
|
+
`):`${r}${e}`}async output(e,t={}){try{let r=this.formatData(e,t);switch(this.config.level||"log"){case"info":console.info(r);break;case"warn":console.warn(r);break;case"error":console.error(r);break;case"debug":console.debug(r);break;case"log":default:console.log(r);break}return!0}catch(r){return console.error("[ConsoleOutputHandler] Output failed:",r),!1}}}}),AD,hD=Tr(()=>{"use strict";AD=class{type="webhook";config;defaultTimeout=3e4;constructor(e){if(!e.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...e}}buildHeaders(){let e={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(e.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let t=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");e.Authorization=`Basic ${t}`}break;case"custom":this.config.auth.custom&&(e[this.config.auth.custom.header]=this.config.auth.custom.value);break}return e}buildBody(e,t){let{format:r="json",timestamp:n=!0,prefix:s,metadata:o}=t||{},i={data:e};return n&&(i.timestamp=new Date().toISOString()),s&&(i.prefix=s),o&&Object.keys(o).length>0&&(i.metadata=o),i}async sendRequest(e,t,r,n,s){let o=new AbortController,i=setTimeout(()=>o.abort(),s);try{let a=await fetch(e,{method:t,headers:r,body:JSON.stringify(n),signal:o.signal});if(clearTimeout(i),!a.ok)throw new Error(`HTTP ${a.status}: ${a.statusText}`);return a}catch(a){throw clearTimeout(i),a}}delay(e){return new Promise(t=>setTimeout(t,e))}async sendWithRetry(e,t,r,n,s,o){let i=null;for(let a=1;a<=o.maxAttempts;a++)try{return await this.sendRequest(e,t,r,n,s)}catch(u){if(i=u,a===o.maxAttempts)break;let l=o.backoffMs*Math.pow(2,a-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${a}/${o.maxAttempts}), retrying in ${l}ms...`,u.message),await this.delay(l)}throw i}async output(e,t={}){let r=t.timeout||this.defaultTimeout;try{let n=this.buildHeaders(),s=this.buildBody(e,t),o=await this.sendWithRetry(this.config.url,this.config.method,n,s,r,this.config.retry);return!0}catch(n){let s=n instanceof Error?n.message:String(n);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${s}`),!1;throw new Error(`Webhook output failed: ${s}`)}}}}),fD,dD=Tr(()=>{"use strict";fD=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,R_.tmpdir)();this.baseDir=(0,Kp.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,oh.existsSync)(this.baseDir)||(0,oh.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(e){try{let t=e.match(/_session_([a-f0-9-]+)/i);return t?t[1]:null}catch{return null}}getFilePath(e){let t=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",n;if(this.config.includeTimestamp){let s=Date.now();n=`${t}-${e}-${s}${r}`}else n=`${t}-${e}${r}`;return(0,Kp.join)(this.baseDir,n)}async output(e,t={}){try{let r=t.metadata?.sessionId;if(!r)return!1;let n={...e,timestamp:Date.now(),sessionId:r},s=this.getFilePath(r);return(0,oh.writeFileSync)(s,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),Cg,Ja,oN=Tr(()=>{"use strict";cD(),hD(),dD(),Cg=class{handlers=new Map;defaultOptions={};registerHandler(e,t){this.handlers.set(e,t)}registerHandlers(e){for(let t of e)if(t.enabled!==!1)try{let r=this.createHandler(t),n=t.type+"_"+Date.now();this.registerHandler(n,r)}catch(r){console.error(`[OutputManager] Failed to register ${t.type} handler:`,r)}}createHandler(e){switch(e.type){case"console":return new lD(e.config);case"webhook":return new AD(e.config);case"temp-file":return new fD(e.config);default:throw new Error(`Unknown output handler type: ${e.type}`)}}unregisterHandler(e){return this.handlers.delete(e)}getHandler(e){return this.handlers.get(e)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(e){this.defaultOptions={...this.defaultOptions,...e}}getDefaultOptions(){return{...this.defaultOptions}}async output(e,t){let r={...this.defaultOptions,...t},n={success:[],failed:[]},s=Array.from(this.handlers.entries()).map(async([o,i])=>{try{await i.output(e,r)?n.success.push(o):n.failed.push(o)}catch(a){console.error(`[OutputManager] Handler ${o} failed:`,a),n.failed.push(o)}});return await Promise.all(s),n}async outputTo(e,t,r){let n={...this.defaultOptions,...r},s={success:[],failed:[]},o=e.map(async i=>{let a=this.handlers.get(i);if(!a){console.warn(`[OutputManager] Handler ${i} not found`),s.failed.push(i);return}try{await a.output(t,n)?s.success.push(i):s.failed.push(i)}catch(u){console.error(`[OutputManager] Handler ${i} failed:`,u),s.failed.push(i)}});return await Promise.all(o),s}async outputToType(e,t,r){let n=Array.from(this.handlers.entries()).filter(([s,o])=>o.type===e).map(([s])=>s);return this.outputTo(n,t,r)}},Ja=new Cg}),aN=xs(Xm(),1),Bg=class{config={};options;constructor(e={jsonPath:"./config.json"}){this.options={envPath:e.envPath||".env",jsonPath:e.jsonPath,useEnvFile:!1,useJsonFile:e.useJsonFile!==!1,useEnvironmentVariables:e.useEnvironmentVariables!==!1,...e},this.loadConfig()}loadConfig(){this.options.useJsonFile&&this.options.jsonPath&&this.loadJsonConfig(),this.options.initialConfig&&(this.config={...this.config,...this.options.initialConfig}),this.options.useEnvFile&&this.loadEnvConfig(),this.config.LOG_FILE&&(process.env.LOG_FILE=this.config.LOG_FILE),this.config.LOG&&(process.env.LOG=this.config.LOG)}loadJsonConfig(){if(!this.options.jsonPath)return;let e=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,Xp.join)(process.cwd(),this.options.jsonPath);if((0,ah.existsSync)(e))try{let t=(0,ah.readFileSync)(e,"utf-8"),r=aN.default.parse(t);this.config={...this.config,...r},console.log(`Loaded JSON config from: ${e}`)}catch(t){console.warn(`Failed to load JSON config from ${e}:`,t)}else console.warn(`JSON config file not found: ${e}`)}loadEnvConfig(){let e=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,Xp.join)(process.cwd(),this.options.envPath);if((0,ah.existsSync)(e))try{let t=(0,k_.config)({path:e});t.parsed&&(this.config={...this.config,...this.parseEnvConfig(t.parsed)})}catch(t){console.warn(`Failed to load .env config from ${e}:`,t)}}loadEnvironmentVariables(){let e=this.parseEnvConfig(process.env);this.config={...this.config,...e}}parseEnvConfig(e){let t={};return Object.assign(t,e),t}isAbsolutePath(e){return e.startsWith("/")||e.includes(":")}get(e,t){let r=this.config[e];return r!==void 0?r:t}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(e){return this.config[e]!==void 0}set(e,t){this.config[e]=t}reload(){this.config={},this.loadConfig()}getConfigSummary(){let e=[];return this.options.initialConfig&&e.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&e.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&e.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&e.push("Environment Variables"),`Config sources: ${e.join(", ")}`}};function Vn(e,t=500,r="internal_error",n="api_error"){let s=new Error(e);return s.statusCode=t,s.code=r,s.type=n,s}async function uN(e,t,r){t.log.error(e);let n=e.statusCode||500,s={error:{message:e.message+e.stack||"Internal Server Error",type:e.type||"api_error",code:e.code||"internal_error"}};return r.code(n).send(s)}function lN(e,t,r,n,s){let o=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([l,c])=>{c&&o.set(l,c)});let i,a=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let l=new AbortController,c=()=>l.abort();r.signal.addEventListener("abort",c),a.addEventListener("abort",c),i=l.signal}else i=a;let u={method:"POST",headers:o,body:JSON.stringify(t),signal:i};return r.httpsProxy&&(u.dispatcher=new O_.ProxyAgent(new URL(r.httpsProxy).toString())),s?.debug({reqId:n.req.id,request:u,headers:Object.fromEntries(o.entries()),requestUrl:typeof e=="string"?e:e.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof e=="string"?e:e.toString(),u)}var cN="3.0.4",pD=class{capacity;cache;constructor(e){this.capacity=e,this.cache=new Map}get(e){if(!this.cache.has(e))return;let t=this.cache.get(e);return this.cache.delete(e),this.cache.set(e,t),t}put(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.capacity){let r=this.cache.keys().next().value;r!==void 0&&this.cache.delete(r)}this.cache.set(e,t)}has(e){return this.cache.has(e)}clear(){this.cache.clear()}values(){return Array.from(this.cache.values())}},Mh=new pD(100),gD=new pD(1e3),AN=e=>{gD.put(e,Date.now())},$h=e=>gD.has(e),Hh=(e,t)=>`${e},${t}`;async function hN(e,t,r,n){let s=e.body,o=e.provider,i=r.providerService.getProvider(o);if(!i)throw Vn(`Provider '${o}' not found`,404,"provider_not_found");let a=s,u=i,l=n,c=0,h=15;for(;c<h;)try{e.provider=u.name,e.scenarioType=e.scenarioType||"default";let{requestBody:p,config:A,bypass:d}=await dN(a,u,l,e.headers,{req:e}),f=await gN(p,A,u,r,d,l,{req:e}),g=await EN(p,f,u,l,d,{req:e});return mN(g,t,a)}catch(p){c++,e.log.warn(`[Fallback] Error on attempt ${c}: ${p.message?.substring(0,100)}`);let A=await fN(e,r,p);if(A){e.log.warn(`[Fallback] Rotating to ${A.provider.name},${A.modelName}`),u=A.provider,l=A.transformerConfig,a={...s,model:A.modelName};continue}throw p}}async function fN(e,t,r){if(r.code!=="provider_response_error"&&r.statusCode!==403&&r.statusCode!==400)return null;let n=Hh(e.provider,e.body.model);AN(n);let s=e.scenarioType||"default",o=t.configService,i=t.providerService,a=t.transformerService,u=(await o.getConfig()).Router||{},l=getArrayValue(u[s]||u.default);if(!Array.isArray(l)||l.length===0)return null;let c=l.filter(g=>!$h(g));if(c.length===0)return null;let h=c[0],[p,A]=h.split(","),d=await i.getProvider(p);if(!d)return null;let f=await a.getTransformerConfig(d,A);return{provider:d,modelName:A,transformerConfig:f}}async function dN(e,t,r,n,s){let o=e,i={},a=!1;if(a=pN(t,r,e),a&&(n instanceof Headers?n.delete("content-length"):delete n["content-length"],i.headers=n),!a&&typeof r.transformRequestOut=="function"){let u=await r.transformRequestOut(o);u.body?(o=u.body,i=u.config||{}):o=u}if(!a&&t.transformer?.use?.length)for(let u of t.transformer.use){if(!u||typeof u.transformRequestIn!="function")continue;let l=await u.transformRequestIn(o,t,s);l.body?(o=l.body,i={...i,...l.config}):o=l}if(!a&&t.transformer?.[e.model]?.use?.length)for(let u of t.transformer[e.model].use)!u||typeof u.transformRequestIn!="function"||(o=await u.transformRequestIn(o,t,s));return{requestBody:o,config:i,bypass:a}}function pN(e,t,r){return e.transformer?.use?.length===1&&e.transformer.use[0].name===t.name&&(!e.transformer?.[r.model]?.use.length||e.transformer?.[r.model]?.use.length===1&&e.transformer?.[r.model]?.use[0].name===t.name)}async function gN(e,t,r,n,s,o,i){let a=t.url||new URL(r.baseUrl);if(s&&typeof o.auth=="function"){let c=await o.auth(e,r);if(c.body){e=c.body;let h=t.headers||{};c.config?.headers&&(h={...h,...c.config.headers},delete h.host,delete c.config.headers),t={...t,...c.config,headers:h}}else e=c}let u={Authorization:`Bearer ${r.apiKey}`,...t?.headers||{}};for(let c in u)(u[c]==="undefined"||["authorization","Authorization"].includes(c)&&u[c]?.includes("undefined"))&&delete u[c];let l=await lN(a,e,{httpsProxy:n.configService.getHttpsProxy(),...t,headers:JSON.parse(JSON.stringify(u))},i,n.log);if(!l.ok){let c=await l.text();throw n.log.error(`[provider_response_error] Error from provider(${r.name},${e.model}: ${l.status}): ${c}`),Vn(`Error from provider(${r.name},${e.model}: ${l.status}): ${c}`,l.status,"provider_response_error")}return l}async function EN(e,t,r,n,s,o){let i=t;if(!s&&r.transformer?.use?.length)for(let a of Array.from(r.transformer.use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));if(!s&&r.transformer?.[e.model]?.use?.length)for(let a of Array.from(r.transformer[e.model].use).reverse())!a||typeof a.transformResponseOut!="function"||(i=await a.transformResponseOut(i,o));return!s&&n.transformResponseIn&&(i=await n.transformResponseIn(i,o)),i}function mN(e,t,r){return e.ok||t.code(e.status),r.stream===!0?(t.header("Content-Type","text/event-stream"),t.header("Cache-Control","no-cache"),t.header("Connection","keep-alive"),t.send(e.body)):e.json()}var wg=async e=>{e.get("/",async()=>({message:"LLMs API",version:cN})),e.get("/health",async()=>({status:"ok",timestamp:new Date().toISOString()}));let t=e.transformerService.getTransformersWithEndpoint();for(let{transformer:r}of t)r.endPoint&&e.post(r.endPoint,async(n,s)=>hN(n,s,e,r));e.post("/providers",{schema:{body:{type:"object",properties:{id:{type:"string"},name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}}},required:["id","name","type","baseUrl","apiKey","models"]}}},async(r,n)=>{let{name:s,baseUrl:o,apiKey:i,models:a}=r.body;if(!s?.trim())throw Vn("Provider name is required",400,"invalid_request");if(!o||!yN(o))throw Vn("Valid base URL is required",400,"invalid_request");if(!i?.trim())throw Vn("API key is required",400,"invalid_request");if(!a||!Array.isArray(a)||a.length===0)throw Vn("At least one model is required",400,"invalid_request");if(e.providerService.getProvider(r.body.name))throw Vn(`Provider with name '${r.body.name}' already exists`,400,"provider_exists");return e.providerService.registerProvider(r.body)}),e.get("/providers",async()=>e.providerService.getProviders()),e.get("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{let n=e.providerService.getProvider(r.params.id);if(!n)throw Vn("Provider not found",404,"provider_not_found");return n}),e.put("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["openai","anthropic"]},baseUrl:{type:"string"},apiKey:{type:"string"},models:{type:"array",items:{type:"string"}},enabled:{type:"boolean"}}}}},async(r,n)=>{let s=e.providerService.updateProvider(r.params.id,r.body);if(!s)throw Vn("Provider not found",404,"provider_not_found");return s}),e.delete("/providers/:id",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]}}},async r=>{if(!e.providerService.deleteProvider(r.params.id))throw Vn("Provider not found",404,"provider_not_found");return{message:"Provider deleted successfully"}}),e.patch("/providers/:id/toggle",{schema:{params:{type:"object",properties:{id:{type:"string"}},required:["id"]},body:{type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"]}}},async(r,n)=>{if(!e.providerService.toggleProvider(r.params.id,r.body.enabled))throw Vn("Provider not found",404,"provider_not_found");return{message:`Provider ${r.body.enabled?"enabled":"disabled"} successfully`}})};function yN(e){try{return new URL(e),!0}catch{return!1}}var Ig=class{constructor(e,t,r){this.configService=e,this.transformerService=t,this.logger=r,this.initializeCustomProviders()}providers=new Map;modelRoutes=new Map;initializeCustomProviders(){let e=this.configService.get("providers");if(e&&Array.isArray(e)){this.initializeFromProvidersArray(e);return}}initializeFromProvidersArray(e){e.forEach(t=>{try{if(!t.name||!t.api_base_url||!t.api_key)return;let r={};t.transformer&&Object.keys(t.transformer).forEach(n=>{n==="use"?Array.isArray(t.transformer.use)&&(r.use=t.transformer.use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")):Array.isArray(t.transformer[n]?.use)&&(r[n]={use:t.transformer[n].use.map(s=>{if(Array.isArray(s)&&typeof s[0]=="string"){let o=this.transformerService.getTransformer(s[0]);if(o)return new o(s[1])}if(typeof s=="string"){let o=this.transformerService.getTransformer(s);return typeof o=="function"?new o:o}}).filter(s=>typeof s<"u")})}),this.registerProvider({name:t.name,baseUrl:t.api_base_url,apiKey:t.api_key,models:t.models||[],transformer:t.transformer?r:void 0}),this.logger.info(`${t.name} provider registered`)}catch(r){this.logger.error(`${t.name} provider registered error: ${r}`)}})}registerProvider(e){let t={...e};return this.providers.set(t.name,t),e.models.forEach(r=>{let n=`${t.name},${r}`,s={provider:t.name,model:r,fullModel:n};this.modelRoutes.set(n,s),this.modelRoutes.has(r)||this.modelRoutes.set(r,s)}),t}getProviders(){return Array.from(this.providers.values())}getProvider(e){return this.providers.get(e)}updateProvider(e,t){let r=this.providers.get(e);if(!r)return null;let n={...r,...t,updatedAt:new Date};return this.providers.set(e,n),t.models&&(r.models.forEach(s=>{let o=`${r.name},${s}`;this.modelRoutes.delete(o),this.modelRoutes.delete(s)}),t.models.forEach(s=>{let o=`${r.name},${s}`,i={provider:r.name,model:s,fullModel:o};this.modelRoutes.set(o,i),this.modelRoutes.has(s)||this.modelRoutes.set(s,i)})),n}deleteProvider(e){let t=this.providers.get(e);return t?(t.models.forEach(r=>{let n=`${t.name},${r}`;this.modelRoutes.delete(n),this.modelRoutes.delete(r)}),this.providers.delete(e),!0):!1}toggleProvider(e,t){return!!this.providers.get(e)}resolveModelRoute(e){let t=this.modelRoutes.get(e);if(!t)return null;let r=this.providers.get(t.provider);return r?{provider:r,originalModel:e,targetModel:t.model}:null}getAvailableModelNames(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push(r),e.push(`${t.name},${r}`)})}),e}getModelRoutes(){return Array.from(this.modelRoutes.values())}parseTransformerConfig(e){return e?Array.isArray(e)?e.reduce((t,r)=>{if(Array.isArray(r)){let[n,s={}]=r;t[n]=s}else t[r]={};return t},{}):e:{}}async getAvailableModels(){let e=[];return this.providers.forEach(t=>{t.models.forEach(r=>{e.push({id:r,object:"model",owned_by:t.name,provider:t.name}),e.push({id:`${t.name},${r}`,object:"model",owned_by:t.name,provider:t.name})})}),{object:"list",data:e}}},rn=[];for(let e=0;e<256;++e)rn.push((e+256).toString(16).slice(1));function DN(e,t=0){return(rn[e[t+0]]+rn[e[t+1]]+rn[e[t+2]]+rn[e[t+3]]+"-"+rn[e[t+4]]+rn[e[t+5]]+"-"+rn[e[t+6]]+rn[e[t+7]]+"-"+rn[e[t+8]]+rn[e[t+9]]+"-"+rn[e[t+10]]+rn[e[t+11]]+rn[e[t+12]]+rn[e[t+13]]+rn[e[t+14]]+rn[e[t+15]]).toLowerCase()}var Pl=new Uint8Array(256),bl=Pl.length;function CN(){return bl>Pl.length-16&&((0,L_.randomFillSync)(Pl),bl=0),Pl.slice(bl,bl+=16)}var bg={randomUUID:P_.randomUUID};function BN(e,t,r){if(bg.randomUUID&&!t&&!e)return bg.randomUUID();e=e||{};let n=e.random??e.rng?.()??CN();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let s=0;s<16;++s)t[r+s]=n[s];return t}return DN(n)}var Ka=BN,wN=e=>e<=0?"none":e<=1024?"low":e<=8192?"medium":"high",IN=(e,t)=>(e.includes("base64")&&(e=e.split("base64").pop(),e.startsWith(",")&&(e=e.slice(1))),`data:${t};base64,${e}`),bN=class{constructor(e){this.options=e,this.useBearer=this.options?.UseBearer??!1}name="Anthropic";endPoint="/v1/messages";useBearer;logger;async auth(e,t){let r={};return this.useBearer?(r.authorization=`Bearer ${t.apiKey}`,r["x-api-key"]=void 0):(r["x-api-key"]=t.apiKey,r.authorization=void 0),{body:e,config:{headers:r}}}async transformRequestOut(e){let t=[];if(e.system){if(typeof e.system=="string")t.push({role:"system",content:e.system});else if(Array.isArray(e.system)&&e.system.length){let n=e.system.filter(s=>s.type==="text"&&s.text).map(s=>({type:"text",text:s.text,cache_control:s.cache_control}));t.push({role:"system",content:n})}}JSON.parse(JSON.stringify(e.messages||[]))?.forEach(n=>{if(n.role==="user"||n.role==="assistant"){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});return}if(Array.isArray(n.content)){if(n.role==="user"){let s=n.content.filter(i=>i.type==="tool_result"&&i.tool_use_id);s.length&&s.forEach(i=>{let a={role:"tool",content:typeof i.content=="string"?i.content:JSON.stringify(i.content),tool_call_id:i.tool_use_id,cache_control:i.cache_control};t.push(a)});let o=n.content.filter(i=>i.type==="text"&&i.text||i.type==="image"&&i.source);o.length&&t.push({role:"user",content:o.map(i=>i?.type==="image"?{type:"image_url",image_url:{url:i.source?.type==="base64"?IN(i.source.data,i.source.media_type):i.source.url},media_type:i.source.media_type}:i)})}else if(n.role==="assistant"){let s={role:"assistant",content:""},o=n.content.filter(u=>u.type==="text"&&u.text);o.length&&(s.content=o.map(u=>u.text).join(`
|
|
583
583
|
`));let i=n.content.filter(u=>u.type==="tool_use"&&u.id);i.length&&(s.tool_calls=i.map(u=>{let l=u.input;return(typeof l!="object"||l===null)&&(l=l?{text:String(l)}:{}),{id:u.id,type:"function",function:{name:u.name,arguments:JSON.stringify(l)}}}));let a=n.content.find(u=>u.type==="thinking"&&u.signature);a&&(s.thinking={content:a.thinking,signature:a.signature}),t.push(s)}return}}});let r={messages:t,model:e.model,max_tokens:e.max_tokens,temperature:e.temperature,stream:e.stream,tools:e.tools?.length?this.convertAnthropicToolsToUnified(e.tools):void 0,tool_choice:e.tool_choice};return e.thinking&&(r.reasoning={effort:wN(e.thinking.budget_tokens),enabled:e.thinking.type==="enabled"}),e.tool_choice&&(e.tool_choice.type==="tool"?r.tool_choice={type:"function",function:{name:e.tool_choice.name}}:r.tool_choice=e.tool_choice.type),r}async transformResponseIn(e,t){if(e.headers.get("Content-Type")?.includes("text/event-stream")){if(!e.body)throw new Error("Stream response body is null");let r=await this.convertOpenAIStreamToAnthropic(e.body,t);return new Response(r,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}else{let r=await e.json(),n=this.convertOpenAIResponseToAnthropic(r,t);return new Response(JSON.stringify(n),{headers:{"Content-Type":"application/json"}})}}convertAnthropicToolsToUnified(e){return e.map(t=>({type:"function",function:{name:t.name,description:t.description||"",parameters:t.input_schema}}))}async convertOpenAIStreamToAnthropic(e,t){return new ReadableStream({start:async r=>{let n=new TextEncoder,s=`msg_${Date.now()}`,o=null,i="unknown",a=!1,u=!1,l=!1,c=new Map,h=new Map,p=0,A=0,d=0,f=!1,g=!1,E=0,D=-1,m=()=>{let C=E;return E++,C},y=C=>{if(!f)try{r.enqueue(C);let b=new TextDecoder().decode(C);this.logger.debug({reqId:t.req.id,data:b,type:"send data"})}catch(b){if(b instanceof TypeError&&b.message.includes("Controller is already closed"))f=!0;else throw this.logger.debug({reqId:t.req.id,error:b instanceof Error?b.message:String(b),type:"send data error"}),b}},B=()=>{if(!f)try{if(D>=0){let b={type:"content_block_stop",index:D};y(n.encode(`event: content_block_stop
|
|
584
584
|
data: ${JSON.stringify(b)}
|
|
585
585
|
|
|
@@ -869,7 +869,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
|
|
|
869
869
|
|
|
870
870
|
Do not attempt to describe or analyze the image directly yourself.
|
|
871
871
|
Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
|
|
872
|
-
Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(s=>s.role==="user"&&Array.isArray(s.content)&&s.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(i=>i.type==="image"))),n=1;r.forEach(s=>{Array.isArray(s.content)&&s.content.forEach(o=>{o.type==="image"?(Fl.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(i=>i.type==="image")&&(Fl.storeImage(`${e.id}_Image#${n}`,o.content[0].source),o.content=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++)})})}},oO=new sO,aO=class{agents=new Map;registerAgent(e){this.agents.set(e.name,e)}getAgent(e){return this.agents.get(e)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let e=[];for(let t of this.agents.values())e.push(...t.tools.values());return e}},RD=new aO;RD.registerAgent(oO);var wh=RD,uO=require("node:events"),Kg=new uO.EventEmitter;async function lO(){let e=(0,jm.homedir)(),t=(0,Gm.join)(e,".claude.json");if(!(0,w_.existsSync)(t)){let r={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,I_.writeFile)(t,JSON.stringify(r,null,2))}}async function cO(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:s,enabled:o=!1,options:i={}}=n;switch(s){case"token-speed":Gh.registerPlugin(QD,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...i});break;default:console.warn(`Unknown plugin: ${s}`);break}}await Gh.enablePlugins(e)}async function ND(e={}){await lO(),await b0();let t=await Vm(),r=t.Providers||t.providers||[],n=r&&r.length>0,s=t.HOST||"127.0.0.1";n?(s=t.HOST,t.APIKEY||(s="127.0.0.1")):(s="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,i=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=p=>(p>9?"":"0")+p,u=(p,A)=>{let d;p?typeof p=="number"?d=new Date(p):d=p:d=new Date;let f=d.getFullYear()+""+a(d.getMonth()+1),g=a(d.getDate()),E=a(d.getHours()),D=a(d.getMinutes());return`./logs/ccr-${f}${g}${E}${D}${a(d.getSeconds())}${A?`_${A}`:""}.log`},l;e.logger!==void 0?l=e.logger:t.LOG!==!1?(t.LOG===void 0&&(t.LOG=!0),l={level:t.LOG_LEVEL||"debug",stream:eO(u,{path:Dh.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,Dh.listPresets)(),h=await M6({jsonPath:Dh.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:s,PORT:i,LOG_FILE:(0,Gm.join)((0,jm.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return await Promise.allSettled(c.map(async p=>await h.registerNamespace(`/preset/${p.name}`,p.config))),await cO(h,t),h.addHook("preHandler",async(p,A)=>new Promise((d,f)=>{let g=E=>{E?f(E):d()};$6(t)(p,A,g).catch(f)})),h.addHook("preHandler",async(p,A)=>{let d=new URL(`http://127.0.0.1${p.url}`);p.pathname=d.pathname,p.pathname.endsWith("/v1/messages")&&p.pathname!=="/v1/messages"&&(p.preset=p.pathname.replace("/v1/messages","").replace("/",""))}),h.addHook("preHandler",async(p,A)=>{if(p.pathname.endsWith("/v1/messages")){let d=[];for(let f of wh.getAllAgents())f.shouldHandle(p,t)&&(d.push(f.name),f.reqHandler(p,t),f.tools.size&&(p.body?.tools?.length||(p.body.tools=[]),p.body.tools.unshift(...Array.from(f.tools.values()).map(g=>({name:g.name,description:g.description,input_schema:g.input_schema})))));d.length&&(p.agents=d)}}),h.addHook("onError",async(p,A,d)=>{Kg.emit("onError",p,A,d)}),h.addHook("onSend",(p,A,d,f)=>{if(p.sessionId&&p.pathname.endsWith("/v1/messages")){if(d instanceof ReadableStream){if(p.agents){let D=new AbortController,m=d.pipeThrough(new Zg),y,B=-1,I="",C="",b="",w=[],v=[];return f(null,rO(m,async(x,S)=>{try{if(x.event==="content_block_start"&&x?.data?.content_block?.name){let Q=p.agents.find(R=>wh.getAgent(R)?.tools.get(x.data.content_block.name));if(Q){y=wh.getAgent(Q),B=x.data.index,I=x.data.content_block.name,b=x.data.content_block.id;return}}if(B>-1&&x.data.index===B&&x.data?.delta?.type==="input_json_delta"){C+=x.data?.delta?.partial_json;return}if(B>-1&&x.data.index===B&&x.data.type==="content_block_stop"){try{let Q=nO.default.parse(C);v.push({type:"tool_use",id:b,name:I,input:Q});let R=await y?.tools.get(I)?.handler(Q,{req:p,config:t});w.push({tool_use_id:b,type:"tool_result",content:R}),y=void 0,B=-1,I="",C="",b=""}catch(Q){console.log(Q)}return}if(x.event==="message_delta"&&w.length){p.body.messages.push({role:"assistant",content:v}),p.body.messages.push({role:"user",content:w});let Q=await fetch(`http://127.0.0.1:${t.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":t.APIKEY,"content-type":"application/json"},body:JSON.stringify(p.body)});if(!Q.ok)return;let R=Q.body.pipeThrough(new Zg).getReader();for(;;)try{let{value:F,done:_}=await R.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"){D.abort();break}throw F}return}return x}catch(Q){if(console.error("Unexpected error in stream processing:",Q),Q.code==="ERR_STREAM_PREMATURE_CLOSE"){D.abort();return}throw Q}}).pipeThrough(new tO))}let[g,E]=d.tee();return(async D=>{let m=D.getReader();try{for(;;){let{done:y,value:B}=await m.read();if(y)break;let I=new TextDecoder().decode(B);if(!I.startsWith("event: message_delta"))continue;let C=I.slice(27);try{let b=JSON.parse(C);Mh.put(p.sessionId,b.usage)}catch{}}}catch(y){y.name==="AbortError"||y.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",y)}finally{m.releaseLock()}})(E),f(null,g)}if(Mh.put(p.sessionId,d.usage),typeof d=="object")return d.error?f(d.error,null):f(d,null)}if(typeof d=="object"&&d.error)return f(d.error,null);f(null,d)}),h.addHook("onSend",async(p,A,d)=>(Kg.emit("onSend",p,A,d),d)),process.on("uncaughtException",p=>{h.app.log.error("Uncaught exception:",p)}),process.on("unhandledRejection",(p,A)=>{h.app.log.error("Unhandled rejection at:",A,"reason:",p)}),h}async function AO(){let e=await ND();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===H0&&AO().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function PD(e){try{let{stdout:t}=await LD("npm view @thxp/claude-code-router version"),r=t.trim();return{hasUpdate:hO(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function UD(){try{let{stdout:e,stderr:t}=await LD("npm update -g @thxp/claude-code-router");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function hO(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let s=0;s<Math.max(r.length,n.length);s++){let o=s<r.length?r[s]:0,i=s<n.length?n[s]:0;if(o>i)return 1;if(o<i)return-1}return 0}var kD,OD,LD,MD=Al(()=>{"use strict";kD=require("child_process"),OD=require("util"),LD=(0,OD.promisify)(kD.exec)});var bc,j0=Al(()=>{bc="3.0.
|
|
872
|
+
Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(s=>s.role==="user"&&Array.isArray(s.content)&&s.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(i=>i.type==="image"))),n=1;r.forEach(s=>{Array.isArray(s.content)&&s.content.forEach(o=>{o.type==="image"?(Fl.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(i=>i.type==="image")&&(Fl.storeImage(`${e.id}_Image#${n}`,o.content[0].source),o.content=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++)})})}},oO=new sO,aO=class{agents=new Map;registerAgent(e){this.agents.set(e.name,e)}getAgent(e){return this.agents.get(e)}getAllAgents(){return Array.from(this.agents.values())}getAllTools(){let e=[];for(let t of this.agents.values())e.push(...t.tools.values());return e}},RD=new aO;RD.registerAgent(oO);var wh=RD,uO=require("node:events"),Kg=new uO.EventEmitter;async function lO(){let e=(0,jm.homedir)(),t=(0,Gm.join)(e,".claude.json");if(!(0,w_.existsSync)(t)){let r={numStartups:184,autoUpdaterStatus:"enabled",userID:Array.from({length:64},()=>Math.random().toString(16)[2]).join(""),hasCompletedOnboarding:!0,lastOnboardingVersion:"1.0.17",projects:{}};await(0,I_.writeFile)(t,JSON.stringify(r,null,2))}}async function cO(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:s,enabled:o=!1,options:i={}}=n;switch(s){case"token-speed":Gh.registerPlugin(QD,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...i});break;default:console.warn(`Unknown plugin: ${s}`);break}}await Gh.enablePlugins(e)}async function ND(e={}){await lO(),await b0();let t=await Vm(),r=t.Providers||t.providers||[],n=r&&r.length>0,s=t.HOST||"127.0.0.1";n?(s=t.HOST,t.APIKEY||(s="127.0.0.1")):(s="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,i=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=p=>(p>9?"":"0")+p,u=(p,A)=>{let d;p?typeof p=="number"?d=new Date(p):d=p:d=new Date;let f=d.getFullYear()+""+a(d.getMonth()+1),g=a(d.getDate()),E=a(d.getHours()),D=a(d.getMinutes());return`./logs/ccr-${f}${g}${E}${D}${a(d.getSeconds())}${A?`_${A}`:""}.log`},l;e.logger!==void 0?l=e.logger:t.LOG!==!1?(t.LOG===void 0&&(t.LOG=!0),l={level:t.LOG_LEVEL||"debug",stream:eO(u,{path:Dh.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,Dh.listPresets)(),h=await M6({jsonPath:Dh.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:s,PORT:i,LOG_FILE:(0,Gm.join)((0,jm.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return await Promise.allSettled(c.map(async p=>await h.registerNamespace(`/preset/${p.name}`,p.config))),await cO(h,t),h.addHook("preHandler",async(p,A)=>new Promise((d,f)=>{let g=E=>{E?f(E):d()};$6(t)(p,A,g).catch(f)})),h.addHook("preHandler",async(p,A)=>{let d=new URL(`http://127.0.0.1${p.url}`);p.pathname=d.pathname,p.pathname.endsWith("/v1/messages")&&p.pathname!=="/v1/messages"&&(p.preset=p.pathname.replace("/v1/messages","").replace("/",""))}),h.addHook("preHandler",async(p,A)=>{if(p.pathname.endsWith("/v1/messages")){let d=[];for(let f of wh.getAllAgents())f.shouldHandle(p,t)&&(d.push(f.name),f.reqHandler(p,t),f.tools.size&&(p.body?.tools?.length||(p.body.tools=[]),p.body.tools.unshift(...Array.from(f.tools.values()).map(g=>({name:g.name,description:g.description,input_schema:g.input_schema})))));d.length&&(p.agents=d)}}),h.addHook("onError",async(p,A,d)=>{Kg.emit("onError",p,A,d)}),h.addHook("onSend",(p,A,d,f)=>{if(p.sessionId&&p.pathname.endsWith("/v1/messages")){if(d instanceof ReadableStream){if(p.agents){let D=new AbortController,m=d.pipeThrough(new Zg),y,B=-1,I="",C="",b="",w=[],v=[];return f(null,rO(m,async(x,S)=>{try{if(x.event==="content_block_start"&&x?.data?.content_block?.name){let Q=p.agents.find(R=>wh.getAgent(R)?.tools.get(x.data.content_block.name));if(Q){y=wh.getAgent(Q),B=x.data.index,I=x.data.content_block.name,b=x.data.content_block.id;return}}if(B>-1&&x.data.index===B&&x.data?.delta?.type==="input_json_delta"){C+=x.data?.delta?.partial_json;return}if(B>-1&&x.data.index===B&&x.data.type==="content_block_stop"){try{let Q=nO.default.parse(C);v.push({type:"tool_use",id:b,name:I,input:Q});let R=await y?.tools.get(I)?.handler(Q,{req:p,config:t});w.push({tool_use_id:b,type:"tool_result",content:R}),y=void 0,B=-1,I="",C="",b=""}catch(Q){console.log(Q)}return}if(x.event==="message_delta"&&w.length){p.body.messages.push({role:"assistant",content:v}),p.body.messages.push({role:"user",content:w});let Q=await fetch(`http://127.0.0.1:${t.PORT||3456}/v1/messages`,{method:"POST",headers:{"x-api-key":t.APIKEY,"content-type":"application/json"},body:JSON.stringify(p.body)});if(!Q.ok)return;let R=Q.body.pipeThrough(new Zg).getReader();for(;;)try{let{value:F,done:_}=await R.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"){D.abort();break}throw F}return}return x}catch(Q){if(console.error("Unexpected error in stream processing:",Q),Q.code==="ERR_STREAM_PREMATURE_CLOSE"){D.abort();return}throw Q}}).pipeThrough(new tO))}let[g,E]=d.tee();return(async D=>{let m=D.getReader();try{for(;;){let{done:y,value:B}=await m.read();if(y)break;let I=new TextDecoder().decode(B);if(!I.startsWith("event: message_delta"))continue;let C=I.slice(27);try{let b=JSON.parse(C);Mh.put(p.sessionId,b.usage)}catch{}}}catch(y){y.name==="AbortError"||y.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",y)}finally{m.releaseLock()}})(E),f(null,g)}if(Mh.put(p.sessionId,d.usage),typeof d=="object")return d.error?f(d.error,null):f(d,null)}if(typeof d=="object"&&d.error)return f(d.error,null);f(null,d)}),h.addHook("onSend",async(p,A,d)=>(Kg.emit("onSend",p,A,d),d)),process.on("uncaughtException",p=>{h.app.log.error("Uncaught exception:",p)}),process.on("unhandledRejection",(p,A)=>{h.app.log.error("Unhandled rejection at:",A,"reason:",p)}),h}async function AO(){let e=await ND();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===H0&&AO().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function PD(e){try{let{stdout:t}=await LD("npm view @thxp/claude-code-router version"),r=t.trim();return{hasUpdate:hO(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function UD(){try{let{stdout:e,stderr:t}=await LD("npm update -g @thxp/claude-code-router");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function hO(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let s=0;s<Math.max(r.length,n.length);s++){let o=s<r.length?r[s]:0,i=s<n.length?n[s]:0;if(o>i)return 1;if(o<i)return-1}return 0}var kD,OD,LD,MD=Al(()=>{"use strict";kD=require("child_process"),OD=require("util"),LD=(0,OD.promisify)(kD.exec)});var bc,j0=Al(()=>{bc="3.0.4"});var V0=wt(G0=>{"use strict";Object.defineProperty(G0,"__esModule",{value:!0});var $D=require("child_process"),dO=1024*1024,HD={exec(e,t){let r={maxBuffer:2*dO,windowsHide:!0};(0,$D.exec)(e,r,t)},spawn(e,t,r){return(0,$D.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
|
|
873
873
|
`,r);n>=0&&(r=n+1)}return r>0?e.substring(r):e},split(e,t){let r=e.trim().split(/\s+/);return r.length>t&&(r[t-1]=r.slice(t-1).join(" ")),r},extractColumns(e,t,r){let n=e.split(/(\r\n|\n|\r)/),s=[];return r||(r=Math.max.apply(null,t)+1),n.forEach(o=>{let i=HD.split(o,r),a=[];t.forEach(u=>{a.push(i[u]||"")}),s.push(a)}),s},parseTable(e){let t=e.split(/(\r\n\r\n|\r\n\n|\n\r\n|\n\n)/).filter(r=>r&&r.trim().length>0).map(r=>r.split(/(\r\n|\n|\r)/).filter(n=>n.trim().length>0));return t.forEach(r=>{for(let n=0;r[n];){let s=r[n];s.startsWith(" ")?(r[n-1]+=s.trimLeft(),r.splice(n,1)):n+=1}}),t.map(r=>{let n={};return r.forEach(s=>{let o=s.indexOf(":"),i=s.slice(0,o).trim();n[i]=s.slice(o+1).trim()}),n})}};G0.default=HD});var GD=wt((jD,xc)=>{(function(e,t){"use strict";typeof define=="function"&&define.amd?define(t):typeof xc=="object"&&xc.exports?xc.exports=t():e.log=t()})(jD,function(){"use strict";var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],s={},o=null;function i(d,f){var g=d[f];if(typeof g.bind=="function")return g.bind(d);try{return Function.prototype.bind.call(g,d)}catch{return function(){return Function.prototype.apply.apply(g,[d,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(d){return d==="debug"&&(d="log"),typeof console===t?!1:d==="trace"&&r?a:console[d]!==void 0?i(console,d):console.log!==void 0?i(console,"log"):e}function l(){for(var d=this.getLevel(),f=0;f<n.length;f++){var g=n[f];this[g]=f<d?e:this.methodFactory(g,d,this.name)}if(this.log=this.debug,typeof console===t&&d<this.levels.SILENT)return"No console available for logging"}function c(d){return function(){typeof console!==t&&(l.call(this),this[d].apply(this,arguments))}}function h(d,f,g){return u(d)||c.apply(this,arguments)}function p(d,f){var g=this,E,D,m,y="loglevel";typeof d=="string"?y+=":"+d:typeof d=="symbol"&&(y=void 0);function B(v){var x=(n[v]||"silent").toUpperCase();if(!(typeof window===t||!y)){try{window.localStorage[y]=x;return}catch{}try{window.document.cookie=encodeURIComponent(y)+"="+x+";"}catch{}}}function I(){var v;if(!(typeof window===t||!y)){try{v=window.localStorage[y]}catch{}if(typeof v===t)try{var x=window.document.cookie,S=encodeURIComponent(y),Q=x.indexOf(S+"=");Q!==-1&&(v=/^([^;]+)/.exec(x.slice(Q+S.length+1))[1])}catch{}return g.levels[v]===void 0&&(v=void 0),v}}function C(){if(!(typeof window===t||!y)){try{window.localStorage.removeItem(y)}catch{}try{window.document.cookie=encodeURIComponent(y)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function b(v){var x=v;if(typeof x=="string"&&g.levels[x.toUpperCase()]!==void 0&&(x=g.levels[x.toUpperCase()]),typeof x=="number"&&x>=0&&x<=g.levels.SILENT)return x;throw new TypeError("log.setLevel() called with invalid level: "+v)}g.name=d,g.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},g.methodFactory=f||h,g.getLevel=function(){return m??D??E},g.setLevel=function(v,x){return m=b(v),x!==!1&&B(m),l.call(g)},g.setDefaultLevel=function(v){D=b(v),I()||g.setLevel(v,!1)},g.resetLevel=function(){m=null,C(),l.call(g)},g.enableAll=function(v){g.setLevel(g.levels.TRACE,v)},g.disableAll=function(v){g.setLevel(g.levels.SILENT,v)},g.rebuild=function(){if(o!==g&&(E=b(o.getLevel())),l.call(g),o===g)for(var v in s)s[v].rebuild()},E=b(o?o.getLevel():"WARN");var w=I();w!=null&&(m=b(w)),l.call(g)}o=new p,o.getLogger=function(f){if(typeof f!="symbol"&&typeof f!="string"||f==="")throw new TypeError("You must supply a name when creating a logger.");var g=s[f];return g||(g=s[f]=new p(f,o.methodFactory)),g};var A=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=A),o},o.getLoggers=function(){return s},o.default=o,o})});var q0=wt(mu=>{"use strict";var pO=mu&&mu.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(mu,"__esModule",{value:!0});var gO=pO(GD());mu.default=gO.default});var YD=wt(Ei=>{"use strict";var EO=Ei&&Ei.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),mO=Ei&&Ei.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),VD=Ei&&Ei.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),s=0;s<n.length;s++)n[s]!=="default"&&EO(r,t,n[s]);return mO(r,t),r}})(),qD=Ei&&Ei.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ei,"__esModule",{value:!0});var yO=VD(require("os")),vc=VD(require("fs")),On=qD(V0()),DO=qD(q0()),CO=e=>new Promise((t,r)=>{vc.existsSync(e)?t():vc.mkdir(e,n=>{n?r(n):t()})}),Ko={darwin(e){return new Promise((t,r)=>{On.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(n,s,o){if(n)r(n);else{let i=o.toString().trim();if(i){r(new Error(i));return}let a=On.default.stripLine(s.toString(),1),u=a.slice(0,a.indexOf(`
|
|
874
874
|
`)),l=On.default.stripLine(a,1),c=u.indexOf("rxbytes")>=0?10:8,h=On.default.extractColumns(l,[0,3,c],10).filter(p=>!!String(p[0]).match(/^(udp|tcp)/)).find(p=>{let A=String(p[1]).match(/\.(\d+)$/);return!!(A&&A[1]===String(e))});h&&h[2].length?t(parseInt(h[2],10)):r(new Error(`pid of port (${e}) not found`))}})})},linux(e){return new Promise((t,r)=>{On.default.exec("netstat -tunlp",function(s,o,i){if(s)r(s);else{let a=i.toString().trim();a&&DO.default.warn(a);let u=On.default.stripLine(o.toString(),2),l=On.default.extractColumns(u,[3,6],7).find(c=>{let h=String(c[0]).match(/:(\d+)$/);return!!(h&&h[1]===String(e))});if(l&&l[1]){let c=l[1].split("/",1)[0];c.length?t(parseInt(c,10)):r(new Error(`pid of port (${e}) not found`))}else r(new Error(`pid of port (${e}) not found`))}})})},win32(e){return new Promise((t,r)=>{On.default.exec("netstat -ano",function(n,s,o){if(n)r(n);else{let i=o.toString().trim();if(i){r(new Error(i));return}let a=On.default.stripLine(s.toString(),4),u=On.default.extractColumns(a,[1,4],5).find(l=>{let c=String(l[0]).match(/:(\d+)$/);return!!(c&&c[1]===String(e))});u&&u[1].length&&parseInt(u[1],10)>0?t(parseInt(u[1],10)):r(new Error(`pid of port (${e}) not found`))}})})},android(e){return new Promise((t,r)=>{let n=yO.tmpdir()+"/.find-process",s=n+"/"+process.pid,o='netstat -tunp >> "'+s+'"';CO(n).then(()=>{On.default.exec(o,()=>{vc.readFile(s,"utf8",(i,a)=>{if(vc.unlink(s,()=>{}),i)r(i);else{a=On.default.stripLine(a,2);let u=On.default.extractColumns(a,[3,6],7).find(l=>{let c=String(l[0]).match(/:(\d+)$/);return!!(c&&c[1]===String(e))});if(u&&u[1]){let l=u[1].split("/",1)[0];l.length?t(parseInt(l,10)):r(new Error(`pid of port (${e}) not found`))}else r(new Error(`pid of port (${e}) not found`))}})})})})}};Ko.freebsd=Ko.darwin;Ko.sunos=Ko.darwin;function BO(e){let t=process.platform;return new Promise((r,n)=>{if(!(t in Ko))return n(new Error(`platform ${t} is unsupported`));let s=Ko[t];s(e).then(r,n)})}Ei.default=BO});var zD=wt(mi=>{"use strict";var wO=mi&&mi.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),IO=mi&&mi.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),bO=mi&&mi.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),s=0;s<n.length;s++)n[s]!=="default"&&wO(r,t,n[s]);return IO(r,t),r}})(),xO=mi&&mi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(mi,"__esModule",{value:!0});var Fc=bO(require("path")),vs=xO(V0());function Y0(e,t){return t?e&&e.match?e.match(t)!==null:!1:!0}function JD(e){let t=e.split(Fc.sep),r=t[t.length-1];r&&(t[t.length-1]=r.split(" ")[0]);let n=[];for(let s of t){let o=s.indexOf(" -");if(o>=0){n.push(s.substring(0,o).trim());break}else if(s.endsWith(" ")){n.push(s.trim());break}n.push(s)}return n.join(Fc.sep)}function WD(e){if(process.platform==="darwin"){let t=e.indexOf(".app/");if(t>=0)return Fc.basename(e.substring(0,t))}return Fc.basename(e)}var no={darwin(e){return new Promise((t,r)=>{let n;"pid"in e&&e.pid!==void 0?n=`ps -p ${e.pid} -ww -o pid,ppid,uid,gid,args`:n="ps ax -ww -o pid,ppid,uid,gid,args",vs.default.exec(n,function(s,o,i){if(s)"pid"in e&&e.pid!==void 0?t([]):r(s);else{let a=i.toString().trim();if(a){r(new Error(a));return}let u=vs.default.stripLine(o.toString(),1),c=vs.default.extractColumns(u,[0,1,2,3,4],5).filter(h=>h[0]&&e.pid!==void 0?h[0]===String(e.pid):h[4]&&e.name?Y0(h[4],e.name):!!h[0]).map(h=>{let p=String(h[4]),A=JD(p);return{pid:parseInt(h[0],10),ppid:parseInt(h[1],10),uid:parseInt(h[2],10),gid:parseInt(h[3],10),name:WD(A),bin:A,cmd:h[4]}});e.config.strict&&e.name&&(c=c.filter(h=>h.name===e.name)),t(c)}})})},win32(e){return new Promise((t,r)=>{let n="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",s=[],o=vs.default.spawn("powershell.exe",["/c",n],{detached:!1,windowsHide:!0});o.stdout.on("data",i=>{s.push(i.toString())}),o.on("error",i=>{r(new Error("Command '"+n+"' failed with reason: "+i.toString()))}),o.on("close",i=>{if(i!==0)return r(new Error("Command '"+n+"' terminated with code: "+i));let a=vs.default.parseTable(s.join("")).filter(u=>{if(e.pid!==void 0)return u.ProcessId===String(e.pid);if(e.name){let l=u.Name||"";return e.config.strict?l===e.name||l.endsWith(".exe")&&l.slice(0,-4)===e.name:Y0(u.CommandLine||l,e.name)}else return!0}).map(u=>({pid:parseInt(u.ProcessId,10),ppid:parseInt(u.ParentProcessId,10),bin:u.ExecutablePath,name:u.Name||"",cmd:u.CommandLine}));t(a)})})},android(e){return new Promise((t,r)=>{vs.default.exec("ps",function(s,o,i){if(s)e.pid!==void 0?t([]):r(s);else{let a=i.toString().trim();if(a){r(new Error(a));return}let u=vs.default.stripLine(o.toString(),1),c=vs.default.extractColumns(u,[0,3],4).filter(h=>h[0]&&e.pid!==void 0?h[0]===String(e.pid):h[1]&&e.name?Y0(h[1],e.name):!!h[0]).map(h=>{let p=String(h[1]),A=JD(p);return{pid:parseInt(h[0],10),ppid:0,name:WD(A),bin:A,cmd:h[1]}});e.config.strict&&e.name&&(c=c.filter(h=>h.name===e.name)),t(c)}})})}};no.linux=no.darwin;no.sunos=no.darwin;no.freebsd=no.darwin;function vO(e){let t=process.platform,r=no[t];return r?r(e):Promise.reject(new Error(`Platform "${t}" is not supported`))}mi.default=vO});var KD=wt(yu=>{"use strict";var W0=yu&&yu.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yu,"__esModule",{value:!0});var FO=W0(YD()),ZD=W0(zD()),SO=W0(q0()),J0={port(e,t){return(0,FO.default)(e).then(r=>J0.pid(r,t),()=>[])},pid(e,t){return(0,ZD.default)({pid:e,config:t})},name(e,t){return(0,ZD.default)({name:e,config:t,skipSelf:!0})}};function QO(e,t,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&SO.default.setLevel(n.logLevel),new Promise((s,o)=>{if(!(e in J0))o(new Error(`do not support find by "${e}"`));else{let i=/^\d+$/.test(String(t));e==="pid"&&!i?o(new Error("pid must be a number")):e==="port"&&!i?o(new Error("port must be a number")):J0[e](t,n).then(s,o)}})}yu.default=QO});var eC=wt(XD=>{"use strict";Object.defineProperty(XD,"__esModule",{value:!0})});var tC=wt(yi=>{"use strict";var _O=yi&&yi.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),RO=yi&&yi.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&_O(t,e,r)},NO=yi&&yi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yi,"__esModule",{value:!0});yi.default=void 0;var TO=KD();Object.defineProperty(yi,"default",{enumerable:!0,get:function(){return NO(TO).default}});RO(eC(),yi)});function nC(){let e=0;(0,En.existsSync)(nn.REFERENCE_COUNT_FILE)&&(e=parseInt((0,En.readFileSync)(nn.REFERENCE_COUNT_FILE,"utf-8"))||0),e++,(0,En.writeFileSync)(nn.REFERENCE_COUNT_FILE,e.toString())}function z0(){let e=0;(0,En.existsSync)(nn.REFERENCE_COUNT_FILE)&&(e=parseInt((0,En.readFileSync)(nn.REFERENCE_COUNT_FILE,"utf-8"))||0),e=Math.max(0,e-1),(0,En.writeFileSync)(nn.REFERENCE_COUNT_FILE,e.toString())}function iC(){return(0,En.existsSync)(nn.REFERENCE_COUNT_FILE)&&parseInt((0,En.readFileSync)(nn.REFERENCE_COUNT_FILE,"utf-8"))||0}function io(){if(!(0,En.existsSync)(nn.PID_FILE))return!1;let e;try{let t=(0,En.readFileSync)(nn.PID_FILE,"utf-8");if(e=parseInt(t,10),isNaN(e))return es(),!1}catch{return!1}try{if(process.platform==="win32"){let t=`tasklist /FI "PID eq ${e}"`;return(0,rC.execSync)(t,{stdio:"pipe"}).toString().includes(e.toString())?!0:(es(),!1)}else return process.kill(e,0),!0}catch{return es(),!1}}function es(){if((0,En.existsSync)(nn.PID_FILE))try{require("fs").unlinkSync(nn.PID_FILE)}catch{}}function sC(){if(!(0,En.existsSync)(nn.PID_FILE))return null;try{let e=parseInt((0,En.readFileSync)(nn.PID_FILE,"utf-8"));return isNaN(e)?null:e}catch{return null}}async function Sc(){let e=sC(),t=await io(),n=(await Ln()).PORT||3456;return{running:t,pid:e,port:n,endpoint:`http://127.0.0.1:${n}`,pidFile:nn.PID_FILE,referenceCount:iC()}}async function oC(){if(iC()===0){let t=sC();if(t&&await io())try{process.kill(t,"SIGTERM")}catch{}}}var En,nn,kO,rC,Du=Al(()=>{"use strict";En=require("fs"),nn=Gt(li());Fs();kO=Gt(tC()),rC=require("child_process")});var dC={};up(dC,{backupConfigFile:()=>hC,getSettingsPath:()=>tf,initConfig:()=>OO,initDir:()=>AC,readConfigFile:()=>Ln,restartService:()=>ef,run:()=>X0,writeConfigFile:()=>fC});var Fn,aC,Ss,uC,lC,Fr,cC,Xo,K0,Z0,Cu,AC,Ln,hC,fC,OO,X0,ef,tf,Fs=Al(()=>{"use strict";Fn=Gt(require("node:fs/promises")),aC=Gt(gl()),Ss=Gt(require("node:path")),uC=require("node:crypto"),lC=Gt(require("node:os")),Fr=Gt(li()),cC=Gt(TD()),Xo=require("fs");MD();j0();K0=require("child_process");Du();Z0=e=>{if(typeof e=="string")return e.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g,(t,r,n)=>{let s=r||n;return process.env[s]||t});if(Array.isArray(e))return e.map(Z0);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=Z0(n);return t}return e},Cu=async e=>{try{await Fn.default.access(e)}catch{await Fn.default.mkdir(e,{recursive:!0})}},AC=async()=>{await Cu(Fr.HOME_DIR),await Cu(Fr.PLUGINS_DIR),await Cu(Fr.PRESETS_DIR),await Cu(Ss.default.join(Fr.HOME_DIR,"logs"))},Ln=async()=>{try{let e=await Fn.default.readFile(Fr.CONFIG_FILE,"utf-8");try{let t=aC.default.parse(e);return Z0(t)}catch(t){console.error(`Failed to parse config file at ${Fr.CONFIG_FILE}`),console.error("Error details:",t.message),console.error("Please check your config file syntax."),process.exit(1)}}catch(e){if(e.code==="ENOENT")try{await AC();let t=await hC();t&&console.log(`Backed up existing configuration file to ${t}`);let r={PORT:3456,Providers:[],Router:{}};return await fC(r),console.log("Created minimal default configuration file at ~/.claude-code-router/config.json"),console.log("Please edit this file with your actual configuration."),r}catch(t){console.error("Failed to create default configuration:",t.message),process.exit(1)}else console.error(`Failed to read config file at ${Fr.CONFIG_FILE}`),console.error("Error details:",e.message),process.exit(1)}},hC=async()=>{try{if(await Fn.default.access(Fr.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=`${Fr.CONFIG_FILE}.${e}.bak`;await Fn.default.copyFile(Fr.CONFIG_FILE,t);try{let r=Ss.default.dirname(Fr.CONFIG_FILE),n=Ss.default.basename(Fr.CONFIG_FILE),o=(await Fn.default.readdir(r)).filter(i=>i.startsWith(n)&&i.endsWith(".bak")).sort().reverse();if(o.length>3)for(let i=3;i<o.length;i++){let a=Ss.default.join(r,o[i]);await Fn.default.unlink(a)}}catch(r){console.warn("Failed to clean up old backups:",r)}return t}}catch(e){console.error("Failed to backup config file:",e)}return null},fC=async e=>{await Cu(Fr.HOME_DIR);let t=`${JSON.stringify(e,null,2)}`;await Fn.default.writeFile(Fr.CONFIG_FILE,t)},OO=async()=>{let e=await Ln();return Object.assign(process.env,e),e},X0=async(e=[])=>{if(io()){console.log("claude-code-router server is running");return}let r=await(0,cC.getServer)(),n=r.app;(0,Xo.writeFileSync)(Fr.PID_FILE,process.pid.toString()),n.post("/api/update/perform",async()=>await UD()),n.get("/api/update/check",async()=>await PD(bc)),n.post("/api/restart",async()=>(setTimeout(async()=>{(0,K0.spawn)("ccr",["restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await r.start()},ef=async()=>{try{let r=parseInt((0,Xo.readFileSync)(Fr.PID_FILE,"utf-8"));if(process.kill(r),es(),(0,Xo.existsSync)(Fr.REFERENCE_COUNT_FILE))try{await Fn.default.unlink(Fr.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),es()}console.log("Starting claude code router service...");let e=Ss.default.join(__dirname,"cli.js"),t=(0,K0.spawn)("node",[e,"start"],{detached:!0,stdio:"ignore"});t.on("error",r=>{throw console.error("Failed to start service:",r),r}),t.unref(),console.log("\u2705 Service started successfully in the background.")},tf=async e=>{let t=(0,uC.createHash)("sha256").update(e,"utf-8").digest("hex"),r=Ss.default.join(lC.default.tmpdir(),"claude-code-router"),n=`ccr-settings-${t}.json`,s=Ss.default.join(r,n);try{await Fn.default.access(r)}catch{await Fn.default.mkdir(r,{recursive:!0})}try{return await Fn.default.access(s),s}catch{return await Fn.default.writeFile(s,e,"utf-8"),s}}});var EC=wt((e7,gC)=>{"use strict";gC.exports=function(t){return t.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 IC=wt((t7,wC)=>{"use strict";var BC="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")",mC=new RegExp("^"+BC+"$"),yC="|&;()<> \\t",LO='"((\\\\"|[^"])*?)"',PO="'((\\\\'|[^'])*?)'",UO=/^#$/,DC="'",CC='"',rf="$",so="",MO=4294967296;for(nf=0;nf<4;nf++)so+=(MO*Math.random()).toString(16);var nf,$O=new RegExp("^"+so);function HO(e,t){for(var r=t.lastIndex,n=[],s;s=t.exec(e);)n.push(s),t.lastIndex===s.index&&(t.lastIndex+=1);return t.lastIndex=r,n}function jO(e,t,r){var n=typeof e=="function"?e(r):e[r];return typeof n>"u"&&r!=""?n="":typeof n>"u"&&(n="$"),typeof n=="object"?t+so+JSON.stringify(n)+so:t+n}function GO(e,t,r){r||(r={});var n=r.escape||"\\",s="(\\"+n+`['"`+yC+`]|[^\\s'"`+yC+"])+",o=new RegExp(["("+BC+")","("+s+"|"+LO+"|"+PO+")+"].join("|"),"g"),i=HO(e,o);if(i.length===0)return[];t||(t={});var a=!1;return i.map(function(u){var l=u[0];if(!l||a)return;if(mC.test(l))return{op:l};var c=!1,h=!1,p="",A=!1,d;function f(){d+=1;var D,m,y=l.charAt(d);if(y==="{"){if(d+=1,l.charAt(d)==="}")throw new Error("Bad substitution: "+l.slice(d-2,d+1));if(D=l.indexOf("}",d),D<0)throw new Error("Bad substitution: "+l.slice(d));m=l.slice(d,D),d=D}else if(/[*@#?$!_-]/.test(y))m=y,d+=1;else{var B=l.slice(d);D=B.match(/[^\w\d_]/),D?(m=B.slice(0,D.index),d+=D.index-1):(m=B,d=l.length)}return jO(t,"",m)}for(d=0;d<l.length;d++){var g=l.charAt(d);if(A=A||!c&&(g==="*"||g==="?"),h)p+=g,h=!1;else if(c)g===c?c=!1:c==DC?p+=g:g===n?(d+=1,g=l.charAt(d),g===CC||g===n||g===rf?p+=g:p+=n+g):g===rf?p+=f():p+=g;else if(g===CC||g===DC)c=g;else{if(mC.test(g))return{op:l};if(UO.test(g)){a=!0;var E={comment:e.slice(u.index+d+1)};return p.length?[p,E]:[E]}else g===n?h=!0:g===rf?p+=f():p+=g}}return A?{op:"glob",pattern:p}:p}).reduce(function(u,l){return typeof l>"u"?u:u.concat(l)},[])}wC.exports=function(t,r,n){var s=GO(t,r,n);return typeof r!="function"?s:s.reduce(function(o,i){if(typeof i=="object")return o.concat(i);var a=i.split(RegExp("("+so+".*?"+so+")","g"));return a.length===1?o.concat(a[0]):o.concat(a.filter(Boolean).map(function(u){return $O.test(u)?JSON.parse(u.split(so)[1]):u}))},[])}});var bC=wt(sf=>{"use strict";sf.quote=EC();sf.parse=IC()});var SC=wt((n7,FC)=>{"use strict";function VO(e,t){var r=e;t.slice(0,-1).forEach(function(s){r=r[s]||{}});var n=t[t.length-1];return n in r}function xC(e){return typeof e=="number"||/^0x[0-9a-f]+$/i.test(e)?!0:/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(e)}function vC(e,t){return t==="constructor"&&typeof e[t]=="function"||t==="__proto__"}FC.exports=function(e,t){t||(t={});var r={bools:{},strings:{},unknownFn:null};typeof t.unknown=="function"&&(r.unknownFn=t.unknown),typeof t.boolean=="boolean"&&t.boolean?r.allBools=!0:[].concat(t.boolean).filter(Boolean).forEach(function(y){r.bools[y]=!0});var n={};function s(y){return n[y].some(function(B){return r.bools[B]})}Object.keys(t.alias||{}).forEach(function(y){n[y]=[].concat(t.alias[y]),n[y].forEach(function(B){n[B]=[y].concat(n[y].filter(function(I){return B!==I}))})}),[].concat(t.string).filter(Boolean).forEach(function(y){r.strings[y]=!0,n[y]&&[].concat(n[y]).forEach(function(B){r.strings[B]=!0})});var o=t.default||{},i={_:[]};function a(y,B){return r.allBools&&/^--[^=]+$/.test(B)||r.strings[y]||r.bools[y]||n[y]}function u(y,B,I){for(var C=y,b=0;b<B.length-1;b++){var w=B[b];if(vC(C,w))return;C[w]===void 0&&(C[w]={}),(C[w]===Object.prototype||C[w]===Number.prototype||C[w]===String.prototype)&&(C[w]={}),C[w]===Array.prototype&&(C[w]=[]),C=C[w]}var v=B[B.length-1];vC(C,v)||((C===Object.prototype||C===Number.prototype||C===String.prototype)&&(C={}),C===Array.prototype&&(C=[]),C[v]===void 0||r.bools[v]||typeof C[v]=="boolean"?C[v]=I:Array.isArray(C[v])?C[v].push(I):C[v]=[C[v],I])}function l(y,B,I){if(!(I&&r.unknownFn&&!a(y,I)&&r.unknownFn(I)===!1)){var C=!r.strings[y]&&xC(B)?Number(B):B;u(i,y.split("."),C),(n[y]||[]).forEach(function(b){u(i,b.split("."),C)})}}Object.keys(r.bools).forEach(function(y){l(y,o[y]===void 0?!1:o[y])});var c=[];e.indexOf("--")!==-1&&(c=e.slice(e.indexOf("--")+1),e=e.slice(0,e.indexOf("--")));for(var h=0;h<e.length;h++){var p=e[h],A,d;if(/^--.+=/.test(p)){var f=p.match(/^--([^=]+)=([\s\S]*)$/);A=f[1];var g=f[2];r.bools[A]&&(g=g!=="false"),l(A,g,p)}else if(/^--no-.+/.test(p))A=p.match(/^--no-(.+)/)[1],l(A,!1,p);else if(/^--.+/.test(p))A=p.match(/^--(.+)/)[1],d=e[h+1],d!==void 0&&!/^(-|--)[^-]/.test(d)&&!r.bools[A]&&!r.allBools&&(!n[A]||!s(A))?(l(A,d,p),h+=1):/^(true|false)$/.test(d)?(l(A,d==="true",p),h+=1):l(A,r.strings[A]?"":!0,p);else if(/^-[^-]+/.test(p)){for(var E=p.slice(1,-1).split(""),D=!1,m=0;m<E.length;m++){if(d=p.slice(m+2),d==="-"){l(E[m],d,p);continue}if(/[A-Za-z]/.test(E[m])&&d[0]==="="){l(E[m],d.slice(1),p),D=!0;break}if(/[A-Za-z]/.test(E[m])&&/-?\d+(\.\d*)?(e-?\d+)?$/.test(d)){l(E[m],d,p),D=!0;break}if(E[m+1]&&E[m+1].match(/\W/)){l(E[m],p.slice(m+2),p),D=!0;break}else l(E[m],r.strings[E[m]]?"":!0,p)}A=p.slice(-1)[0],!D&&A!=="-"&&(e[h+1]&&!/^(-|--)[^-]/.test(e[h+1])&&!r.bools[A]&&(!n[A]||!s(A))?(l(A,e[h+1],p),h+=1):e[h+1]&&/^(true|false)$/.test(e[h+1])?(l(A,e[h+1]==="true",p),h+=1):l(A,r.strings[A]?"":!0,p))}else if((!r.unknownFn||r.unknownFn(p)!==!1)&&i._.push(r.strings._||!xC(p)?p:Number(p)),t.stopEarly){i._.push.apply(i._,e.slice(h+1));break}}return Object.keys(o).forEach(function(y){VO(i,y.split("."))||(u(i,y.split("."),o[y]),(n[y]||[]).forEach(function(B){u(i,B.split("."),o[y])}))}),t["--"]?i["--"]=c.slice():c.forEach(function(y){i._.push(y)}),i}});var wu=wt((m7,LC)=>{var YO=require("node:tty"),JO=YO?.WriteStream?.prototype?.hasColors?.()??!1,Xt=(e,t)=>{if(!JO)return s=>s;let r=`\x1B[${e}m`,n=`\x1B[${t}m`;return s=>{let o=s+"",i=o.indexOf(n);if(i===-1)return r+o+n;let a=r,u=0,c=(t===22?n:"")+r;for(;i!==-1;)a+=o.slice(u,i)+c,u=i+n.length,i=o.indexOf(n,u);return a+=o.slice(u)+n,a}},Kt={};Kt.reset=Xt(0,0);Kt.bold=Xt(1,22);Kt.dim=Xt(2,22);Kt.italic=Xt(3,23);Kt.underline=Xt(4,24);Kt.overline=Xt(53,55);Kt.inverse=Xt(7,27);Kt.hidden=Xt(8,28);Kt.strikethrough=Xt(9,29);Kt.black=Xt(30,39);Kt.red=Xt(31,39);Kt.green=Xt(32,39);Kt.yellow=Xt(33,39);Kt.blue=Xt(34,39);Kt.magenta=Xt(35,39);Kt.cyan=Xt(36,39);Kt.white=Xt(37,39);Kt.gray=Xt(90,39);Kt.bgBlack=Xt(40,49);Kt.bgRed=Xt(41,49);Kt.bgGreen=Xt(42,49);Kt.bgYellow=Xt(43,49);Kt.bgBlue=Xt(44,49);Kt.bgMagenta=Xt(45,49);Kt.bgCyan=Xt(46,49);Kt.bgWhite=Xt(47,49);Kt.bgGray=Xt(100,49);Kt.redBright=Xt(91,39);Kt.greenBright=Xt(92,39);Kt.yellowBright=Xt(93,39);Kt.blueBright=Xt(94,39);Kt.magentaBright=Xt(95,39);Kt.cyanBright=Xt(96,39);Kt.whiteBright=Xt(97,39);Kt.bgRedBright=Xt(101,49);Kt.bgGreenBright=Xt(102,49);Kt.bgYellowBright=Xt(103,49);Kt.bgBlueBright=Xt(104,49);Kt.bgMagentaBright=Xt(105,49);Kt.bgCyanBright=Xt(106,49);Kt.bgWhiteBright=Xt(107,49);LC.exports=Kt});var GC=wt((L7,jC)=>{"use strict";jC.exports=rL;function tL(e){let t={defaultWidth:0,output:process.stdout,tty:require("tty")};return e?(Object.keys(t).forEach(function(r){e[r]||(e[r]=t[r])}),e):t}function rL(e){let t=tL(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let r=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(r)&&r!==0)return r}return t.defaultWidth}});var qC=wt((P7,VC)=>{"use strict";VC.exports=({onlyFirst:e=!1}={})=>{let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}});var Pc=wt((U7,YC)=>{"use strict";var nL=qC();YC.exports=e=>typeof e=="string"?e.replace(nL(),""):e});var WC=wt((M7,lf)=>{"use strict";var JC=e=>Number.isNaN(e)?!1:e>=4352&&(e<=4447||e===9001||e===9002||11904<=e&&e<=12871&&e!==12351||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141);lf.exports=JC;lf.exports.default=JC});var ZC=wt(($7,zC)=>{"use strict";zC.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 XC=wt((H7,cf)=>{"use strict";var iL=Pc(),sL=WC(),oL=ZC(),KC=e=>{if(typeof e!="string"||e.length===0||(e=iL(e),e.length===0))return 0;e=e.replace(oL()," ");let t=0;for(let r=0;r<e.length;r++){let n=e.codePointAt(r);n<=31||n>=127&&n<=159||n>=768&&n<=879||(n>65535&&r++,t+=sL(n)?2:1)}return t};cf.exports=KC;cf.exports.default=KC});var t1=wt((j7,e1)=>{"use strict";e1.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 Af=wt((G7,n1)=>{var Iu=t1(),r1={};for(let e of Object.keys(Iu))r1[Iu[e]]=e;var kt={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};n1.exports=kt;for(let e of Object.keys(kt)){if(!("channels"in kt[e]))throw new Error("missing channels property: "+e);if(!("labels"in kt[e]))throw new Error("missing channel labels property: "+e);if(kt[e].labels.length!==kt[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=kt[e];delete kt[e].channels,delete kt[e].labels,Object.defineProperty(kt[e],"channels",{value:t}),Object.defineProperty(kt[e],"labels",{value:r})}kt.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,s=Math.min(t,r,n),o=Math.max(t,r,n),i=o-s,a,u;o===s?a=0:t===o?a=(r-n)/i:r===o?a=2+(n-t)/i:n===o&&(a=4+(t-r)/i),a=Math.min(a*60,360),a<0&&(a+=360);let l=(s+o)/2;return o===s?u=0:l<=.5?u=i/(o+s):u=i/(2-o-s),[a,u*100,l*100]};kt.rgb.hsv=function(e){let t,r,n,s,o,i=e[0]/255,a=e[1]/255,u=e[2]/255,l=Math.max(i,a,u),c=l-Math.min(i,a,u),h=function(p){return(l-p)/6/c+1/2};return c===0?(s=0,o=0):(o=c/l,t=h(i),r=h(a),n=h(u),i===l?s=n-r:a===l?s=1/3+t-n:u===l&&(s=2/3+r-t),s<0?s+=1:s>1&&(s-=1)),[s*360,o*100,l*100]};kt.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],s=kt.rgb.hsl(e)[0],o=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[s,o*100,n*100]};kt.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,s=Math.min(1-t,1-r,1-n),o=(1-t-s)/(1-s)||0,i=(1-r-s)/(1-s)||0,a=(1-n-s)/(1-s)||0;return[o*100,i*100,a*100,s*100]};function aL(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}kt.rgb.keyword=function(e){let t=r1[e];if(t)return t;let r=1/0,n;for(let s of Object.keys(Iu)){let o=Iu[s],i=aL(e,o);i<r&&(r=i,n=s)}return n};kt.keyword.rgb=function(e){return Iu[e]};kt.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let s=t*.4124+r*.3576+n*.1805,o=t*.2126+r*.7152+n*.0722,i=t*.0193+r*.1192+n*.9505;return[s*100,o*100,i*100]};kt.rgb.lab=function(e){let t=kt.rgb.xyz(e),r=t[0],n=t[1],s=t[2];r/=95.047,n/=100,s/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let o=116*n-16,i=500*(r-n),a=200*(n-s);return[o,i,a]};kt.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,s,o,i;if(r===0)return i=n*255,[i,i,i];n<.5?s=n*(1+r):s=n+r-n*r;let a=2*n-s,u=[0,0,0];for(let l=0;l<3;l++)o=t+1/3*-(l-1),o<0&&o++,o>1&&o--,6*o<1?i=a+(s-a)*6*o:2*o<1?i=s:3*o<2?i=a+(s-a)*(2/3-o)*6:i=a,u[l]=i*255;return u};kt.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,s=r,o=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,s*=o<=1?o:2-o;let i=(n+r)/2,a=n===0?2*s/(o+s):2*r/(n+r);return[t,a*100,i*100]};kt.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,s=Math.floor(t)%6,o=t-Math.floor(t),i=255*n*(1-r),a=255*n*(1-r*o),u=255*n*(1-r*(1-o));switch(n*=255,s){case 0:return[n,u,i];case 1:return[a,n,i];case 2:return[i,n,u];case 3:return[i,a,n];case 4:return[u,i,n];case 5:return[n,i,a]}};kt.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,s=Math.max(n,.01),o,i;i=(2-r)*n;let a=(2-r)*s;return o=r*s,o/=a<=1?a:2-a,o=o||0,i/=2,[t,o*100,i*100]};kt.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,s=r+n,o;s>1&&(r/=s,n/=s);let i=Math.floor(6*t),a=1-n;o=6*t-i,(i&1)!==0&&(o=1-o);let u=r+o*(a-r),l,c,h;switch(i){default:case 6:case 0:l=a,c=u,h=r;break;case 1:l=u,c=a,h=r;break;case 2:l=r,c=a,h=u;break;case 3:l=r,c=u,h=a;break;case 4:l=u,c=r,h=a;break;case 5:l=a,c=r,h=u;break}return[l*255,c*255,h*255]};kt.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,s=e[3]/100,o=1-Math.min(1,t*(1-s)+s),i=1-Math.min(1,r*(1-s)+s),a=1-Math.min(1,n*(1-s)+s);return[o*255,i*255,a*255]};kt.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,s,o,i;return s=t*3.2406+r*-1.5372+n*-.4986,o=t*-.9689+r*1.8758+n*.0415,i=t*.0557+r*-.204+n*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),i=Math.min(Math.max(0,i),1),[s*255,o*255,i*255]};kt.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*r-16,o=500*(t-r),i=200*(r-n);return[s,o,i]};kt.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],s,o,i;o=(t+16)/116,s=r/500+o,i=o-n/200;let a=o**3,u=s**3,l=i**3;return o=a>.008856?a:(o-16/116)/7.787,s=u>.008856?u:(s-16/116)/7.787,i=l>.008856?l:(i-16/116)/7.787,s*=95.047,o*=100,i*=108.883,[s,o,i]};kt.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],s;s=Math.atan2(n,r)*360/2/Math.PI,s<0&&(s+=360);let i=Math.sqrt(r*r+n*n);return[t,i,s]};kt.lch.lab=function(e){let t=e[0],r=e[1],s=e[2]/360*2*Math.PI,o=r*Math.cos(s),i=r*Math.sin(s);return[t,o,i]};kt.rgb.ansi16=function(e,t=null){let[r,n,s]=e,o=t===null?kt.rgb.hsv(e)[2]:t;if(o=Math.round(o/50),o===0)return 30;let i=30+(Math.round(s/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return o===2&&(i+=60),i};kt.hsv.ansi16=function(e){return kt.rgb.ansi16(kt.hsv.rgb(e),e[2])};kt.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};kt.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,s=(t>>1&1)*r*255,o=(t>>2&1)*r*255;return[n,s,o]};kt.ansi256.rgb=function(e){if(e>=232){let o=(e-232)*10+8;return[o,o,o]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,s=t%6/5*255;return[r,n,s]};kt.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};kt.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),s=n>>16&255,o=n>>8&255,i=n&255;return[s,o,i]};kt.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,s=Math.max(Math.max(t,r),n),o=Math.min(Math.min(t,r),n),i=s-o,a,u;return i<1?a=o/(1-i):a=0,i<=0?u=0:s===t?u=(r-n)/i%6:s===r?u=2+(n-t)/i:u=4+(t-r)/i,u/=6,u%=1,[u*360,i*100,a*100]};kt.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),s=0;return n<1&&(s=(r-.5*n)/(1-n)),[e[0],n*100,s*100]};kt.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,s=0;return n<1&&(s=(r-n)/(1-n)),[e[0],n*100,s*100]};kt.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let s=[0,0,0],o=t%1*6,i=o%1,a=1-i,u=0;switch(Math.floor(o)){case 0:s[0]=1,s[1]=i,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=i;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=i,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return u=(1-r)*n,[(r*s[0]+u)*255,(r*s[1]+u)*255,(r*s[2]+u)*255]};kt.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),s=0;return n>0&&(s=t/n),[e[0],s*100,n*100]};kt.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,s=0;return n>0&&n<.5?s=t/(2*n):n>=.5&&n<1&&(s=t/(2*(1-n))),[e[0],s*100,n*100]};kt.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};kt.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,s=n-t,o=0;return s<1&&(o=(n-s)/(1-s)),[e[0],s*100,o*100]};kt.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};kt.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};kt.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};kt.gray.hsl=function(e){return[0,0,e[0]]};kt.gray.hsv=kt.gray.hsl;kt.gray.hwb=function(e){return[0,100,e[0]]};kt.gray.cmyk=function(e){return[0,0,0,e[0]]};kt.gray.lab=function(e){return[e[0],0,0]};kt.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};kt.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var s1=wt((V7,i1)=>{var Uc=Af();function uL(){let e={},t=Object.keys(Uc);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function lL(e){let t=uL(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),s=Object.keys(Uc[n]);for(let o=s.length,i=0;i<o;i++){let a=s[i],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function cL(e,t){return function(r){return t(e(r))}}function AL(e,t){let r=[t[e].parent,e],n=Uc[t[e].parent][e],s=t[e].parent;for(;t[s].parent;)r.unshift(t[s].parent),n=cL(Uc[t[s].parent][s],n),s=t[s].parent;return n.conversion=r,n}i1.exports=function(e){let t=lL(e),r={},n=Object.keys(t);for(let s=n.length,o=0;o<s;o++){let i=n[o];t[i].parent!==null&&(r[i]=AL(i,t))}return r}});var a1=wt((q7,o1)=>{var hf=Af(),hL=s1(),ra={},fL=Object.keys(hf);function dL(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function pL(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let s=e(r);if(typeof s=="object")for(let o=s.length,i=0;i<o;i++)s[i]=Math.round(s[i]);return s};return"conversion"in e&&(t.conversion=e.conversion),t}fL.forEach(e=>{ra[e]={},Object.defineProperty(ra[e],"channels",{value:hf[e].channels}),Object.defineProperty(ra[e],"labels",{value:hf[e].labels});let t=hL(e);Object.keys(t).forEach(n=>{let s=t[n];ra[e][n]=pL(s),ra[e][n].raw=dL(s)})});o1.exports=ra});var f1=wt((Y7,h1)=>{"use strict";var u1=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,l1=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},c1=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},Mc=e=>e,A1=(e,t,r)=>[e,t,r],na=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},ff,ia=(e,t,r,n)=>{ff===void 0&&(ff=a1());let s=n?10:0,o={};for(let[i,a]of Object.entries(ff)){let u=i==="ansi16"?"ansi":i;i===t?o[u]=e(r,s):typeof a=="object"&&(o[u]=e(a[t],s))}return o};function gL(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[s,o]of Object.entries(n))t[s]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},n[s]=t[s],e.set(o[0],o[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",na(t.color,"ansi",()=>ia(u1,"ansi16",Mc,!1)),na(t.color,"ansi256",()=>ia(l1,"ansi256",Mc,!1)),na(t.color,"ansi16m",()=>ia(c1,"rgb",A1,!1)),na(t.bgColor,"ansi",()=>ia(u1,"ansi16",Mc,!0)),na(t.bgColor,"ansi256",()=>ia(l1,"ansi256",Mc,!0)),na(t.bgColor,"ansi16m",()=>ia(c1,"rgb",A1,!0)),t}Object.defineProperty(h1,"exports",{enumerable:!0,get:gL})});var g1=wt((J7,p1)=>{"use strict";var bu=XC(),EL=Pc(),mL=f1(),pf=new Set(["\x1B","\x9B"]),yL=39,d1=e=>`${pf.values().next().value}[${e}m`,DL=e=>e.split(" ").map(t=>bu(t)),df=(e,t,r)=>{let n=[...t],s=!1,o=bu(EL(e[e.length-1]));for(let[i,a]of n.entries()){let u=bu(a);if(o+u<=r?e[e.length-1]+=a:(e.push(a),o=0),pf.has(a))s=!0;else if(s&&a==="m"){s=!1;continue}s||(o+=u,o===r&&i<n.length-1&&(e.push(""),o=0))}!o&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},CL=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(bu(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},BL=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",s="",o,i=DL(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimLeft());let c=bu(a[a.length-1]);if(u!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c>0||r.trim===!1)&&(a[a.length-1]+=" ",c++)),r.hard&&i[u]>t){let h=t-c,p=1+Math.floor((i[u]-h-1)/t);Math.floor((i[u]-1)/t)<p&&a.push(""),df(a,l,t);continue}if(c+i[u]>t&&c>0&&i[u]>0){if(r.wordWrap===!1&&c<t){df(a,l,t);continue}a.push("")}if(c+i[u]>t&&r.wordWrap===!1){df(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(CL)),n=a.join(`
|
|
875
875
|
`);for(let[u,l]of[...n].entries()){if(s+=l,pf.has(l)){let h=parseFloat(/\d[^m]*/.exec(n.slice(u,u+4)));o=h===yL?null:h}let c=mL.codes.get(Number(o));o&&c&&(n[u+1]===`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thxp/claude-code-router",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.4",
|
|
4
4
|
"description": "CLI for Claude Code Router",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ccr": "dist/cli.js"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"LICENSE"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@thxp/llms": "^3.0.
|
|
22
|
+
"@thxp/llms": "^3.0.4"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"node": ">=18.0.0"
|