@wengine-ai/claude-code-router-next 2.1.30 → 2.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.js +3 -3
- package/dist/index.html +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -92,6 +92,7 @@ npm install -g @wengine-ai/claude-code-router-next@latest && ccr restart
|
|
|
92
92
|
|
|
93
93
|
| 版本 | 发布内容 |
|
|
94
94
|
| --- | --- |
|
|
95
|
+
| **v2.1.31** | <ul><li>**供应商操作区优化**:供应商卡片右侧刷新、编辑、删除按钮改为紧凑横向排列,避免纵向拉伸导致卡片视觉松散。</li></ul> |
|
|
95
96
|
| **v2.1.30** | <ul><li>**Codex 多账号限额展示**:Codex 账号管理页新增官方限额信息展示,通过 `chatgpt.com/backend-api/wham/usage` 获取 5 小时速率限制与 7 天周限制的使用百分比和重置时间。</li><li>**Codex 账号自动切换**:Codex 请求前会检查当前账号官方限额,默认任一窗口达到 95% 自动切换到下一个可用账号;仍保留 429/限流错误后的自动切换兜底。</li></ul> |
|
|
96
97
|
| **v2.1.26** | <ul><li>**修复 Anthropic Transformer URI 覆盖问题**:当 `Anthropic` 与 DeepSeek/OpenAI 兼容提供商组合使用时,不再把 `chat/completions` 端点错误改写为 `/v1/messages`,避免 DeepSeek 返回 404。</li><li>**协议转换边界收紧**:仅当 provider 的 `api_base_url` 明确指向 `/messages` 端点时,才将请求体转换为 Anthropic messages 结构。</li></ul> |
|
|
97
98
|
| **v2.1.25** | <ul><li>**修复新版 Claude Code (v2.1.154+) 422 报错**:完美解决请求 `/v1/messages` 兼容提供商时因 messages 数组中包含 `role: "system"` 造成的 400/422 报错。</li><li>**动态 Passthrough 绕过自愈**:强制拦截带有 system 消息的 Anthropic 兼容提供商透传,自动进行双向协议规范化与 system 字段合并。</li><li>**响应无损透传修复**:支持目标为 Anthropic 协议响应的原样直出,解决了第三方接口转发时“请求成功但无数据返回”的重大漏洞。</li></ul> |
|
package/dist/cli.js
CHANGED
|
@@ -631,7 +631,7 @@ ${this.toMarkdown(R,x+1)}`:`${F}- ${R}`).join(`
|
|
|
631
631
|
${this.toMarkdown(M,x+1)}`:`${F}${R}: ${M}`).join(`
|
|
632
632
|
`):`${F}${p}`}async output(p,x={}){try{let F=this.formatData(p,x);switch(this.config.level||"log"){case"info":console.info(F);break;case"warn":console.warn(F);break;case"error":console.error(F);break;case"debug":console.debug(F);break;case"log":default:console.log(F);break}return!0}catch(F){return console.error("[ConsoleOutputHandler] Output failed:",F),!1}}}}),dc,zA=u(()=>{"use strict";dc=class{type="webhook";config;defaultTimeout=3e4;constructor(p){if(!p.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...p}}buildHeaders(){let p={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(p.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let x=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");p.Authorization=`Basic ${x}`}break;case"custom":this.config.auth.custom&&(p[this.config.auth.custom.header]=this.config.auth.custom.value);break}return p}buildBody(p,x){let{format:F="json",timestamp:R=!0,prefix:M,metadata:O}=x||{},G={data:p};return R&&(G.timestamp=new Date().toISOString()),M&&(G.prefix=M),O&&Object.keys(O).length>0&&(G.metadata=O),G}async sendRequest(p,x,F,R,M){let O=new AbortController,G=setTimeout(()=>O.abort(),M);try{let J=await fetch(p,{method:x,headers:F,body:JSON.stringify(R),signal:O.signal});if(clearTimeout(G),!J.ok)throw new Error(`HTTP ${J.status}: ${J.statusText}`);return J}catch(J){throw clearTimeout(G),J}}delay(p){return new Promise(x=>setTimeout(x,p))}async sendWithRetry(p,x,F,R,M,O){let G=null;for(let J=1;J<=O.maxAttempts;J++)try{return await this.sendRequest(p,x,F,R,M)}catch(ne){if(G=ne,J===O.maxAttempts)break;let z=O.backoffMs*Math.pow(2,J-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${J}/${O.maxAttempts}), retrying in ${z}ms...`,ne.message),await this.delay(z)}throw G}async output(p,x={}){let F=x.timeout||this.defaultTimeout;try{let R=this.buildHeaders(),M=this.buildBody(p,x),O=await this.sendWithRetry(this.config.url,this.config.method,R,M,F,this.config.retry);return!0}catch(R){let M=R instanceof Error?R.message:String(R);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${M}`),!1;throw new Error(`Webhook output failed: ${M}`)}}}}),yd,Zh,WA,KA,ZA=u(()=>{"use strict";yd=require("fs"),Zh=require("path"),WA=require("os"),KA=class{type="temp-file";config;baseDir;constructor(p={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...p};let x=(0,WA.tmpdir)();this.baseDir=(0,Zh.join)(x,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,yd.existsSync)(this.baseDir)||(0,yd.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(p){try{let x=p.match(/_session_([a-f0-9-]+)/i);return x?x[1]:null}catch{return null}}getFilePath(p){let x=this.config.prefix||"session",F=this.config.extension?`.${this.config.extension}`:"",R;if(this.config.includeTimestamp){let M=Date.now();R=`${x}-${p}-${M}${F}`}else R=`${x}-${p}${F}`;return(0,Zh.join)(this.baseDir,R)}async output(p,x={}){try{let F=x.metadata?.sessionId;if(!F)return!1;let R={...p,timestamp:Date.now(),sessionId:F},M=this.getFilePath(F);return(0,yd.writeFileSync)(M,JSON.stringify(R,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),Xh,hc,_m=u(()=>{"use strict";pa(),zA(),ZA(),Xh=class{handlers=new Map;defaultOptions={};registerHandler(p,x){this.handlers.set(p,x)}registerHandlers(p){for(let x of p)if(x.enabled!==!1)try{let F=this.createHandler(x),R=x.type+"_"+Date.now();this.registerHandler(R,F)}catch(F){console.error(`[OutputManager] Failed to register ${x.type} handler:`,F)}}createHandler(p){switch(p.type){case"console":return new fs(p.config);case"webhook":return new dc(p.config);case"temp-file":return new KA(p.config);default:throw new Error(`Unknown output handler type: ${p.type}`)}}unregisterHandler(p){return this.handlers.delete(p)}getHandler(p){return this.handlers.get(p)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(p){this.defaultOptions={...this.defaultOptions,...p}}getDefaultOptions(){return{...this.defaultOptions}}async output(p,x){let F={...this.defaultOptions,...x},R={success:[],failed:[]},M=Array.from(this.handlers.entries()).map(async([O,G])=>{try{await G.output(p,F)?R.success.push(O):R.failed.push(O)}catch(J){console.error(`[OutputManager] Handler ${O} failed:`,J),R.failed.push(O)}});return await Promise.all(M),R}async outputTo(p,x,F){let R={...this.defaultOptions,...F},M={success:[],failed:[]},O=p.map(async G=>{let J=this.handlers.get(G);if(!J){console.warn(`[OutputManager] Handler ${G} not found`),M.failed.push(G);return}try{await J.output(x,R)?M.success.push(G):M.failed.push(G)}catch(ne){console.error(`[OutputManager] Handler ${G} failed:`,ne),M.failed.push(G)}});return await Promise.all(O),M}async outputToType(p,x,F){let R=Array.from(this.handlers.entries()).filter(([M,O])=>O.type===p).map(([M])=>M);return this.outputTo(R,x,F)}},hc=new Xh}),Ji={};c(Ji,{ActiveProbeService:()=>Fw,ConfigService:()=>_u,ProviderHealthStore:()=>Z,ProviderService:()=>Cn,SSEParserTransform:()=>Qw,SSESerializerTransform:()=>k6,TokenizerService:()=>qm,TransformerService:()=>Um,calculateTokenCount:()=>bw,default:()=>L6,getActiveProbeService:()=>kw,getAllQuotaResults:()=>ZO,getAllRateLimitInfo:()=>Nm,getHealthStore:()=>Q,getQuotaAdapter:()=>Sw,getQuotaResult:()=>yw,getRateLimitInfo:()=>Qm,getRuntimeDebugLog:()=>bd,initProviderHealthPersistence:()=>k,initQuotaStorePersistence:()=>Dw,initRateLimitPersistence:()=>ku,pluginManager:()=>S6,resetActiveProbeService:()=>x6,rewriteStream:()=>T6,router:()=>zm,searchProjectBySession:()=>_w,sessionUsageCache:()=>Aw,setRuntimeDebugLog:()=>r0,startActiveProbe:()=>Tw,stopActiveProbe:()=>Rw,storeQuotaResult:()=>Ew,tokenSpeedPlugin:()=>Q6}),t.exports=h(Ji);var fc=f(Ax(),1),XA=f(px(),1),Ac=require("fs"),ga=require("path"),za=gx(),Is=f(D(),1),_u=class{config={};options;constructor(p={jsonPath:"./config.json"}){this.options={envPath:p.envPath||".env",jsonPath:p.jsonPath,useEnvFile:!1,useJsonFile:p.useJsonFile!==!1,useEnvironmentVariables:p.useEnvironmentVariables!==!1,...p},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 p=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,ga.join)(process.cwd(),this.options.jsonPath);if((0,Ac.existsSync)(p))try{let x=(0,Ac.readFileSync)(p,"utf-8"),F=Is.default.parse(x);this.config={...this.config,...F},console.log(`Loaded JSON config from: ${p}`)}catch(x){console.warn(`Failed to load JSON config from ${p}:`,x)}else console.warn(`JSON config file not found: ${p}`)}loadEnvConfig(){let p=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,ga.join)(process.cwd(),this.options.envPath);if((0,Ac.existsSync)(p))try{let x=(0,za.config)({path:p});x.parsed&&(this.config={...this.config,...this.parseEnvConfig(x.parsed)})}catch(x){console.warn(`Failed to load .env config from ${p}:`,x)}}loadEnvironmentVariables(){let p=this.parseEnvConfig(process.env);this.config={...this.config,...p}}parseEnvConfig(p){let x={};return Object.assign(x,p),x}isAbsolutePath(p){return p.startsWith("/")||p.includes(":")}get(p,x){let F=this.config[p];return F!==void 0?F:x}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(p){return this.config[p]!==void 0}set(p,x){this.config[p]=x}reload(){this.config={},this.loadConfig()}getConfigSummary(){let p=[];return this.options.initialConfig&&p.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&p.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&p.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&p.push("Environment Variables"),`Config sources: ${p.join(", ")}`}};function Ui(p,x=500,F="internal_error",R="api_error"){let M=new Error(p);return M.statusCode=x,M.code=F,M.type=R,M}async function Su(p,x,F){x.log.error(p);let R=p.statusCode||500;if(p.rawBody)try{let O=JSON.parse(p.rawBody);return F.code(R).send(O)}catch{return F.code(R).send(p.rawBody)}let M={error:{message:p.message+(p.stack||"Internal Server Error"),type:p.type||"api_error",code:p.code||"internal_error"}};return F.code(R).send(M)}var e0=Po();function t0(p,x,F,R,M){let O=new Headers({"Content-Type":"application/json"});F.headers&&Object.entries(F.headers).forEach(([z,te])=>{te&&O.set(z,te)});let G,J=AbortSignal.timeout(F.TIMEOUT??60*1e3*60);if(F.signal){let z=new AbortController,te=()=>z.abort();F.signal.addEventListener("abort",te),J.addEventListener("abort",te),G=z.signal}else G=J;let ne={method:"POST",headers:O,body:JSON.stringify(x),signal:G};return F.httpsProxy&&(ne.dispatcher=new e0.ProxyAgent(new URL(F.httpsProxy).toString())),M?.debug({reqId:R.req.id,request:ne,headers:Object.fromEntries(O.entries()),requestUrl:typeof p=="string"?p:p.toString(),useProxy:F.httpsProxy},"final request"),fetch(typeof p=="string"?p:p.toString(),ne)}var Cd=new Set(["authorization","x-api-key","x-goog-api-key","cookie","set-cookie"]),Fu={maxBodyLength:4096,maxStreamChunks:100},Dd=!1;function r0(p){Dd=p}function bd(){return Dd}function wd(p){return Dd||p.get("DEBUG_LOG")===!0}function n0(p){let x=p.get("DEBUG_LOG_OPTIONS");return!x||typeof x!="object"?Fu:{maxBodyLength:x.maxBodyLength??Fu.maxBodyLength,maxStreamChunks:x.maxStreamChunks??Fu.maxStreamChunks}}function i0(p){let x={};for(let[F,R]of Object.entries(p))Cd.has(F.toLowerCase())?x[F]="***MASKED***":x[F]=R;return x}function ef(p,x){return p.length<=x?p:p.slice(0,x)+`...[truncated, total ${p.length} bytes]`}function Sm(p,x,F){let R=typeof F.body=="string"?F.body:JSON.stringify(F.body);p.info({debug_log:!0,reqId:x,phase:"provider_request",url:F.url,headers:i0(F.headers),body:ef(R,Fu.maxBodyLength)})}function Fm(p,x,F){p.info({debug_log:!0,reqId:x,phase:"provider_response",status:F.status,headers:i0(F.headers),...F.body!==void 0?{body:ef(F.body,Fu.maxBodyLength)}:{}})}function o0(p,x,F,R){p.info({debug_log:!0,reqId:x,phase:"provider_stream_chunk",chunkIndex:F,data:ef(R,Fu.maxBodyLength)})}function pc(p,x,F){p.info({debug_log:!0,reqId:x,phase:"provider_stream_end",totalChunks:F})}function km(p,x,F,R){(async()=>{let M=p.pipeThrough(new TextDecoderStream).getReader(),O=0;try{let G="";for(;;){let{done:J,value:ne}=await M.read();if(J)break;G+=ne;let z=G.split(`
|
|
633
633
|
|
|
634
|
-
`);G=z.pop()||"";for(let te of z)te.trim()&&(O<R.maxStreamChunks?o0(x,F,O,te):O===R.maxStreamChunks&&x.info({debug_log:!0,reqId:F,phase:"provider_stream_chunk_omitted",message:`[chunks after #${O} omitted, maxStreamChunks=${R.maxStreamChunks}]`}),O++)}G.trim()&&(O<R.maxStreamChunks&&o0(x,F,O,G.trim()),O++),pc(x,F,O)}catch(G){console.error(`[debug_log] Error reading debug stream for reqId=${F}:`,G),pc(x,F,O)}finally{M.releaseLock()}})()}var s0="2.1.
|
|
634
|
+
`);G=z.pop()||"";for(let te of z)te.trim()&&(O<R.maxStreamChunks?o0(x,F,O,te):O===R.maxStreamChunks&&x.info({debug_log:!0,reqId:F,phase:"provider_stream_chunk_omitted",message:`[chunks after #${O} omitted, maxStreamChunks=${R.maxStreamChunks}]`}),O++)}G.trim()&&(O<R.maxStreamChunks&&o0(x,F,O,G.trim()),O++),pc(x,F,O)}catch(G){console.error(`[debug_log] Error reading debug stream for reqId=${F}:`,G),pc(x,F,O)}finally{M.releaseLock()}})()}var s0="2.1.31";de();var pl=require("fs"),Id=require("path"),tf=Ra(),gl=(0,Id.join)(tf.HOME_DIR,"runtime"),Hs=(0,Id.join)(gl,"rate-limit.json"),ma=new Map,a0=!1,Tm=null,vd=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],u0=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],Rm=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function Bd(p,x,F){let R=J=>{if(F instanceof Headers)return F.get(J);let ne=Object.keys(F).find(z=>z.toLowerCase()===J);return ne?F[ne]:null},M=rf(R,vd),O=rf(R,u0),G=rf(R,Rm);(M||O||G)&&ma.set(p,{provider:p,remaining:l0(M),limit:l0(O),reset:Om(G),capturedAt:Date.now()})}function Qm(p){return ma.get(p)}function Nm(){return Array.from(ma.values())}function rf(p,x){for(let F of x){let R=p(F);if(R)return R}return null}function l0(p){if(!p)return null;let x=Number(p.trim().replace(/,/g,""));return Number.isFinite(x)?x:null}function Om(p){if(!p)return null;let x=p.trim();if(!x)return null;let F=Number(x);if(Number.isFinite(F))return F>1e12?Math.floor(F/1e3):F>1e9?Math.floor(F):Math.floor(Date.now()/1e3+F);let R=Date.parse(x);if(Number.isFinite(R))return Math.floor(R/1e3);let M=Lm(x);return M===null?null:Math.floor((Date.now()+M)/1e3)}function Lm(p){let x=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,F=0,R=!1;for(let M of p.matchAll(x)){R=!0;let O=Number(M[1]),G=M[2].toLowerCase();if(Number.isFinite(O))switch(G){case"ms":F+=O;break;case"s":F+=O*1e3;break;case"m":F+=O*60*1e3;break;case"h":F+=O*60*60*1e3;break;case"d":F+=O*24*60*60*1e3;break}}return R?F:null}function xd(){try{if(!(0,pl.existsSync)(Hs))return;let p=JSON.parse((0,pl.readFileSync)(Hs,"utf-8"));if(!Array.isArray(p))return;let x=Date.now();for(let F of p)if(F&&F.provider){if(F.capturedAt&&x-F.capturedAt>3600*1e3)continue;ma.set(F.provider,F)}}catch{}}function _d(){try{if(ma.size===0)return;(0,pl.existsSync)(gl)||(0,pl.mkdirSync)(gl,{recursive:!0}),(0,pl.writeFileSync)(Hs,JSON.stringify(Array.from(ma.values()),null,2),"utf-8")}catch{}}function ku(){a0||(a0=!0,xd(),Tm=setInterval(_d,6e4),process.on("exit",_d))}I();var nf=class{name="openai-responses";endPoint="/v1/responses";async transformRequestIn(p){delete p.temperature,delete p.max_tokens,p.reasoning&&(p.reasoning={effort:p.reasoning.effort,summary:"detailed"});let x=[],F=p.messages.filter(R=>R.role==="system");if(F.length>0){let R=F[0];Array.isArray(R.content)?R.content.forEach(M=>{let O="";typeof M=="string"?O=M:M&&typeof M=="object"&&"text"in M&&(O=M.text),x.push({role:"system",content:O})}):p.instructions=R.content}if(p.messages.forEach(R=>{if(R.role!=="system"){if(Array.isArray(R.content)){let M=R.content.map(O=>this.normalizeRequestContent(O,R.role)).filter(O=>O!==null);M.length>0?R.content=M:delete R.content}if(R.role==="tool"){let M={...R};M.type="function_call_output",M.call_id=R.tool_call_id,M.output=R.content,delete M.cache_control,delete M.role,delete M.tool_call_id,delete M.content,x.push(M);return}if(R.role==="assistant"&&Array.isArray(R.tool_calls)){R.tool_calls.forEach(M=>{x.push({type:"function_call",arguments:M.function.arguments,name:M.function.name,call_id:M.id})});return}x.push(R)}}),p.input=x,delete p.messages,Array.isArray(p.tools)){let R=p.tools.find(M=>M.function.name==="web_search");p.tools=p.tools.filter(M=>M.function.name!=="web_search").map(M=>(M.function.name==="WebSearch"&&delete M.function.parameters.properties.allowed_domains,M.function.name==="Edit"?{type:M.type,name:M.function.name,description:M.function.description,parameters:{...M.function.parameters,required:["file_path","old_string","new_string","replace_all"]},strict:!0}:{type:M.type,name:M.function.name,description:M.function.description,parameters:M.function.parameters})),R&&p.tools.push({type:"web_search"})}return p.parallel_tool_calls=!1,p}async transformResponseOut(p){let x=p.headers.get("Content-Type")||"";if(x.includes("application/json")){let F=await p.json();if(F.object==="response"&&F.output){let R=this.convertResponseToChat(F);return new Response(JSON.stringify(R),{status:p.status,statusText:p.statusText,headers:p.headers})}return new Response(JSON.stringify(F),{status:p.status,statusText:p.statusText,headers:p.headers})}else if(x.includes("text/event-stream")){if(!p.body)return p;let F=new TextDecoder,R=new TextEncoder,M="",O=!1,G=this,J=new ReadableStream({async start(ne){let z=p.body.getReader(),te=-1,ie="",ce=X=>(X!==ie&&(te++,ie=X),te);try{for(;;){let{done:X,value:le}=await z.read();if(X){O||ne.enqueue(R.encode(`data: [DONE]
|
|
635
635
|
|
|
636
636
|
`));break}let pe=F.decode(le,{stream:!0});M+=pe;let De=M.split(/\r?\n/);M=De.pop()||"";for(let be of De)if(be.trim())try{if(be.startsWith("event: "))continue;if(be.startsWith("data: ")){let Be=be.slice(5).trim();if(Be==="[DONE]"){O=!0,ne.enqueue(R.encode(`data: [DONE]
|
|
637
637
|
|
|
@@ -1028,7 +1028,7 @@ ${this.toMarkdown(n,t+1)}`:`${r}- ${n}`).join(`
|
|
|
1028
1028
|
${this.toMarkdown(i,t+1)}`:`${r}${n}: ${i}`).join(`
|
|
1029
1029
|
`):`${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}}}}),$S,jS=Ci(()=>{"use strict";$S=class{type="webhook";config;defaultTimeout=3e4;constructor(e){if(!e.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...e}}buildHeaders(){let e={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(e.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let t=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");e.Authorization=`Basic ${t}`}break;case"custom":this.config.auth.custom&&(e[this.config.auth.custom.header]=this.config.auth.custom.value);break}return e}buildBody(e,t){let{format:r="json",timestamp:n=!0,prefix:i,metadata:o}=t||{},s={data:e};return n&&(s.timestamp=new Date().toISOString()),i&&(s.prefix=i),o&&Object.keys(o).length>0&&(s.metadata=o),s}async sendRequest(e,t,r,n,i){let o=new AbortController,s=setTimeout(()=>o.abort(),i);try{let a=await fetch(e,{method:t,headers:r,body:JSON.stringify(n),signal:o.signal});if(clearTimeout(s),!a.ok)throw new Error(`HTTP ${a.status}: ${a.statusText}`);return a}catch(a){throw clearTimeout(s),a}}delay(e){return new Promise(t=>setTimeout(t,e))}async sendWithRetry(e,t,r,n,i,o){let s=null;for(let a=1;a<=o.maxAttempts;a++)try{return await this.sendRequest(e,t,r,n,i)}catch(u){if(s=u,a===o.maxAttempts)break;let l=o.backoffMs*Math.pow(2,a-1);console.warn(`[WebhookOutputHandler] Request failed (attempt ${a}/${o.maxAttempts}), retrying in ${l}ms...`,u.message),await this.delay(l)}throw s}async output(e,t={}){let r=t.timeout||this.defaultTimeout;try{let n=this.buildHeaders(),i=this.buildBody(e,t),o=await this.sendWithRetry(this.config.url,this.config.method,n,i,r,this.config.retry);return!0}catch(n){let i=n instanceof Error?n.message:String(n);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${i}`),!1;throw new Error(`Webhook output failed: ${i}`)}}}}),HS,qS=Ci(()=>{"use strict";HS=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,W9.tmpdir)();this.baseDir=(0,VI.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,ty.existsSync)(this.baseDir)||(0,ty.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(e){try{let t=e.match(/_session_([a-f0-9-]+)/i);return t?t[1]:null}catch{return null}}getFilePath(e){let t=this.config.prefix||"session",r=this.config.extension?`.${this.config.extension}`:"",n;if(this.config.includeTimestamp){let i=Date.now();n=`${t}-${e}-${i}${r}`}else n=`${t}-${e}${r}`;return(0,VI.join)(this.baseDir,n)}async output(e,t={}){try{let r=t.metadata?.sessionId;if(!r)return!1;let n={...e,timestamp:Date.now(),sessionId:r},i=this.getFilePath(r);return(0,ty.writeFileSync)(i,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),Ev,Yf,Bj=Ci(()=>{"use strict";US(),jS(),qS(),Ev=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 MS(e.config);case"webhook":return new $S(e.config);case"temp-file":return new HS(e.config);default:throw new Error(`Unknown output handler type: ${e.type}`)}}unregisterHandler(e){return this.handlers.delete(e)}getHandler(e){return this.handlers.get(e)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(e){this.defaultOptions={...this.defaultOptions,...e}}getDefaultOptions(){return{...this.defaultOptions}}async output(e,t){let r={...this.defaultOptions,...t},n={success:[],failed:[]},i=Array.from(this.handlers.entries()).map(async([o,s])=>{try{await s.output(e,r)?n.success.push(o):n.failed.push(o)}catch(a){console.error(`[OutputManager] Handler ${o} failed:`,a),n.failed.push(o)}});return await Promise.all(i),n}async outputTo(e,t,r){let n={...this.defaultOptions,...r},i={success:[],failed:[]},o=e.map(async s=>{let a=this.handlers.get(s);if(!a){console.warn(`[OutputManager] Handler ${s} not found`),i.failed.push(s);return}try{await a.output(t,n)?i.success.push(s):i.failed.push(s)}catch(u){console.error(`[OutputManager] Handler ${s} failed:`,u),i.failed.push(s)}});return await Promise.all(o),i}async outputToType(e,t,r){let n=Array.from(this.handlers.entries()).filter(([i,o])=>o.type===e).map(([i])=>i);return this.outputTo(n,t,r)}},Yf=new Ev}),xj=Ul(v_(),1),yv=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,JI.join)(process.cwd(),this.options.jsonPath);if((0,ry.existsSync)(e))try{let t=(0,ry.readFileSync)(e,"utf-8"),r=xj.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,JI.join)(process.cwd(),this.options.envPath);if((0,ry.existsSync)(e))try{let t=(0,X9.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 yo(e,t=500,r="internal_error",n="api_error"){let i=new Error(e);return i.statusCode=t,i.code=r,i.type=n,i}async function _j(e,t,r){t.log.error(e);let n=e.statusCode||500;if(e.rawBody)try{let o=JSON.parse(e.rawBody);return r.code(n).send(o)}catch{return r.code(n).send(e.rawBody)}let i={error:{message:e.message+(e.stack||"Internal Server Error"),type:e.type||"api_error",code:e.code||"internal_error"}};return r.code(n).send(i)}function Sj(e,t,r,n,i){let o=new Headers({"Content-Type":"application/json"});r.headers&&Object.entries(r.headers).forEach(([l,c])=>{c&&o.set(l,c)});let s,a=AbortSignal.timeout(r.TIMEOUT??60*1e3*60);if(r.signal){let l=new AbortController,c=()=>l.abort();r.signal.addEventListener("abort",c),a.addEventListener("abort",c),s=l.signal}else s=a;let u={method:"POST",headers:o,body:JSON.stringify(t),signal:s};return r.httpsProxy&&(u.dispatcher=new e$.ProxyAgent(new URL(r.httpsProxy).toString())),i?.debug({reqId:n.req.id,request:u,headers:Object.fromEntries(o.entries()),requestUrl:typeof e=="string"?e:e.toString(),useProxy:r.httpsProxy},"final request"),fetch(typeof e=="string"?e:e.toString(),u)}var Fj=new Set(["authorization","x-api-key","x-goog-api-key","cookie","set-cookie"]),oh={maxBodyLength:4096,maxStreamChunks:100},WC=!1;function kj(e){WC=e}function Cv(){return WC}function Vy(e){return WC||e.get("DEBUG_LOG")===!0}function Tj(e){let t=e.get("DEBUG_LOG_OPTIONS");return!t||typeof t!="object"?oh:{maxBodyLength:t.maxBodyLength??oh.maxBodyLength,maxStreamChunks:t.maxStreamChunks??oh.maxStreamChunks}}function GS(e){let t={};for(let[r,n]of Object.entries(e))Fj.has(r.toLowerCase())?t[r]="***MASKED***":t[r]=n;return t}function KC(e,t){return e.length<=t?e:e.slice(0,t)+`...[truncated, total ${e.length} bytes]`}function Rj(e,t,r){let n=typeof r.body=="string"?r.body:JSON.stringify(r.body);e.info({debug_log:!0,reqId:t,phase:"provider_request",url:r.url,headers:GS(r.headers),body:KC(n,oh.maxBodyLength)})}function Qj(e,t,r){e.info({debug_log:!0,reqId:t,phase:"provider_response",status:r.status,headers:GS(r.headers),...r.body!==void 0?{body:KC(r.body,oh.maxBodyLength)}:{}})}function Dv(e,t,r,n){e.info({debug_log:!0,reqId:t,phase:"provider_stream_chunk",chunkIndex:r,data:KC(n,oh.maxBodyLength)})}function bv(e,t,r){e.info({debug_log:!0,reqId:t,phase:"provider_stream_end",totalChunks:r})}function Nj(e,t,r,n){(async()=>{let i=e.pipeThrough(new TextDecoderStream).getReader(),o=0;try{let s="";for(;;){let{done:a,value:u}=await i.read();if(a)break;s+=u;let l=s.split(`
|
|
1030
1030
|
|
|
1031
|
-
`);s=l.pop()||"";for(let c of l)c.trim()&&(o<n.maxStreamChunks?Dv(t,r,o,c):o===n.maxStreamChunks&&t.info({debug_log:!0,reqId:r,phase:"provider_stream_chunk_omitted",message:`[chunks after #${o} omitted, maxStreamChunks=${n.maxStreamChunks}]`}),o++)}s.trim()&&(o<n.maxStreamChunks&&Dv(t,r,o,s.trim()),o++),bv(t,r,o)}catch(s){console.error(`[debug_log] Error reading debug stream for reqId=${r}:`,s),bv(t,r,o)}finally{i.releaseLock()}})()}var Oj="2.1.
|
|
1031
|
+
`);s=l.pop()||"";for(let c of l)c.trim()&&(o<n.maxStreamChunks?Dv(t,r,o,c):o===n.maxStreamChunks&&t.info({debug_log:!0,reqId:r,phase:"provider_stream_chunk_omitted",message:`[chunks after #${o} omitted, maxStreamChunks=${n.maxStreamChunks}]`}),o++)}s.trim()&&(o<n.maxStreamChunks&&Dv(t,r,o,s.trim()),o++),bv(t,r,o)}catch(s){console.error(`[debug_log] Error reading debug stream for reqId=${r}:`,s),bv(t,r,o)}finally{i.releaseLock()}})()}var Oj="2.1.31";$c();var Jy=(0,D_.join)(t$.HOME_DIR,"runtime"),Yy=(0,D_.join)(Jy,"rate-limit.json"),eA=new Map,wv=!1,Lj=null,Pj=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],Mj=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],Uj=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function ZC(e,t,r){let n=a=>{if(r instanceof Headers)return r.get(a);let u=Object.keys(r).find(l=>l.toLowerCase()===a);return u?r[u]:null},i=dy(n,Pj),o=dy(n,Mj),s=dy(n,Uj);(i||o||s)&&eA.set(e,{provider:e,remaining:Iv(i),limit:Iv(o),reset:jj(s),capturedAt:Date.now()})}function $j(){return Array.from(eA.values())}function dy(e,t){for(let r of t){let n=e(r);if(n)return n}return null}function Iv(e){if(!e)return null;let t=Number(e.trim().replace(/,/g,""));return Number.isFinite(t)?t:null}function jj(e){if(!e)return null;let t=e.trim();if(!t)return null;let r=Number(t);if(Number.isFinite(r))return r>1e12?Math.floor(r/1e3):r>1e9?Math.floor(r):Math.floor(Date.now()/1e3+r);let n=Date.parse(t);if(Number.isFinite(n))return Math.floor(n/1e3);let i=Hj(t);return i===null?null:Math.floor((Date.now()+i)/1e3)}function Hj(e){let t=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,r=0,n=!1;for(let i of e.matchAll(t)){n=!0;let o=Number(i[1]),s=i[2].toLowerCase();if(Number.isFinite(o))switch(s){case"ms":r+=o;break;case"s":r+=o*1e3;break;case"m":r+=o*60*1e3;break;case"h":r+=o*60*60*1e3;break;case"d":r+=o*24*60*60*1e3;break}}return n?r:null}function qj(){try{if(!(0,Vf.existsSync)(Yy))return;let e=JSON.parse((0,Vf.readFileSync)(Yy,"utf-8"));if(!Array.isArray(e))return;let t=Date.now();for(let r of e)if(r&&r.provider){if(r.capturedAt&&t-r.capturedAt>3600*1e3)continue;eA.set(r.provider,r)}}catch{}}function vv(){try{if(eA.size===0)return;(0,Vf.existsSync)(Jy)||(0,Vf.mkdirSync)(Jy,{recursive:!0}),(0,Vf.writeFileSync)(Yy,JSON.stringify(Array.from(eA.values()),null,2),"utf-8")}catch{}}function Gj(){wv||(wv=!0,qj(),Lj=setInterval(vv,6e4),process.on("exit",vv))}UC();var VS=class{name="openai-responses";endPoint="/v1/responses";async transformRequestIn(e){delete e.temperature,delete e.max_tokens,e.reasoning&&(e.reasoning={effort:e.reasoning.effort,summary:"detailed"});let t=[],r=e.messages.filter(n=>n.role==="system");if(r.length>0){let n=r[0];Array.isArray(n.content)?n.content.forEach(i=>{let o="";typeof i=="string"?o=i:i&&typeof i=="object"&&"text"in i&&(o=i.text),t.push({role:"system",content:o})}):e.instructions=n.content}if(e.messages.forEach(n=>{if(n.role!=="system"){if(Array.isArray(n.content)){let i=n.content.map(o=>this.normalizeRequestContent(o,n.role)).filter(o=>o!==null);i.length>0?n.content=i:delete n.content}if(n.role==="tool"){let i={...n};i.type="function_call_output",i.call_id=n.tool_call_id,i.output=n.content,delete i.cache_control,delete i.role,delete i.tool_call_id,delete i.content,t.push(i);return}if(n.role==="assistant"&&Array.isArray(n.tool_calls)){n.tool_calls.forEach(i=>{t.push({type:"function_call",arguments:i.function.arguments,name:i.function.name,call_id:i.id})});return}t.push(n)}}),e.input=t,delete e.messages,Array.isArray(e.tools)){let n=e.tools.find(i=>i.function.name==="web_search");e.tools=e.tools.filter(i=>i.function.name!=="web_search").map(i=>(i.function.name==="WebSearch"&&delete i.function.parameters.properties.allowed_domains,i.function.name==="Edit"?{type:i.type,name:i.function.name,description:i.function.description,parameters:{...i.function.parameters,required:["file_path","old_string","new_string","replace_all"]},strict:!0}:{type:i.type,name:i.function.name,description:i.function.description,parameters:i.function.parameters})),n&&e.tools.push({type:"web_search"})}return e.parallel_tool_calls=!1,e}async transformResponseOut(e){let t=e.headers.get("Content-Type")||"";if(t.includes("application/json")){let r=await e.json();if(r.object==="response"&&r.output){let n=this.convertResponseToChat(r);return new Response(JSON.stringify(n),{status:e.status,statusText:e.statusText,headers:e.headers})}return new Response(JSON.stringify(r),{status:e.status,statusText:e.statusText,headers:e.headers})}else if(t.includes("text/event-stream")){if(!e.body)return e;let r=new TextDecoder,n=new TextEncoder,i="",o=!1,s=this,a=new ReadableStream({async start(u){let l=e.body.getReader(),c=-1,d="",f=h=>(h!==d&&(c++,d=h),c);try{for(;;){let{done:h,value:A}=await l.read();if(h){o||u.enqueue(n.encode(`data: [DONE]
|
|
1032
1032
|
|
|
1033
1033
|
`));break}let g=r.decode(A,{stream:!0});i+=g;let m=i.split(/\r?\n/);i=m.pop()||"";for(let E of m)if(E.trim())try{if(E.startsWith("event: "))continue;if(E.startsWith("data: ")){let D=E.slice(5).trim();if(D==="[DONE]"){o=!0,u.enqueue(n.encode(`data: [DONE]
|
|
1034
1034
|
|
|
@@ -1380,7 +1380,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
|
|
|
1380
1380
|
|
|
1381
1381
|
Do not attempt to describe or analyze the image directly yourself.
|
|
1382
1382
|
Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
|
|
1383
|
-
Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(i=>i.role==="user"&&Array.isArray(i.content)&&i.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(s=>s.type==="image"))),n=1;r.forEach(i=>{Array.isArray(i.content)&&i.content.forEach(o=>{o.type==="image"?(Ip.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(s=>s.type==="image")&&(Ip.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++)})})}},UV=new MV,$V=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}},EF=new $V;EF.registerAgent(UV);var Dy=EF,jV=require("node:events"),hB=require("node:perf_hooks"),HV=o_(),qV=HV.getHealthStore,fB=new jV.EventEmitter;function by(e){if(e.usageSessionId)return e.usageSessionId;try{let n=e.body?.metadata?.user_id;if(n&&typeof n=="string")try{let i=JSON.parse(n);if(i.session_id)return e.usageSessionId=i.session_id,e.usageSessionId}catch{let i=n.match(/_session_([a-f0-9-]+)/i);if(i)return e.usageSessionId=i[1],e.usageSessionId}}catch{}let t=e.headers?.["x-request-id"],r=Array.isArray(t)?t[0]:t;return e.usageSessionId=e.sessionId||(typeof r=="string"?r:void 0)||e.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.usageSessionId}function wy(e){return e.body?.model?Array.isArray(e.body.model)?e.body.model.join(","):e.body.model:Array.isArray(e.model)?e.model.join(","):e.model||""}function vp(e){let t=e.pathname||"",r=e.headers||{},n=r["x-anthropic-billing-header"];if(typeof n=="string"&&n.includes("cc_version="))return"claude-code";let i=r["user-agent"]||"";if(typeof i=="string"){if(i.includes("claude-cli")||i.includes("Claude-CLI"))return"claude-code";if(i.includes("codex")||i.includes("Codex"))return"codex"}if(t.endsWith("/v1/responses"))return"codex";let o=e.originalModel||e.body?.model||"";return/^ccr-(opus|sonnet|haiku)(\[1m\])?$/i.test(o)?"claude-code":o.toLowerCase()==="ccr-codex"?"codex":t.endsWith("/v1/messages")?"api":"unknown"}function AB(e,t){return e===429||!!(t&&/rate[\s_]limit|too many|限流|频率限制|qps_limit|token_limit|quota exhausted|usage limit|limit reached/i.test(t))}function GV(e){let t=e.Clients?.codex?.autoSwitchUsageThreshold;return typeof t=="number"&&Number.isFinite(t)?Math.min(100,Math.max(1,t)):95}function VV(e){try{let t=(0,NC.join)(Xu.HOME_DIR,"codex-accounts",`${e}.auth.json`);if(!(0,Ry.existsSync)(t))return{};let r=JSON.parse((0,Ry.readFileSync)(t,"utf8"));return{accessToken:r?.tokens?.access_token,chatGptAccountId:r?.tokens?.account_id||e}}catch{return{}}}function JV(e){let t=e?.rate_limit;if(!t)return null;let r=t.primary_window,n=t.secondary_window;return{used5h:typeof r?.used_percent=="number"?r.used_percent:void 0,used7d:typeof n?.used_percent=="number"?n.used_percent:void 0,resetAfter5h:typeof r?.reset_after_seconds=="number"?r.reset_after_seconds:void 0,resetAfter7d:typeof n?.reset_after_seconds=="number"?n.reset_after_seconds:void 0}}async function YV(e){let{accessToken:t,chatGptAccountId:r}=VV(e);if(!t)return null;let n={Authorization:`Bearer ${t}`,"ChatGPT-Account-Id":r||e,originator:"codex_cli_rs",Accept:"application/json","Accept-Encoding":"gzip, deflate","User-Agent":"codex_cli_rs/0.0.0"},i=["https://chatgpt.com/backend-api/wham/usage","https://chatgpt.com/backend-api/codex/usage"];for(let o of i)try{let s=await fetch(o,{headers:n,signal:AbortSignal.timeout(15e3)});if(!s.ok)continue;let a=JV(await s.json());if(a)return a}catch{}return null}function zV(e,t){let r=typeof e.used7d=="number"&&e.used7d>=t,n=typeof e.used5h=="number"&&e.used5h>=t;return r?{window:"7d",used:e.used7d,retryAfterSeconds:e.resetAfter7d}:n?{window:"5h",used:e.used5h,retryAfterSeconds:e.resetAfter5h}:null}async function WV(){try{let e=await ns(),t=(0,Xu.getActiveCodexAccount)(e);return{id:t?.id,email:t?.email}}catch{return{}}}async function KV(){try{let e=await ns();if((e.Clients?.codex||{}).autoSwitchAccounts===!1)return;let t=GV(e),r=Math.max(1,(0,Xu.listCodexAccounts)(e).accounts.length);for(let n=0;n<r;n+=1){let i=(0,Xu.getActiveCodexAccount)(e);if(!i?.id)return;let o=await YV(i.id);if(!o)return;let s=zV(o,t);if(!s)return;let a=`Codex ${s.window} usage reached ${Math.round(s.used)}% (auto-switch threshold ${t}%)`,u=(0,Xu.markActiveCodexAccountLimitedAndSwitch)(e,a,s.retryAfterSeconds);if(await ka(u.config),!u.switchedAccount){console.warn(`[Codex] ${a}; no available Codex account could be switched to`);return}console.warn(`[Codex] ${a}; switched account to ${u.switchedAccount.email||u.switchedAccount.id}`),e=u.config}}catch(e){console.error("Failed to auto-switch Codex account before usage limit:",e)}}async function pB(e){try{let t=await ns();if((t.Clients?.codex||{}).autoSwitchAccounts===!1)return;let r=(0,Xu.markActiveCodexAccountLimitedAndSwitch)(t,e);await ka(r.config),r.switchedAccount?console.warn(`[Codex] Rate limit detected; switched account to ${r.switchedAccount.email||r.switchedAccount.id}`):console.warn("[Codex] Rate limit detected, but no available Codex account could be switched to")}catch(t){console.error("Failed to auto-switch Codex account after rate limit:",t)}}function ZV(e){if(!e)return;let t=e;if(Buffer.isBuffer(e)&&(t=e.toString("utf8")),typeof t=="string")try{t=JSON.parse(t)}catch{return}if(typeof t=="object"){if(t.usage)return t.usage;if(t.response?.usage){let r=t.response.usage;return{input_tokens:r.input_tokens||0,output_tokens:r.output_tokens||0,cache_read_input_tokens:r.cache_read_input_tokens||0,cache_creation_input_tokens:r.cache_creation_input_tokens||0}}}}async function XV(){let e=(0,y_.homedir)(),t=(0,NC.join)(e,".claude.json");if(!(0,Ry.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,$9.writeFile)(t,JSON.stringify(r,null,2))}}async function eJ(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:i,enabled:o=!1,options:s={}}=n;switch(i){case"token-speed":Zy.registerPlugin(fF,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:console.warn(`Unknown plugin: ${i}`);break}}await Zy.enablePlugins(e)}async function yF(e={}){await XV(),await OC();let t=await C_(),r=t.Providers||t.providers||[],n=r&&r.length>0,i=t.HOST||"127.0.0.1";n?(i=t.HOST,t.APIKEY||(i="127.0.0.1")):(i="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,s=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=f=>(f>9?"":"0")+f,u=(f,h)=>{let A;f?typeof f=="number"?A=new Date(f):A=f:A=new Date;let g=A.getFullYear()+""+a(A.getMonth()+1),m=a(A.getDate()),E=a(A.getHours()),D=a(A.getMinutes());return`./logs/ccr-${g}${m}${E}${D}${a(A.getSeconds())}${h?`_${h}`:""}.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:kV(u,{path:Xu.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,Xu.listPresets)(),d=await gV({jsonPath:Xu.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:i,PORT:s,LOG_FILE:(0,NC.join)((0,y_.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return d.recordUsage=f=>{try{let h=f.req?vp(f.req):"unknown";h==="codex"&&AB(0,f.errorMessage)&&pB(f.errorMessage),tB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:f.sessionId||"",provider:f.provider||"",originalModel:f.originalModel||"",model:f.model||"",modelFamily:f.modelFamily||"",scenarioType:f.scenarioType||"default",clientType:h,codexAccountId:f.req?.codexAccountId,codexAccountEmail:f.req?.codexAccountEmail,stream:f.stream??!1,inputTokens:f.inputTokens||0,outputTokens:0,cacheReadInputTokens:f.cacheReadInputTokens||0,cacheCreationInputTokens:f.cacheCreationInputTokens||0,ttft:null,tokensPerSecond:null,durationMs:0,status:"error",errorMessage:f.errorMessage,responseBody:void 0})}catch(h){console.error("Fallback usage tracking error:",h)}},await Promise.allSettled(c.map(async f=>await d.registerNamespace(`/preset/${f.name}`,f.config))),await eJ(d,t),d.addHook("onRequest",async f=>{let h=new URL(`http://127.0.0.1${f.url}`);(h.pathname.endsWith("/v1/messages")||h.pathname.endsWith("/v1/responses"))&&!f.requestStartTime&&(f.requestStartTime=hB.performance.now())}),d.addHook("preHandler",async(f,h)=>{let A=new URL(`http://127.0.0.1${f.url}`);if(A.pathname.endsWith("/v1/messages")||A.pathname.endsWith("/v1/responses")){let g=by(f);Ql.put(g,{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0})}}),d.addHook("preHandler",async(f,h)=>new Promise((A,g)=>{let m=E=>{E?g(E):A()};EV(t)(f,h,m).catch(g)})),d.addHook("preHandler",async(f,h)=>{let A=new URL(`http://127.0.0.1${f.url}`);if(f.pathname=A.pathname,f.pathname.endsWith("/v1/messages")&&f.pathname!=="/v1/messages"&&(f.preset=f.pathname.replace("/v1/messages","").replace("/","")),f.pathname.endsWith("/v1/responses")&&f.pathname!=="/v1/responses"&&(f.preset=f.pathname.replace("/v1/responses","").replace("/","")),(f.pathname.endsWith("/v1/messages")||f.pathname.endsWith("/v1/responses"))&&vp(f)==="codex"){await KV();let g=await WV();f.codexAccountId=g.id,f.codexAccountEmail=g.email}}),d.addHook("preHandler",async(f,h)=>{if(f.pathname.endsWith("/v1/messages")){let A=[];for(let g of Dy.getAllAgents())g.shouldHandle(f,t)&&(A.push(g.name),g.reqHandler(f,t),g.tools.size&&(f.body?.tools?.length||(f.body.tools=[]),f.body.tools.unshift(...Array.from(g.tools.values()).map(m=>({name:m.name,description:m.description,input_schema:m.input_schema})))));A.length&&(f.agents=A)}}),d.addHook("onError",async(f,h,A)=>{f.errorMessage=A?.message||A?.toString?.()||"Unknown error",fB.emit("onError",f,h,A)}),d.addHook("onSend",(f,h,A,g)=>{let m=f.pathname?.endsWith("/v1/messages"),E=f.pathname?.endsWith("/v1/responses");if(m||E){let D=by(f);if(A instanceof ReadableStream){if(m&&f.agents){let B=new AbortController,b=A.pipeThrough(new Cy),v,I=-1,S="",_="",k="",Q=[],P=[];return g(null,RV(b,async(T,N)=>{try{if(T.event==="content_block_start"&&T?.data?.content_block?.name){let $=f.agents.find(Y=>Dy.getAgent(Y)?.tools.get(T.data.content_block.name));if($){v=Dy.getAgent($),I=T.data.index,S=T.data.content_block.name,k=T.data.content_block.id;return}}if(I>-1&&T.data.index===I&&T.data?.delta?.type==="input_json_delta"){_+=T.data?.delta?.partial_json;return}if(I>-1&&T.data.index===I&&T.data.type==="content_block_stop"){try{let $=QV.default.parse(_);P.push({type:"tool_use",id:k,name:S,input:$});let Y=await v?.tools.get(S)?.handler($,{req:f,config:t});Q.push({tool_use_id:k,type:"tool_result",content:Y}),v=void 0,I=-1,S="",_="",k=""}catch($){console.log($)}return}if(T.event==="message_delta"&&Q.length){f.body.messages.push({role:"assistant",content:P}),f.body.messages.push({role:"user",content:Q});let $=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(f.body)});if(!$.ok)return;let Y=$.body.pipeThrough(new Cy).getReader();for(;;)try{let{value:Z,done:U}=await Y.read();if(U)break;let re=Z;if(["message_start","message_stop"].includes(re.event))continue;if(!N.desiredSize)break;N.enqueue(re)}catch(Z){if(Z.name==="AbortError"||Z.code==="ERR_STREAM_PREMATURE_CLOSE"){B.abort();break}throw Z}return}return T}catch($){if(console.error("Unexpected error in stream processing:",$),$.code==="ERR_STREAM_PREMATURE_CLOSE"){B.abort();return}throw $}}).pipeThrough(new TV))}let[C,w]=A.tee();return(async B=>{let b=B.pipeThrough(new TextDecoderStream).pipeThrough(new Cy).getReader();try{for(;;){let{done:v,value:I}=await b.read();if(v)break;let S=I.event,_=I.data;if(_?.usage){let k=Ql.get(D)||{},Q={...S==="message_start"?{}:k,..._.usage};_.usage?.prompt_tokens_details?.cached_tokens&&!_.usage.cache_read_input_tokens&&(Q.cache_read_input_tokens=_.usage.prompt_tokens_details.cached_tokens),(_.usage.cache_read_input_tokens||_.usage.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:_.usage.cache_read_input_tokens,cache_creation:_.usage.cache_creation_input_tokens}),Ql.put(D,Q)}if(_?.response?.usage){let k=_.response.usage,Q=S==="response.completed"?{}:Ql.get(D)||{},P={...Q,input_tokens:k.input_tokens||0,output_tokens:k.output_tokens||0,cache_read_input_tokens:k.cache_read_input_tokens??Q.cache_read_input_tokens??0,cache_creation_input_tokens:k.cache_creation_input_tokens??Q.cache_creation_input_tokens??0};Ql.put(D,P)}}}catch(v){v.name==="AbortError"||v.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",v)}finally{b.releaseLock()}})(w),g(null,C)}let y=ZV(A);if(y&&Ql.put(D,y),typeof A=="object")return A.error?g(A.error,null):g(A,null)}if(typeof A=="object"&&A.error)return g(A.error,null);g(null,A)}),d.addHook("onSend",async(f,h,A)=>{if(fB.emit("onSend",f,h,A),h.statusCode>=400&&(f.pathname?.endsWith("/v1/messages")||f.pathname?.endsWith("/v1/responses")))try{typeof A=="string"?f.errorResponseBody=A:A&&typeof A=="object"&&(f.errorResponseBody=JSON.stringify(A))}catch{}return A}),d.addHook("onResponse",async(f,h)=>{if(!(!f.pathname?.endsWith("/v1/messages")&&!f.pathname?.endsWith("/v1/responses")))try{let A=by(f),g=Ql.get(A),m=sV(A),E=qV(),D,y,C=f.sseError,w=C&&(C.type||C.code||C.message),B=g?.output_tokens&&g.output_tokens>0,b=h.statusCode>=400||w&&!B;if(b){D=f.errorMessage||h.errorMessage||f.error?.message||f.error?.toString?.()||void 0,w&&(D=D||JSON.stringify(C),y=JSON.stringify(C)),y=y||f.errorResponseBody;let S=wy(f);AB(h.statusCode,D)?(E.markRateLimited(f.provider||"",S,120,D),vp(f)==="codex"&&await pB(D)):E.recordFailure(f.provider||"",S,D)}else{let S=wy(f);E.recordSuccess(f.provider||"",S)}let v=g?.cache_read_input_tokens??0,I=g?.input_tokens??f.tokenCount??0;!v&&f.tokenCount&&g?.input_tokens&&g.input_tokens<f.tokenCount&&(v=f.tokenCount-g.input_tokens,v&&console.log("[Usage] Inferred cache tokens:",{tokenCount:f.tokenCount,netInput:g.input_tokens,impliedCache:v})),tB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:A,provider:f.provider||"",originalModel:f.originalModel||f.body?.model||"",model:wy(f),modelFamily:f.modelFamily||"",scenarioType:f.scenarioType||"default",clientType:vp(f),codexAccountId:f.codexAccountId,codexAccountEmail:f.codexAccountEmail,stream:f.body?.stream??!1,inputTokens:I,outputTokens:b?0:g?.output_tokens||0,cacheReadInputTokens:v,cacheCreationInputTokens:g?.cache_creation_input_tokens||0,ttft:b?null:m.ttft,tokensPerSecond:b?null:m.tokensPerSecond,durationMs:f.requestStartTime?Math.round(hB.performance.now()-f.requestStartTime):0,status:b?"error":"success",errorMessage:D,responseBody:y})}catch(A){console.error("Usage tracking error:",A)}}),process.on("uncaughtException",f=>{d.app.log.error("Uncaught exception:",f)}),process.on("unhandledRejection",(f,h)=>{d.app.log.error("Unhandled rejection at:",h,"reason:",f)}),d}async function tJ(){let e=await yF();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===nD&&tJ().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function IF(e){try{let{stdout:t}=await wF("npm view claude-code-router-next version"),r=t.trim();return{hasUpdate:rJ(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function vF(){try{let{stdout:e,stderr:t}=await wF("npm install -g claude-code-router-next@latest");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function rJ(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let i=0;i<Math.max(r.length,n.length);i++){let o=i<r.length?r[i]:0,s=i<n.length?n[i]:0;if(o>s)return 1;if(o<s)return-1}return 0}var DF,bF,wF,BF=Y0(()=>{"use strict";DF=require("child_process"),bF=require("util"),wF=(0,bF.promisify)(DF.exec)});var xg,iD=Y0(()=>{xg="2.1.30"});var sD=Tr(oD=>{"use strict";Object.defineProperty(oD,"__esModule",{value:!0});var xF=require("child_process"),iJ=1024*1024,_F={exec(e,t){let r={maxBuffer:2*iJ,windowsHide:!0};(0,xF.exec)(e,r,t)},spawn(e,t,r){return(0,xF.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
|
|
1383
|
+
Your response should consistently follow this rule whenever image-related analysis is requested.`});let r=e.body.messages.filter(i=>i.role==="user"&&Array.isArray(i.content)&&i.content.some(o=>o.type==="image"||Array.isArray(o.content)&&o.content.some(s=>s.type==="image"))),n=1;r.forEach(i=>{Array.isArray(i.content)&&i.content.forEach(o=>{o.type==="image"?(Ip.storeImage(`${e.id}_Image#${n}`,o.source),o.type="text",delete o.source,o.text=`[Image #${n}]This is an image, if you need to view or analyze it, you need to extract the imageId`,n++):o.type==="text"&&o.text.includes("[Image #")?o.text=o.text.replace(/\[Image #\d+\]/g,""):o.type==="tool_result"&&Array.isArray(o.content)&&o.content.some(s=>s.type==="image")&&(Ip.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++)})})}},UV=new MV,$V=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}},EF=new $V;EF.registerAgent(UV);var Dy=EF,jV=require("node:events"),hB=require("node:perf_hooks"),HV=o_(),qV=HV.getHealthStore,fB=new jV.EventEmitter;function by(e){if(e.usageSessionId)return e.usageSessionId;try{let n=e.body?.metadata?.user_id;if(n&&typeof n=="string")try{let i=JSON.parse(n);if(i.session_id)return e.usageSessionId=i.session_id,e.usageSessionId}catch{let i=n.match(/_session_([a-f0-9-]+)/i);if(i)return e.usageSessionId=i[1],e.usageSessionId}}catch{}let t=e.headers?.["x-request-id"],r=Array.isArray(t)?t[0]:t;return e.usageSessionId=e.sessionId||(typeof r=="string"?r:void 0)||e.id||`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.usageSessionId}function wy(e){return e.body?.model?Array.isArray(e.body.model)?e.body.model.join(","):e.body.model:Array.isArray(e.model)?e.model.join(","):e.model||""}function vp(e){let t=e.pathname||"",r=e.headers||{},n=r["x-anthropic-billing-header"];if(typeof n=="string"&&n.includes("cc_version="))return"claude-code";let i=r["user-agent"]||"";if(typeof i=="string"){if(i.includes("claude-cli")||i.includes("Claude-CLI"))return"claude-code";if(i.includes("codex")||i.includes("Codex"))return"codex"}if(t.endsWith("/v1/responses"))return"codex";let o=e.originalModel||e.body?.model||"";return/^ccr-(opus|sonnet|haiku)(\[1m\])?$/i.test(o)?"claude-code":o.toLowerCase()==="ccr-codex"?"codex":t.endsWith("/v1/messages")?"api":"unknown"}function AB(e,t){return e===429||!!(t&&/rate[\s_]limit|too many|限流|频率限制|qps_limit|token_limit|quota exhausted|usage limit|limit reached/i.test(t))}function GV(e){let t=e.Clients?.codex?.autoSwitchUsageThreshold;return typeof t=="number"&&Number.isFinite(t)?Math.min(100,Math.max(1,t)):95}function VV(e){try{let t=(0,NC.join)(Xu.HOME_DIR,"codex-accounts",`${e}.auth.json`);if(!(0,Ry.existsSync)(t))return{};let r=JSON.parse((0,Ry.readFileSync)(t,"utf8"));return{accessToken:r?.tokens?.access_token,chatGptAccountId:r?.tokens?.account_id||e}}catch{return{}}}function JV(e){let t=e?.rate_limit;if(!t)return null;let r=t.primary_window,n=t.secondary_window;return{used5h:typeof r?.used_percent=="number"?r.used_percent:void 0,used7d:typeof n?.used_percent=="number"?n.used_percent:void 0,resetAfter5h:typeof r?.reset_after_seconds=="number"?r.reset_after_seconds:void 0,resetAfter7d:typeof n?.reset_after_seconds=="number"?n.reset_after_seconds:void 0}}async function YV(e){let{accessToken:t,chatGptAccountId:r}=VV(e);if(!t)return null;let n={Authorization:`Bearer ${t}`,"ChatGPT-Account-Id":r||e,originator:"codex_cli_rs",Accept:"application/json","Accept-Encoding":"gzip, deflate","User-Agent":"codex_cli_rs/0.0.0"},i=["https://chatgpt.com/backend-api/wham/usage","https://chatgpt.com/backend-api/codex/usage"];for(let o of i)try{let s=await fetch(o,{headers:n,signal:AbortSignal.timeout(15e3)});if(!s.ok)continue;let a=JV(await s.json());if(a)return a}catch{}return null}function zV(e,t){let r=typeof e.used7d=="number"&&e.used7d>=t,n=typeof e.used5h=="number"&&e.used5h>=t;return r?{window:"7d",used:e.used7d,retryAfterSeconds:e.resetAfter7d}:n?{window:"5h",used:e.used5h,retryAfterSeconds:e.resetAfter5h}:null}async function WV(){try{let e=await ns(),t=(0,Xu.getActiveCodexAccount)(e);return{id:t?.id,email:t?.email}}catch{return{}}}async function KV(){try{let e=await ns();if((e.Clients?.codex||{}).autoSwitchAccounts===!1)return;let t=GV(e),r=Math.max(1,(0,Xu.listCodexAccounts)(e).accounts.length);for(let n=0;n<r;n+=1){let i=(0,Xu.getActiveCodexAccount)(e);if(!i?.id)return;let o=await YV(i.id);if(!o)return;let s=zV(o,t);if(!s)return;let a=`Codex ${s.window} usage reached ${Math.round(s.used)}% (auto-switch threshold ${t}%)`,u=(0,Xu.markActiveCodexAccountLimitedAndSwitch)(e,a,s.retryAfterSeconds);if(await ka(u.config),!u.switchedAccount){console.warn(`[Codex] ${a}; no available Codex account could be switched to`);return}console.warn(`[Codex] ${a}; switched account to ${u.switchedAccount.email||u.switchedAccount.id}`),e=u.config}}catch(e){console.error("Failed to auto-switch Codex account before usage limit:",e)}}async function pB(e){try{let t=await ns();if((t.Clients?.codex||{}).autoSwitchAccounts===!1)return;let r=(0,Xu.markActiveCodexAccountLimitedAndSwitch)(t,e);await ka(r.config),r.switchedAccount?console.warn(`[Codex] Rate limit detected; switched account to ${r.switchedAccount.email||r.switchedAccount.id}`):console.warn("[Codex] Rate limit detected, but no available Codex account could be switched to")}catch(t){console.error("Failed to auto-switch Codex account after rate limit:",t)}}function ZV(e){if(!e)return;let t=e;if(Buffer.isBuffer(e)&&(t=e.toString("utf8")),typeof t=="string")try{t=JSON.parse(t)}catch{return}if(typeof t=="object"){if(t.usage)return t.usage;if(t.response?.usage){let r=t.response.usage;return{input_tokens:r.input_tokens||0,output_tokens:r.output_tokens||0,cache_read_input_tokens:r.cache_read_input_tokens||0,cache_creation_input_tokens:r.cache_creation_input_tokens||0}}}}async function XV(){let e=(0,y_.homedir)(),t=(0,NC.join)(e,".claude.json");if(!(0,Ry.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,$9.writeFile)(t,JSON.stringify(r,null,2))}}async function eJ(e,t){let r=t.plugins||t.Plugins||[];for(let n of r){let{name:i,enabled:o=!1,options:s={}}=n;switch(i){case"token-speed":Zy.registerPlugin(fF,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:console.warn(`Unknown plugin: ${i}`);break}}await Zy.enablePlugins(e)}async function yF(e={}){await XV(),await OC();let t=await C_(),r=t.Providers||t.providers||[],n=r&&r.length>0,i=t.HOST||"127.0.0.1";n?(i=t.HOST,t.APIKEY||(i="127.0.0.1")):(i="0.0.0.0",console.log("\u2139\uFE0F No providers configured. Listening on 0.0.0.0 without authentication."));let o=t.PORT||3456,s=process.env.SERVICE_PORT?parseInt(process.env.SERVICE_PORT):o,a=f=>(f>9?"":"0")+f,u=(f,h)=>{let A;f?typeof f=="number"?A=new Date(f):A=f:A=new Date;let g=A.getFullYear()+""+a(A.getMonth()+1),m=a(A.getDate()),E=a(A.getHours()),D=a(A.getMinutes());return`./logs/ccr-${g}${m}${E}${D}${a(A.getSeconds())}${h?`_${h}`:""}.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:kV(u,{path:Xu.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,Xu.listPresets)(),d=await gV({jsonPath:Xu.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:i,PORT:s,LOG_FILE:(0,NC.join)((0,y_.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return d.recordUsage=f=>{try{let h=f.req?vp(f.req):"unknown";h==="codex"&&AB(0,f.errorMessage)&&pB(f.errorMessage),tB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:f.sessionId||"",provider:f.provider||"",originalModel:f.originalModel||"",model:f.model||"",modelFamily:f.modelFamily||"",scenarioType:f.scenarioType||"default",clientType:h,codexAccountId:f.req?.codexAccountId,codexAccountEmail:f.req?.codexAccountEmail,stream:f.stream??!1,inputTokens:f.inputTokens||0,outputTokens:0,cacheReadInputTokens:f.cacheReadInputTokens||0,cacheCreationInputTokens:f.cacheCreationInputTokens||0,ttft:null,tokensPerSecond:null,durationMs:0,status:"error",errorMessage:f.errorMessage,responseBody:void 0})}catch(h){console.error("Fallback usage tracking error:",h)}},await Promise.allSettled(c.map(async f=>await d.registerNamespace(`/preset/${f.name}`,f.config))),await eJ(d,t),d.addHook("onRequest",async f=>{let h=new URL(`http://127.0.0.1${f.url}`);(h.pathname.endsWith("/v1/messages")||h.pathname.endsWith("/v1/responses"))&&!f.requestStartTime&&(f.requestStartTime=hB.performance.now())}),d.addHook("preHandler",async(f,h)=>{let A=new URL(`http://127.0.0.1${f.url}`);if(A.pathname.endsWith("/v1/messages")||A.pathname.endsWith("/v1/responses")){let g=by(f);Ql.put(g,{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0})}}),d.addHook("preHandler",async(f,h)=>new Promise((A,g)=>{let m=E=>{E?g(E):A()};EV(t)(f,h,m).catch(g)})),d.addHook("preHandler",async(f,h)=>{let A=new URL(`http://127.0.0.1${f.url}`);if(f.pathname=A.pathname,f.pathname.endsWith("/v1/messages")&&f.pathname!=="/v1/messages"&&(f.preset=f.pathname.replace("/v1/messages","").replace("/","")),f.pathname.endsWith("/v1/responses")&&f.pathname!=="/v1/responses"&&(f.preset=f.pathname.replace("/v1/responses","").replace("/","")),(f.pathname.endsWith("/v1/messages")||f.pathname.endsWith("/v1/responses"))&&vp(f)==="codex"){await KV();let g=await WV();f.codexAccountId=g.id,f.codexAccountEmail=g.email}}),d.addHook("preHandler",async(f,h)=>{if(f.pathname.endsWith("/v1/messages")){let A=[];for(let g of Dy.getAllAgents())g.shouldHandle(f,t)&&(A.push(g.name),g.reqHandler(f,t),g.tools.size&&(f.body?.tools?.length||(f.body.tools=[]),f.body.tools.unshift(...Array.from(g.tools.values()).map(m=>({name:m.name,description:m.description,input_schema:m.input_schema})))));A.length&&(f.agents=A)}}),d.addHook("onError",async(f,h,A)=>{f.errorMessage=A?.message||A?.toString?.()||"Unknown error",fB.emit("onError",f,h,A)}),d.addHook("onSend",(f,h,A,g)=>{let m=f.pathname?.endsWith("/v1/messages"),E=f.pathname?.endsWith("/v1/responses");if(m||E){let D=by(f);if(A instanceof ReadableStream){if(m&&f.agents){let B=new AbortController,b=A.pipeThrough(new Cy),v,I=-1,S="",_="",k="",Q=[],P=[];return g(null,RV(b,async(T,N)=>{try{if(T.event==="content_block_start"&&T?.data?.content_block?.name){let $=f.agents.find(Y=>Dy.getAgent(Y)?.tools.get(T.data.content_block.name));if($){v=Dy.getAgent($),I=T.data.index,S=T.data.content_block.name,k=T.data.content_block.id;return}}if(I>-1&&T.data.index===I&&T.data?.delta?.type==="input_json_delta"){_+=T.data?.delta?.partial_json;return}if(I>-1&&T.data.index===I&&T.data.type==="content_block_stop"){try{let $=QV.default.parse(_);P.push({type:"tool_use",id:k,name:S,input:$});let Y=await v?.tools.get(S)?.handler($,{req:f,config:t});Q.push({tool_use_id:k,type:"tool_result",content:Y}),v=void 0,I=-1,S="",_="",k=""}catch($){console.log($)}return}if(T.event==="message_delta"&&Q.length){f.body.messages.push({role:"assistant",content:P}),f.body.messages.push({role:"user",content:Q});let $=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(f.body)});if(!$.ok)return;let Y=$.body.pipeThrough(new Cy).getReader();for(;;)try{let{value:Z,done:U}=await Y.read();if(U)break;let re=Z;if(["message_start","message_stop"].includes(re.event))continue;if(!N.desiredSize)break;N.enqueue(re)}catch(Z){if(Z.name==="AbortError"||Z.code==="ERR_STREAM_PREMATURE_CLOSE"){B.abort();break}throw Z}return}return T}catch($){if(console.error("Unexpected error in stream processing:",$),$.code==="ERR_STREAM_PREMATURE_CLOSE"){B.abort();return}throw $}}).pipeThrough(new TV))}let[C,w]=A.tee();return(async B=>{let b=B.pipeThrough(new TextDecoderStream).pipeThrough(new Cy).getReader();try{for(;;){let{done:v,value:I}=await b.read();if(v)break;let S=I.event,_=I.data;if(_?.usage){let k=Ql.get(D)||{},Q={...S==="message_start"?{}:k,..._.usage};_.usage?.prompt_tokens_details?.cached_tokens&&!_.usage.cache_read_input_tokens&&(Q.cache_read_input_tokens=_.usage.prompt_tokens_details.cached_tokens),(_.usage.cache_read_input_tokens||_.usage.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:_.usage.cache_read_input_tokens,cache_creation:_.usage.cache_creation_input_tokens}),Ql.put(D,Q)}if(_?.response?.usage){let k=_.response.usage,Q=S==="response.completed"?{}:Ql.get(D)||{},P={...Q,input_tokens:k.input_tokens||0,output_tokens:k.output_tokens||0,cache_read_input_tokens:k.cache_read_input_tokens??Q.cache_read_input_tokens??0,cache_creation_input_tokens:k.cache_creation_input_tokens??Q.cache_creation_input_tokens??0};Ql.put(D,P)}}}catch(v){v.name==="AbortError"||v.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",v)}finally{b.releaseLock()}})(w),g(null,C)}let y=ZV(A);if(y&&Ql.put(D,y),typeof A=="object")return A.error?g(A.error,null):g(A,null)}if(typeof A=="object"&&A.error)return g(A.error,null);g(null,A)}),d.addHook("onSend",async(f,h,A)=>{if(fB.emit("onSend",f,h,A),h.statusCode>=400&&(f.pathname?.endsWith("/v1/messages")||f.pathname?.endsWith("/v1/responses")))try{typeof A=="string"?f.errorResponseBody=A:A&&typeof A=="object"&&(f.errorResponseBody=JSON.stringify(A))}catch{}return A}),d.addHook("onResponse",async(f,h)=>{if(!(!f.pathname?.endsWith("/v1/messages")&&!f.pathname?.endsWith("/v1/responses")))try{let A=by(f),g=Ql.get(A),m=sV(A),E=qV(),D,y,C=f.sseError,w=C&&(C.type||C.code||C.message),B=g?.output_tokens&&g.output_tokens>0,b=h.statusCode>=400||w&&!B;if(b){D=f.errorMessage||h.errorMessage||f.error?.message||f.error?.toString?.()||void 0,w&&(D=D||JSON.stringify(C),y=JSON.stringify(C)),y=y||f.errorResponseBody;let S=wy(f);AB(h.statusCode,D)?(E.markRateLimited(f.provider||"",S,120,D),vp(f)==="codex"&&await pB(D)):E.recordFailure(f.provider||"",S,D)}else{let S=wy(f);E.recordSuccess(f.provider||"",S)}let v=g?.cache_read_input_tokens??0,I=g?.input_tokens??f.tokenCount??0;!v&&f.tokenCount&&g?.input_tokens&&g.input_tokens<f.tokenCount&&(v=f.tokenCount-g.input_tokens,v&&console.log("[Usage] Inferred cache tokens:",{tokenCount:f.tokenCount,netInput:g.input_tokens,impliedCache:v})),tB({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:A,provider:f.provider||"",originalModel:f.originalModel||f.body?.model||"",model:wy(f),modelFamily:f.modelFamily||"",scenarioType:f.scenarioType||"default",clientType:vp(f),codexAccountId:f.codexAccountId,codexAccountEmail:f.codexAccountEmail,stream:f.body?.stream??!1,inputTokens:I,outputTokens:b?0:g?.output_tokens||0,cacheReadInputTokens:v,cacheCreationInputTokens:g?.cache_creation_input_tokens||0,ttft:b?null:m.ttft,tokensPerSecond:b?null:m.tokensPerSecond,durationMs:f.requestStartTime?Math.round(hB.performance.now()-f.requestStartTime):0,status:b?"error":"success",errorMessage:D,responseBody:y})}catch(A){console.error("Usage tracking error:",A)}}),process.on("uncaughtException",f=>{d.app.log.error("Uncaught exception:",f)}),process.on("unhandledRejection",(f,h)=>{d.app.log.error("Unhandled rejection at:",h,"reason:",f)}),d}async function tJ(){let e=await yF();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===nD&&tJ().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function IF(e){try{let{stdout:t}=await wF("npm view claude-code-router-next version"),r=t.trim();return{hasUpdate:rJ(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function vF(){try{let{stdout:e,stderr:t}=await wF("npm install -g claude-code-router-next@latest");return t&&console.error("Update stderr:",t),console.log("Update stdout:",e),{success:!0,message:"Update completed successfully. Please restart the application to apply changes."}}catch(e){return console.error("Error performing update:",e),{success:!1,message:`Failed to perform update: ${e instanceof Error?e.message:"Unknown error"}`}}}function rJ(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let i=0;i<Math.max(r.length,n.length);i++){let o=i<r.length?r[i]:0,s=i<n.length?n[i]:0;if(o>s)return 1;if(o<s)return-1}return 0}var DF,bF,wF,BF=Y0(()=>{"use strict";DF=require("child_process"),bF=require("util"),wF=(0,bF.promisify)(DF.exec)});var xg,iD=Y0(()=>{xg="2.1.31"});var sD=Tr(oD=>{"use strict";Object.defineProperty(oD,"__esModule",{value:!0});var xF=require("child_process"),iJ=1024*1024,_F={exec(e,t){let r={maxBuffer:2*iJ,windowsHide:!0};(0,xF.exec)(e,r,t)},spawn(e,t,r){return(0,xF.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
|
|
1384
1384
|
`,r);n>=0&&(r=n+1)}return r>0?e.substring(r):e},split(e,t){let r=e.trim().split(/\s+/);return r.length>t&&(r[t-1]=r.slice(t-1).join(" ")),r},extractColumns(e,t,r){let n=e.split(/(\r\n|\n|\r)/),i=[];return r||(r=Math.max.apply(null,t)+1),n.forEach(o=>{let s=_F.split(o,r),a=[];t.forEach(u=>{a.push(s[u]||"")}),i.push(a)}),i},parseTable(e){let t=e.split(/(\r\n\r\n|\r\n\n|\n\r\n|\n\n)/).filter(r=>r&&r.trim().length>0).map(r=>r.split(/(\r\n|\n|\r)/).filter(n=>n.trim().length>0));return t.forEach(r=>{for(let n=0;r[n];){let i=r[n];i.startsWith(" ")?(r[n-1]+=i.trimLeft(),r.splice(n,1)):n+=1}}),t.map(r=>{let n={};return r.forEach(i=>{let o=i.indexOf(":"),s=i.slice(0,o).trim();n[s]=i.slice(o+1).trim()}),n})}};oD.default=_F});var FF=Tr((SF,_g)=>{(function(e,t){"use strict";typeof define=="function"&&define.amd?define(t):typeof _g=="object"&&_g.exports?_g.exports=t():e.log=t()})(SF,function(){"use strict";var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],i={},o=null;function s(A,g){var m=A[g];if(typeof m.bind=="function")return m.bind(A);try{return Function.prototype.bind.call(m,A)}catch{return function(){return Function.prototype.apply.apply(m,[A,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(A){return A==="debug"&&(A="log"),typeof console===t?!1:A==="trace"&&r?a:console[A]!==void 0?s(console,A):console.log!==void 0?s(console,"log"):e}function l(){for(var A=this.getLevel(),g=0;g<n.length;g++){var m=n[g];this[m]=g<A?e:this.methodFactory(m,A,this.name)}if(this.log=this.debug,typeof console===t&&A<this.levels.SILENT)return"No console available for logging"}function c(A){return function(){typeof console!==t&&(l.call(this),this[A].apply(this,arguments))}}function d(A,g,m){return u(A)||c.apply(this,arguments)}function f(A,g){var m=this,E,D,y,C="loglevel";typeof A=="string"?C+=":"+A:typeof A=="symbol"&&(C=void 0);function w(S){var _=(n[S]||"silent").toUpperCase();if(!(typeof window===t||!C)){try{window.localStorage[C]=_;return}catch{}try{window.document.cookie=encodeURIComponent(C)+"="+_+";"}catch{}}}function B(){var S;if(!(typeof window===t||!C)){try{S=window.localStorage[C]}catch{}if(typeof S===t)try{var _=window.document.cookie,k=encodeURIComponent(C),Q=_.indexOf(k+"=");Q!==-1&&(S=/^([^;]+)/.exec(_.slice(Q+k.length+1))[1])}catch{}return m.levels[S]===void 0&&(S=void 0),S}}function b(){if(!(typeof window===t||!C)){try{window.localStorage.removeItem(C)}catch{}try{window.document.cookie=encodeURIComponent(C)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function v(S){var _=S;if(typeof _=="string"&&m.levels[_.toUpperCase()]!==void 0&&(_=m.levels[_.toUpperCase()]),typeof _=="number"&&_>=0&&_<=m.levels.SILENT)return _;throw new TypeError("log.setLevel() called with invalid level: "+S)}m.name=A,m.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},m.methodFactory=g||d,m.getLevel=function(){return y??D??E},m.setLevel=function(S,_){return y=v(S),_!==!1&&w(y),l.call(m)},m.setDefaultLevel=function(S){D=v(S),B()||m.setLevel(S,!1)},m.resetLevel=function(){y=null,b(),l.call(m)},m.enableAll=function(S){m.setLevel(m.levels.TRACE,S)},m.disableAll=function(S){m.setLevel(m.levels.SILENT,S)},m.rebuild=function(){if(o!==m&&(E=v(o.getLevel())),l.call(m),o===m)for(var S in i)i[S].rebuild()},E=v(o?o.getLevel():"WARN");var I=B();I!=null&&(y=v(I)),l.call(m)}o=new f,o.getLogger=function(g){if(typeof g!="symbol"&&typeof g!="string"||g==="")throw new TypeError("You must supply a name when creating a logger.");var m=i[g];return m||(m=i[g]=new f(g,o.methodFactory)),m};var h=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=h),o},o.getLoggers=function(){return i},o.default=o,o})});var aD=Tr(DA=>{"use strict";var oJ=DA&&DA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(DA,"__esModule",{value:!0});var sJ=oJ(FF());DA.default=sJ.default});var RF=Tr(La=>{"use strict";var aJ=La&&La.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),uJ=La&&La.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),kF=La&&La.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),i=0;i<n.length;i++)n[i]!=="default"&&aJ(r,t,n[i]);return uJ(r,t),r}})(),TF=La&&La.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(La,"__esModule",{value:!0});var lJ=kF(require("os")),Sg=kF(require("fs")),Qs=TF(sD()),cJ=TF(aD()),dJ=e=>new Promise((t,r)=>{Sg.existsSync(e)?t():Sg.mkdir(e,n=>{n?r(n):t()})}),yh={darwin(e){return new Promise((t,r)=>{Qs.default.exec("netstat -anv -p TCP && netstat -anv -p UDP",function(n,i,o){if(n)r(n);else{let s=o.toString().trim();if(s){r(new Error(s));return}let a=Qs.default.stripLine(i.toString(),1),u=a.slice(0,a.indexOf(`
|
|
1385
1385
|
`)),l=Qs.default.stripLine(a,1),c=u.indexOf("rxbytes")>=0?10:8,d=Qs.default.extractColumns(l,[0,3,c],10).filter(f=>!!String(f[0]).match(/^(udp|tcp)/)).find(f=>{let h=String(f[1]).match(/\.(\d+)$/);return!!(h&&h[1]===String(e))});d&&d[2].length?t(parseInt(d[2],10)):r(new Error(`pid of port (${e}) not found`))}})})},linux(e){return new Promise((t,r)=>{Qs.default.exec("netstat -tunlp",function(i,o,s){if(i)r(i);else{let a=s.toString().trim();a&&cJ.default.warn(a);let u=Qs.default.stripLine(o.toString(),2),l=Qs.default.extractColumns(u,[3,6],7).find(c=>{let d=String(c[0]).match(/:(\d+)$/);return!!(d&&d[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)=>{Qs.default.exec("netstat -ano",function(n,i,o){if(n)r(n);else{let s=o.toString().trim();if(s){r(new Error(s));return}let a=Qs.default.stripLine(i.toString(),4),u=Qs.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=lJ.tmpdir()+"/.find-process",i=n+"/"+process.pid,o='netstat -tunp >> "'+i+'"';dJ(n).then(()=>{Qs.default.exec(o,()=>{Sg.readFile(i,"utf8",(s,a)=>{if(Sg.unlink(i,()=>{}),s)r(s);else{a=Qs.default.stripLine(a,2);let u=Qs.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`))}})})})})}};yh.freebsd=yh.darwin;yh.sunos=yh.darwin;function hJ(e){let t=process.platform;return new Promise((r,n)=>{if(!(t in yh))return n(new Error(`platform ${t} is unsupported`));let i=yh[t];i(e).then(r,n)})}La.default=hJ});var OF=Tr(Pa=>{"use strict";var fJ=Pa&&Pa.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),AJ=Pa&&Pa.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),pJ=Pa&&Pa.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),i=0;i<n.length;i++)n[i]!=="default"&&fJ(r,t,n[i]);return AJ(r,t),r}})(),gJ=Pa&&Pa.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Pa,"__esModule",{value:!0});var Fg=pJ(require("path")),$l=gJ(sD());function uD(e,t){return t?e&&e.match?e.match(t)!==null:!1:!0}function QF(e){let t=e.split(Fg.sep),r=t[t.length-1];r&&(t[t.length-1]=r.split(" ")[0]);let n=[];for(let i of t){let o=i.indexOf(" -");if(o>=0){n.push(i.substring(0,o).trim());break}else if(i.endsWith(" ")){n.push(i.trim());break}n.push(i)}return n.join(Fg.sep)}function NF(e){if(process.platform==="darwin"){let t=e.indexOf(".app/");if(t>=0)return Fg.basename(e.substring(0,t))}return Fg.basename(e)}var qc={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",$l.default.exec(n,function(i,o,s){if(i)"pid"in e&&e.pid!==void 0?t([]):r(i);else{let a=s.toString().trim();if(a){r(new Error(a));return}let u=$l.default.stripLine(o.toString(),1),c=$l.default.extractColumns(u,[0,1,2,3,4],5).filter(d=>d[0]&&e.pid!==void 0?d[0]===String(e.pid):d[4]&&e.name?uD(d[4],e.name):!!d[0]).map(d=>{let f=String(d[4]),h=QF(f);return{pid:parseInt(d[0],10),ppid:parseInt(d[1],10),uid:parseInt(d[2],10),gid:parseInt(d[3],10),name:NF(h),bin:h,cmd:d[4]}});e.config.strict&&e.name&&(c=c.filter(d=>d.name===e.name)),t(c)}})})},win32(e){return new Promise((t,r)=>{let n="[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance -className win32_process | select Name,ProcessId,ParentProcessId,CommandLine,ExecutablePath",i=[],o=$l.default.spawn("powershell.exe",["/c",n],{detached:!1,windowsHide:!0});o.stdout.on("data",s=>{i.push(s.toString())}),o.on("error",s=>{r(new Error("Command '"+n+"' failed with reason: "+s.toString()))}),o.on("close",s=>{if(s!==0)return r(new Error("Command '"+n+"' terminated with code: "+s));let a=$l.default.parseTable(i.join("")).filter(u=>{if(e.pid!==void 0)return u.ProcessId===String(e.pid);if(e.name){let l=u.Name||"";return e.config.strict?l===e.name||l.endsWith(".exe")&&l.slice(0,-4)===e.name:uD(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)=>{$l.default.exec("ps",function(i,o,s){if(i)e.pid!==void 0?t([]):r(i);else{let a=s.toString().trim();if(a){r(new Error(a));return}let u=$l.default.stripLine(o.toString(),1),c=$l.default.extractColumns(u,[0,3],4).filter(d=>d[0]&&e.pid!==void 0?d[0]===String(e.pid):d[1]&&e.name?uD(d[1],e.name):!!d[0]).map(d=>{let f=String(d[1]),h=QF(f);return{pid:parseInt(d[0],10),ppid:0,name:NF(h),bin:h,cmd:d[1]}});e.config.strict&&e.name&&(c=c.filter(d=>d.name===e.name)),t(c)}})})}};qc.linux=qc.darwin;qc.sunos=qc.darwin;qc.freebsd=qc.darwin;function mJ(e){let t=process.platform,r=qc[t];return r?r(e):Promise.reject(new Error(`Platform "${t}" is not supported`))}Pa.default=mJ});var PF=Tr(bA=>{"use strict";var cD=bA&&bA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(bA,"__esModule",{value:!0});var EJ=cD(RF()),LF=cD(OF()),yJ=cD(aD()),lD={port(e,t){return(0,EJ.default)(e).then(r=>lD.pid(r,t),()=>[])},pid(e,t){return(0,LF.default)({pid:e,config:t})},name(e,t){return(0,LF.default)({name:e,config:t,skipSelf:!0})}};function CJ(e,t,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&yJ.default.setLevel(n.logLevel),new Promise((i,o)=>{if(!(e in lD))o(new Error(`do not support find by "${e}"`));else{let s=/^\d+$/.test(String(t));e==="pid"&&!s?o(new Error("pid must be a number")):e==="port"&&!s?o(new Error("port must be a number")):lD[e](t,n).then(i,o)}})}bA.default=CJ});var UF=Tr(MF=>{"use strict";Object.defineProperty(MF,"__esModule",{value:!0})});var $F=Tr(Ma=>{"use strict";var DJ=Ma&&Ma.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]})),bJ=Ma&&Ma.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&DJ(t,e,r)},wJ=Ma&&Ma.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ma,"__esModule",{value:!0});Ma.default=void 0;var IJ=PF();Object.defineProperty(Ma,"default",{enumerable:!0,get:function(){return wJ(IJ).default}});bJ(UF(),Ma)});function HF(){let e=0;(0,Ho.existsSync)(Co.REFERENCE_COUNT_FILE)&&(e=parseInt((0,Ho.readFileSync)(Co.REFERENCE_COUNT_FILE,"utf-8"))||0),e++,(0,Ho.writeFileSync)(Co.REFERENCE_COUNT_FILE,e.toString())}function dD(){let e=0;(0,Ho.existsSync)(Co.REFERENCE_COUNT_FILE)&&(e=parseInt((0,Ho.readFileSync)(Co.REFERENCE_COUNT_FILE,"utf-8"))||0),e=Math.max(0,e-1),(0,Ho.writeFileSync)(Co.REFERENCE_COUNT_FILE,e.toString())}function qF(){return(0,Ho.existsSync)(Co.REFERENCE_COUNT_FILE)&&parseInt((0,Ho.readFileSync)(Co.REFERENCE_COUNT_FILE,"utf-8"))||0}function Gc(){if(!(0,Ho.existsSync)(Co.PID_FILE))return!1;let e;try{let t=(0,Ho.readFileSync)(Co.PID_FILE,"utf-8");if(e=parseInt(t,10),isNaN(e))return rl(),!1}catch{return!1}try{if(process.platform==="win32"){let t=`tasklist /FI "PID eq ${e}"`;return(0,jF.execSync)(t,{stdio:"pipe"}).toString().includes(e.toString())?!0:(rl(),!1)}else return process.kill(e,0),!0}catch{return rl(),!1}}function rl(){if((0,Ho.existsSync)(Co.PID_FILE))try{require("fs").unlinkSync(Co.PID_FILE)}catch{}}function GF(){if(!(0,Ho.existsSync)(Co.PID_FILE))return null;try{let e=parseInt((0,Ho.readFileSync)(Co.PID_FILE,"utf-8"));return isNaN(e)?null:e}catch{return null}}async function kg(){let e=GF(),t=await Gc(),n=(await Hi()).PORT||3456;return{running:t,pid:e,port:n,endpoint:`http://127.0.0.1:${n}`,pidFile:Co.PID_FILE,referenceCount:qF()}}async function VF(){if(qF()===0){let t=GF();if(t&&await Gc())try{process.kill(t,"SIGTERM")}catch{}}}var Ho,Co,vJ,jF,wA=Y0(()=>{"use strict";Ho=require("fs"),Co=an(Ss());nl();vJ=an($F()),jF=require("child_process")});var XF={};N1(XF,{backupConfigFile:()=>ZF,getSettingsPath:()=>gD,initConfig:()=>BJ,initDir:()=>KF,readConfigFile:()=>Hi,restartService:()=>pD,run:()=>AD,writeConfigFile:()=>Ua});var ys,JF,jl,YF,zF,ci,WF,Ch,fD,hD,IA,KF,Hi,ZF,Ua,BJ,AD,pD,gD,nl=Y0(()=>{"use strict";ys=an(require("node:fs/promises")),JF=an(X0()),jl=an(require("node:path")),YF=require("node:crypto"),zF=an(require("node:os")),ci=an(Ss()),WF=an(CF()),Ch=require("fs");BF();iD();fD=require("child_process");wA();hD=e=>{if(typeof e=="string")return e.replace(/\$\{([^}]+)\}|\$([A-Z_][A-Z0-9_]*)/g,(t,r,n)=>{let i=r||n;return process.env[i]||t});if(Array.isArray(e))return e.map(hD);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=hD(n);return t}return e},IA=async e=>{try{await ys.default.access(e)}catch{await ys.default.mkdir(e,{recursive:!0})}},KF=async()=>{await IA(ci.HOME_DIR),await IA(ci.PLUGINS_DIR),await IA(ci.PRESETS_DIR),await IA(jl.default.join(ci.HOME_DIR,"logs"))},Hi=async()=>{try{let e=await ys.default.readFile(ci.CONFIG_FILE,"utf-8");try{let t=JF.default.parse(e);return hD(t)}catch(t){console.error(`Failed to parse config file at ${ci.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 KF();let t=await ZF();t&&console.log(`Backed up existing configuration file to ${t}`);let r={PORT:3456,Providers:[],Router:{},Clients:(0,ci.getDefaultClientsConfig)()};return await Ua(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 ${ci.CONFIG_FILE}`),console.error("Error details:",e.message),process.exit(1)}},ZF=async()=>{try{if(await ys.default.access(ci.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=`${ci.CONFIG_FILE}.${e}.bak`;await ys.default.copyFile(ci.CONFIG_FILE,t);try{let r=jl.default.dirname(ci.CONFIG_FILE),n=jl.default.basename(ci.CONFIG_FILE),o=(await ys.default.readdir(r)).filter(s=>s.startsWith(n)&&s.endsWith(".bak")).sort().reverse();if(o.length>3)for(let s=3;s<o.length;s++){let a=jl.default.join(r,o[s]);await ys.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},Ua=async e=>{await IA(ci.HOME_DIR);let t=`${JSON.stringify(e,null,2)}`;await ys.default.writeFile(ci.CONFIG_FILE,t)},BJ=async()=>{let e=await Hi();return Object.assign(process.env,e),e},AD=async(e=[])=>{if(Gc()){console.log("claude-code-router server is running");return}let r=await(0,WF.getServer)(),n=r.app;(0,Ch.writeFileSync)(ci.PID_FILE,process.pid.toString()),n.post("/api/update/perform",async()=>await vF()),n.get("/api/update/check",async()=>await IF(xg)),n.post("/api/restart",async()=>(setTimeout(async()=>{(0,fD.spawn)("ccr",["restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await r.start()},pD=async()=>{try{let r=parseInt((0,Ch.readFileSync)(ci.PID_FILE,"utf-8"));if(process.kill(r),rl(),(0,Ch.existsSync)(ci.REFERENCE_COUNT_FILE))try{await ys.default.unlink(ci.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),rl()}console.log("Starting claude code router service...");let e=jl.default.join(__dirname,"cli.js"),t=(0,fD.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.")},gD=async e=>{let t=(0,YF.createHash)("sha256").update(e,"utf-8").digest("hex"),r=jl.default.join(zF.default.tmpdir(),"claude-code-router"),n=`ccr-settings-${t}.json`,i=jl.default.join(r,n);try{await ys.default.access(r)}catch{await ys.default.mkdir(r,{recursive:!0})}try{return await ys.default.access(i),i}catch{return await ys.default.writeFile(i,e,"utf-8"),i}}});var BA=Tr((zoe,s2)=>{var FJ=require("node:tty"),kJ=FJ?.WriteStream?.prototype?.hasColors?.()??!1,Bn=(e,t)=>{if(!kJ)return i=>i;let r=`\x1B[${e}m`,n=`\x1B[${t}m`;return i=>{let o=i+"",s=o.indexOf(n);if(s===-1)return r+o+n;let a=r,u=0,c=(t===22?n:"")+r;for(;s!==-1;)a+=o.slice(u,s)+c,u=s+n.length,s=o.indexOf(n,u);return a+=o.slice(u)+n,a}},In={};In.reset=Bn(0,0);In.bold=Bn(1,22);In.dim=Bn(2,22);In.italic=Bn(3,23);In.underline=Bn(4,24);In.overline=Bn(53,55);In.inverse=Bn(7,27);In.hidden=Bn(8,28);In.strikethrough=Bn(9,29);In.black=Bn(30,39);In.red=Bn(31,39);In.green=Bn(32,39);In.yellow=Bn(33,39);In.blue=Bn(34,39);In.magenta=Bn(35,39);In.cyan=Bn(36,39);In.white=Bn(37,39);In.gray=Bn(90,39);In.bgBlack=Bn(40,49);In.bgRed=Bn(41,49);In.bgGreen=Bn(42,49);In.bgYellow=Bn(43,49);In.bgBlue=Bn(44,49);In.bgMagenta=Bn(45,49);In.bgCyan=Bn(46,49);In.bgWhite=Bn(47,49);In.bgGray=Bn(100,49);In.redBright=Bn(91,39);In.greenBright=Bn(92,39);In.yellowBright=Bn(93,39);In.blueBright=Bn(94,39);In.magentaBright=Bn(95,39);In.cyanBright=Bn(96,39);In.whiteBright=Bn(97,39);In.bgRedBright=Bn(101,49);In.bgGreenBright=Bn(102,49);In.bgYellowBright=Bn(103,49);In.bgBlueBright=Bn(104,49);In.bgMagentaBright=Bn(105,49);In.bgCyanBright=Bn(106,49);In.bgWhiteBright=Bn(107,49);s2.exports=In});var f2=Tr((Ase,h2)=>{"use strict";h2.exports=MJ;function PJ(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 MJ(e){let t=PJ(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 p2=Tr((pse,A2)=>{"use strict";A2.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 Ug=Tr((gse,g2)=>{"use strict";var UJ=p2();g2.exports=e=>typeof e=="string"?e.replace(UJ(),""):e});var E2=Tr((mse,DD)=>{"use strict";var m2=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);DD.exports=m2;DD.exports.default=m2});var C2=Tr((Ese,y2)=>{"use strict";y2.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 b2=Tr((yse,bD)=>{"use strict";var $J=Ug(),jJ=E2(),HJ=C2(),D2=e=>{if(typeof e!="string"||e.length===0||(e=$J(e),e.length===0))return 0;e=e.replace(HJ()," ");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+=jJ(n)?2:1)}return t};bD.exports=D2;bD.exports.default=D2});var I2=Tr((Cse,w2)=>{"use strict";w2.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 wD=Tr((Dse,B2)=>{var xA=I2(),v2={};for(let e of Object.keys(xA))v2[xA[e]]=e;var zr={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"]}};B2.exports=zr;for(let e of Object.keys(zr)){if(!("channels"in zr[e]))throw new Error("missing channels property: "+e);if(!("labels"in zr[e]))throw new Error("missing channel labels property: "+e);if(zr[e].labels.length!==zr[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=zr[e];delete zr[e].channels,delete zr[e].labels,Object.defineProperty(zr[e],"channels",{value:t}),Object.defineProperty(zr[e],"labels",{value:r})}zr.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(t,r,n),o=Math.max(t,r,n),s=o-i,a,u;o===i?a=0:t===o?a=(r-n)/s:r===o?a=2+(n-t)/s:n===o&&(a=4+(t-r)/s),a=Math.min(a*60,360),a<0&&(a+=360);let l=(i+o)/2;return o===i?u=0:l<=.5?u=s/(o+i):u=s/(2-o-i),[a,u*100,l*100]};zr.rgb.hsv=function(e){let t,r,n,i,o,s=e[0]/255,a=e[1]/255,u=e[2]/255,l=Math.max(s,a,u),c=l-Math.min(s,a,u),d=function(f){return(l-f)/6/c+1/2};return c===0?(i=0,o=0):(o=c/l,t=d(s),r=d(a),n=d(u),s===l?i=n-r:a===l?i=1/3+t-n:u===l&&(i=2/3+r-t),i<0?i+=1:i>1&&(i-=1)),[i*360,o*100,l*100]};zr.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=zr.rgb.hsl(e)[0],o=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[i,o*100,n*100]};zr.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-r,1-n),o=(1-t-i)/(1-i)||0,s=(1-r-i)/(1-i)||0,a=(1-n-i)/(1-i)||0;return[o*100,s*100,a*100,i*100]};function qJ(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}zr.rgb.keyword=function(e){let t=v2[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(xA)){let o=xA[i],s=qJ(e,o);s<r&&(r=s,n=i)}return n};zr.keyword.rgb=function(e){return xA[e]};zr.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let i=t*.4124+r*.3576+n*.1805,o=t*.2126+r*.7152+n*.0722,s=t*.0193+r*.1192+n*.9505;return[i*100,o*100,s*100]};zr.rgb.lab=function(e){let t=zr.rgb.xyz(e),r=t[0],n=t[1],i=t[2];r/=95.047,n/=100,i/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let o=116*n-16,s=500*(r-n),a=200*(n-i);return[o,s,a]};zr.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i,o,s;if(r===0)return s=n*255,[s,s,s];n<.5?i=n*(1+r):i=n+r-n*r;let a=2*n-i,u=[0,0,0];for(let l=0;l<3;l++)o=t+1/3*-(l-1),o<0&&o++,o>1&&o--,6*o<1?s=a+(i-a)*6*o:2*o<1?s=i:3*o<2?s=a+(i-a)*(2/3-o)*6:s=a,u[l]=s*255;return u};zr.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=r,o=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,i*=o<=1?o:2-o;let s=(n+r)/2,a=n===0?2*i/(o+i):2*r/(n+r);return[t,a*100,s*100]};zr.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,o=t-Math.floor(t),s=255*n*(1-r),a=255*n*(1-r*o),u=255*n*(1-r*(1-o));switch(n*=255,i){case 0:return[n,u,s];case 1:return[a,n,s];case 2:return[s,n,u];case 3:return[s,a,n];case 4:return[u,s,n];case 5:return[n,s,a]}};zr.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=Math.max(n,.01),o,s;s=(2-r)*n;let a=(2-r)*i;return o=r*i,o/=a<=1?a:2-a,o=o||0,s/=2,[t,o*100,s*100]};zr.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i=r+n,o;i>1&&(r/=i,n/=i);let s=Math.floor(6*t),a=1-n;o=6*t-s,(s&1)!==0&&(o=1-o);let u=r+o*(a-r),l,c,d;switch(s){default:case 6:case 0:l=a,c=u,d=r;break;case 1:l=u,c=a,d=r;break;case 2:l=r,c=a,d=u;break;case 3:l=r,c=u,d=a;break;case 4:l=u,c=r,d=a;break;case 5:l=a,c=r,d=u;break}return[l*255,c*255,d*255]};zr.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i=e[3]/100,o=1-Math.min(1,t*(1-i)+i),s=1-Math.min(1,r*(1-i)+i),a=1-Math.min(1,n*(1-i)+i);return[o*255,s*255,a*255]};zr.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i,o,s;return i=t*3.2406+r*-1.5372+n*-.4986,o=t*-.9689+r*1.8758+n*.0415,s=t*.0557+r*-.204+n*1.057,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,i=Math.min(Math.max(0,i),1),o=Math.min(Math.max(0,o),1),s=Math.min(Math.max(0,s),1),[i*255,o*255,s*255]};zr.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let i=116*r-16,o=500*(t-r),s=200*(r-n);return[i,o,s]};zr.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],i,o,s;o=(t+16)/116,i=r/500+o,s=o-n/200;let a=o**3,u=i**3,l=s**3;return o=a>.008856?a:(o-16/116)/7.787,i=u>.008856?u:(i-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,i*=95.047,o*=100,s*=108.883,[i,o,s]};zr.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],i;i=Math.atan2(n,r)*360/2/Math.PI,i<0&&(i+=360);let s=Math.sqrt(r*r+n*n);return[t,s,i]};zr.lch.lab=function(e){let t=e[0],r=e[1],i=e[2]/360*2*Math.PI,o=r*Math.cos(i),s=r*Math.sin(i);return[t,o,s]};zr.rgb.ansi16=function(e,t=null){let[r,n,i]=e,o=t===null?zr.rgb.hsv(e)[2]:t;if(o=Math.round(o/50),o===0)return 30;let s=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return o===2&&(s+=60),s};zr.hsv.ansi16=function(e){return zr.rgb.ansi16(zr.hsv.rgb(e),e[2])};zr.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)};zr.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,i=(t>>1&1)*r*255,o=(t>>2&1)*r*255;return[n,i,o]};zr.ansi256.rgb=function(e){if(e>=232){let o=(e-232)*10+8;return[o,o,o]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[r,n,i]};zr.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};zr.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),i=n>>16&255,o=n>>8&255,s=n&255;return[i,o,s]};zr.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,r),n),o=Math.min(Math.min(t,r),n),s=i-o,a,u;return s<1?a=o/(1-s):a=0,s<=0?u=0:i===t?u=(r-n)/s%6:i===r?u=2+(n-t)/s:u=4+(t-r)/s,u/=6,u%=1,[u*360,s*100,a*100]};zr.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),i=0;return n<1&&(i=(r-.5*n)/(1-n)),[e[0],n*100,i*100]};zr.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,i=0;return n<1&&(i=(r-n)/(1-n)),[e[0],n*100,i*100]};zr.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let i=[0,0,0],o=t%1*6,s=o%1,a=1-s,u=0;switch(Math.floor(o)){case 0:i[0]=1,i[1]=s,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=s;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=s,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return u=(1-r)*n,[(r*i[0]+u)*255,(r*i[1]+u)*255,(r*i[2]+u)*255]};zr.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),i=0;return n>0&&(i=t/n),[e[0],i*100,n*100]};zr.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],i*100,n*100]};zr.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]};zr.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,i=n-t,o=0;return i<1&&(o=(n-i)/(1-i)),[e[0],i*100,o*100]};zr.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};zr.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};zr.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};zr.gray.hsl=function(e){return[0,0,e[0]]};zr.gray.hsv=zr.gray.hsl;zr.gray.hwb=function(e){return[0,100,e[0]]};zr.gray.cmyk=function(e){return[0,0,0,e[0]]};zr.gray.lab=function(e){return[e[0],0,0]};zr.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};zr.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var _2=Tr((bse,x2)=>{var $g=wD();function GJ(){let e={},t=Object.keys($g);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function VJ(e){let t=GJ(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys($g[n]);for(let o=i.length,s=0;s<o;s++){let a=i[s],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function JJ(e,t){return function(r){return t(e(r))}}function YJ(e,t){let r=[t[e].parent,e],n=$g[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=JJ($g[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}x2.exports=function(e){let t=VJ(e),r={},n=Object.keys(t);for(let i=n.length,o=0;o<i;o++){let s=n[o];t[s].parent!==null&&(r[s]=YJ(s,t))}return r}});var F2=Tr((wse,S2)=>{var ID=wD(),zJ=_2(),wh={},WJ=Object.keys(ID);function KJ(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 ZJ(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let i=e(r);if(typeof i=="object")for(let o=i.length,s=0;s<o;s++)i[s]=Math.round(i[s]);return i};return"conversion"in e&&(t.conversion=e.conversion),t}WJ.forEach(e=>{wh[e]={},Object.defineProperty(wh[e],"channels",{value:ID[e].channels}),Object.defineProperty(wh[e],"labels",{value:ID[e].labels});let t=zJ(e);Object.keys(t).forEach(n=>{let i=t[n];wh[e][n]=ZJ(i),wh[e][n].raw=KJ(i)})});S2.exports=wh});var O2=Tr((Ise,N2)=>{"use strict";var k2=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,T2=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},R2=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},jg=e=>e,Q2=(e,t,r)=>[e,t,r],Ih=(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})},vD,vh=(e,t,r,n)=>{vD===void 0&&(vD=F2());let i=n?10:0,o={};for(let[s,a]of Object.entries(vD)){let u=s==="ansi16"?"ansi":s;s===t?o[u]=e(r,i):typeof a=="object"&&(o[u]=e(a[t],i))}return o};function XJ(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[i,o]of Object.entries(n))t[i]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},n[i]=t[i],e.set(o[0],o[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",Ih(t.color,"ansi",()=>vh(k2,"ansi16",jg,!1)),Ih(t.color,"ansi256",()=>vh(T2,"ansi256",jg,!1)),Ih(t.color,"ansi16m",()=>vh(R2,"rgb",Q2,!1)),Ih(t.bgColor,"ansi",()=>vh(k2,"ansi16",jg,!0)),Ih(t.bgColor,"ansi256",()=>vh(T2,"ansi256",jg,!0)),Ih(t.bgColor,"ansi16m",()=>vh(R2,"rgb",Q2,!0)),t}Object.defineProperty(N2,"exports",{enumerable:!0,get:XJ})});var M2=Tr((vse,P2)=>{"use strict";var _A=b2(),eY=Ug(),tY=O2(),xD=new Set(["\x1B","\x9B"]),rY=39,L2=e=>`${xD.values().next().value}[${e}m`,nY=e=>e.split(" ").map(t=>_A(t)),BD=(e,t,r)=>{let n=[...t],i=!1,o=_A(eY(e[e.length-1]));for(let[s,a]of n.entries()){let u=_A(a);if(o+u<=r?e[e.length-1]+=a:(e.push(a),o=0),xD.has(a))i=!0;else if(i&&a==="m"){i=!1;continue}i||(o+=u,o===r&&s<n.length-1&&(e.push(""),o=0))}!o&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},iY=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(_A(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},oY=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i="",o,s=nY(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimLeft());let c=_A(a[a.length-1]);if(u!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c>0||r.trim===!1)&&(a[a.length-1]+=" ",c++)),r.hard&&s[u]>t){let d=t-c,f=1+Math.floor((s[u]-d-1)/t);Math.floor((s[u]-1)/t)<f&&a.push(""),BD(a,l,t);continue}if(c+s[u]>t&&c>0&&s[u]>0){if(r.wordWrap===!1&&c<t){BD(a,l,t);continue}a.push("")}if(c+s[u]>t&&r.wordWrap===!1){BD(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(iY)),n=a.join(`
|
|
1386
1386
|
`);for(let[u,l]of[...n].entries()){if(i+=l,xD.has(l)){let d=parseFloat(/\d[^m]*/.exec(n.slice(u,u+4)));o=d===rY?null:d}let c=tY.codes.get(Number(o));o&&c&&(n[u+1]===`
|