@wengine-ai/claude-code-router-next 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/cli.js +3 -3
  2. package/dist/index.html +1 -1
  3. package/package.json +3 -6
  4. package/dist/README.md +0 -763
  5. package/dist/cli.d.ts +0 -2
  6. package/dist/cli.js.map +0 -1
  7. package/dist/index.js +0 -1539
  8. package/dist/package.json +0 -31
  9. package/dist/utils/activateCommand.d.ts +0 -4
  10. package/dist/utils/activateCommand.js +0 -24
  11. package/dist/utils/activateCommand.js.map +0 -1
  12. package/dist/utils/claudeSettings.d.ts +0 -12
  13. package/dist/utils/claudeSettings.js +0 -188
  14. package/dist/utils/claudeSettings.js.map +0 -1
  15. package/dist/utils/codeCommand.d.ts +0 -13
  16. package/dist/utils/codeCommand.js +0 -88
  17. package/dist/utils/codeCommand.js.map +0 -1
  18. package/dist/utils/createEnvVariables.d.ts +0 -5
  19. package/dist/utils/createEnvVariables.js +0 -83
  20. package/dist/utils/createEnvVariables.js.map +0 -1
  21. package/dist/utils/index.d.ts +0 -15
  22. package/dist/utils/index.js +0 -271
  23. package/dist/utils/index.js.map +0 -1
  24. package/dist/utils/installCommand.d.ts +0 -9
  25. package/dist/utils/installCommand.js +0 -47
  26. package/dist/utils/installCommand.js.map +0 -1
  27. package/dist/utils/modelSelector.d.ts +0 -1
  28. package/dist/utils/modelSelector.js +0 -402
  29. package/dist/utils/modelSelector.js.map +0 -1
  30. package/dist/utils/preset/commands.d.ts +0 -8
  31. package/dist/utils/preset/commands.js +0 -267
  32. package/dist/utils/preset/commands.js.map +0 -1
  33. package/dist/utils/preset/export.d.ts +0 -11
  34. package/dist/utils/preset/export.js +0 -97
  35. package/dist/utils/preset/export.js.map +0 -1
  36. package/dist/utils/preset/index.d.ts +0 -8
  37. package/dist/utils/preset/index.js +0 -32
  38. package/dist/utils/preset/index.js.map +0 -1
  39. package/dist/utils/preset/install-github.d.ts +0 -13
  40. package/dist/utils/preset/install-github.js +0 -161
  41. package/dist/utils/preset/install-github.js.map +0 -1
  42. package/dist/utils/preset/install.d.ts +0 -19
  43. package/dist/utils/preset/install.js +0 -239
  44. package/dist/utils/preset/install.js.map +0 -1
  45. package/dist/utils/processCheck.d.ts +0 -17
  46. package/dist/utils/processCheck.js +0 -161
  47. package/dist/utils/processCheck.js.map +0 -1
  48. package/dist/utils/prompt/schema-input.d.ts +0 -26
  49. package/dist/utils/prompt/schema-input.js +0 -183
  50. package/dist/utils/prompt/schema-input.js.map +0 -1
  51. package/dist/utils/status.d.ts +0 -1
  52. package/dist/utils/status.js +0 -28
  53. package/dist/utils/status.js.map +0 -1
  54. package/dist/utils/statusline.d.ts +0 -61
  55. package/dist/utils/statusline.js +0 -924
  56. package/dist/utils/statusline.js.map +0 -1
  57. package/dist/utils/update.d.ts +0 -18
  58. package/dist/utils/update.js +0 -74
  59. package/dist/utils/update.js.map +0 -1
package/dist/cli.js CHANGED
@@ -631,7 +631,7 @@ ${this.toMarkdown(Q,B+1)}`:`${F}- ${Q}`).join(`
631
631
  ${this.toMarkdown(M,B+1)}`:`${F}${Q}: ${M}`).join(`
632
632
  `):`${F}${A}`}async output(A,B={}){try{let F=this.formatData(A,B);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}}}}),Eo,Qi=u(()=>{"use strict";Eo=class{type="webhook";config;defaultTimeout=3e4;constructor(A){if(!A.url)throw new Error("Webhook URL is required");this.config={method:"POST",retry:{maxAttempts:3,backoffMs:1e3},silent:!1,...A}}buildHeaders(){let A={"Content-Type":"application/json",...this.config.headers||{}};if(this.config.auth)switch(this.config.auth.type){case"bearer":this.config.auth.token&&(A.Authorization=`Bearer ${this.config.auth.token}`);break;case"basic":if(this.config.auth.username&&this.config.auth.password){let B=Buffer.from(`${this.config.auth.username}:${this.config.auth.password}`).toString("base64");A.Authorization=`Basic ${B}`}break;case"custom":this.config.auth.custom&&(A[this.config.auth.custom.header]=this.config.auth.custom.value);break}return A}buildBody(A,B){let{format:F="json",timestamp:Q=!0,prefix:M,metadata:O}=B||{},G={data:A};return Q&&(G.timestamp=new Date().toISOString()),M&&(G.prefix=M),O&&Object.keys(O).length>0&&(G.metadata=O),G}async sendRequest(A,B,F,Q,M){let O=new AbortController,G=setTimeout(()=>O.abort(),M);try{let J=await fetch(A,{method:B,headers:F,body:JSON.stringify(Q),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(A){return new Promise(B=>setTimeout(B,A))}async sendWithRetry(A,B,F,Q,M,O){let G=null;for(let J=1;J<=O.maxAttempts;J++)try{return await this.sendRequest(A,B,F,Q,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(A,B={}){let F=B.timeout||this.defaultTimeout;try{let Q=this.buildHeaders(),M=this.buildBody(A,B),O=await this.sendWithRetry(this.config.url,this.config.method,Q,M,F,this.config.retry);return!0}catch(Q){let M=Q instanceof Error?Q.message:String(Q);if(this.config.silent)return console.error(`[WebhookOutputHandler] Failed to send data: ${M}`),!1;throw new Error(`Webhook output failed: ${M}`)}}}}),Lo,Hs,Ac,i0,o0=u(()=>{"use strict";Lo=require("fs"),Hs=require("path"),Ac=require("os"),i0=class{type="temp-file";config;baseDir;constructor(A={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...A};let B=(0,Ac.tmpdir)();this.baseDir=(0,Hs.join)(B,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,Lo.existsSync)(this.baseDir)||(0,Lo.mkdirSync)(this.baseDir,{recursive:!0})}catch{}}extractSessionId(A){try{let B=A.match(/_session_([a-f0-9-]+)/i);return B?B[1]:null}catch{return null}}getFilePath(A){let B=this.config.prefix||"session",F=this.config.extension?`.${this.config.extension}`:"",Q;if(this.config.includeTimestamp){let M=Date.now();Q=`${B}-${A}-${M}${F}`}else Q=`${B}-${A}${F}`;return(0,Hs.join)(this.baseDir,Q)}async output(A,B={}){try{let F=B.metadata?.sessionId;if(!F)return!1;let Q={...A,timestamp:Date.now(),sessionId:F},M=this.getFilePath(F);return(0,Lo.writeFileSync)(M,JSON.stringify(Q,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),cf,pc,Hm=u(()=>{"use strict";pn(),Qi(),o0(),cf=class{handlers=new Map;defaultOptions={};registerHandler(A,B){this.handlers.set(A,B)}registerHandlers(A){for(let B of A)if(B.enabled!==!1)try{let F=this.createHandler(B),Q=B.type+"_"+Date.now();this.registerHandler(Q,F)}catch(F){console.error(`[OutputManager] Failed to register ${B.type} handler:`,F)}}createHandler(A){switch(A.type){case"console":return new Qr(A.config);case"webhook":return new Eo(A.config);case"temp-file":return new i0(A.config);default:throw new Error(`Unknown output handler type: ${A.type}`)}}unregisterHandler(A){return this.handlers.delete(A)}getHandler(A){return this.handlers.get(A)}getAllHandlers(){return new Map(this.handlers)}clearHandlers(){this.handlers.clear()}setDefaultOptions(A){this.defaultOptions={...this.defaultOptions,...A}}getDefaultOptions(){return{...this.defaultOptions}}async output(A,B){let F={...this.defaultOptions,...B},Q={success:[],failed:[]},M=Array.from(this.handlers.entries()).map(async([O,G])=>{try{await G.output(A,F)?Q.success.push(O):Q.failed.push(O)}catch(J){console.error(`[OutputManager] Handler ${O} failed:`,J),Q.failed.push(O)}});return await Promise.all(M),Q}async outputTo(A,B,F){let Q={...this.defaultOptions,...F},M={success:[],failed:[]},O=A.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(B,Q)?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(A,B,F){let Q=Array.from(this.handlers.entries()).filter(([M,O])=>O.type===A).map(([M])=>M);return this.outputTo(Q,B,F)}},pc=new cf}),Wi={};c(Wi,{ActiveProbeService:()=>Qw,ConfigService:()=>Ru,ProviderHealthStore:()=>Z,ProviderService:()=>Km,SSEParserTransform:()=>Lw,SSESerializerTransform:()=>rP,TokenizerService:()=>iE,TransformerService:()=>eE,calculateTokenCount:()=>Xn,default:()=>uP,getActiveProbeService:()=>Nw,getAllQuotaResults:()=>Xo,getAllRateLimitInfo:()=>Ym,getHealthStore:()=>R,getQuotaAdapter:()=>Rw,getQuotaResult:()=>Hi,getRateLimitInfo:()=>Jm,getRuntimeDebugLog:()=>_d,initProviderHealthPersistence:()=>k,initQuotaStorePersistence:()=>Xr,initRateLimitPersistence:()=>Af,pluginManager:()=>eP,resetActiveProbeService:()=>Z6,rewriteStream:()=>nP,router:()=>C0,searchProjectBySession:()=>Xb,sessionUsageCache:()=>Ze,setRuntimeDebugLog:()=>l0,startActiveProbe:()=>Ow,stopActiveProbe:()=>Pw,storeQuotaResult:()=>Gs,tokenSpeedPlugin:()=>oP}),t.exports=f(Wi);var gc=h(CB(),1),s0=h(DB(),1),mc=require("fs"),pa=require("path"),Za=bB(),_s=h(D(),1),Ru=class{config={};options;constructor(A={jsonPath:"./config.json"}){this.options={envPath:A.envPath||".env",jsonPath:A.jsonPath,useEnvFile:!1,useJsonFile:A.useJsonFile!==!1,useEnvironmentVariables:A.useEnvironmentVariables!==!1,...A},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 A=this.isAbsolutePath(this.options.jsonPath)?this.options.jsonPath:(0,pa.join)(process.cwd(),this.options.jsonPath);if((0,mc.existsSync)(A))try{let B=(0,mc.readFileSync)(A,"utf-8"),F=_s.default.parse(B);this.config={...this.config,...F},console.log(`Loaded JSON config from: ${A}`)}catch(B){console.warn(`Failed to load JSON config from ${A}:`,B)}else console.warn(`JSON config file not found: ${A}`)}loadEnvConfig(){let A=this.isAbsolutePath(this.options.envPath)?this.options.envPath:(0,pa.join)(process.cwd(),this.options.envPath);if((0,mc.existsSync)(A))try{let B=(0,Za.config)({path:A});B.parsed&&(this.config={...this.config,...this.parseEnvConfig(B.parsed)})}catch(B){console.warn(`Failed to load .env config from ${A}:`,B)}}loadEnvironmentVariables(){let A=this.parseEnvConfig(process.env);this.config={...this.config,...A}}parseEnvConfig(A){let B={};return Object.assign(B,A),B}isAbsolutePath(A){return A.startsWith("/")||A.includes(":")}get(A,B){let F=this.config[A];return F!==void 0?F:B}getAll(){return{...this.config}}getHttpsProxy(){return this.get("HTTPS_PROXY")||this.get("https_proxy")||this.get("httpsProxy")||this.get("PROXY_URL")}has(A){return this.config[A]!==void 0}set(A,B){this.config[A]=B}reload(){this.config={},this.loadConfig()}getConfigSummary(){let A=[];return this.options.initialConfig&&A.push("Initial Config"),this.options.useJsonFile&&this.options.jsonPath&&A.push(`JSON: ${this.options.jsonPath}`),this.options.useEnvFile&&A.push(`ENV: ${this.options.envPath}`),this.options.useEnvironmentVariables&&A.push("Environment Variables"),`Config sources: ${A.join(", ")}`}};function $i(A,B=500,F="internal_error",Q="api_error"){let M=new Error(A);return M.statusCode=B,M.code=F,M.type=Q,M}async function Qu(A,B,F){B.log.error(A);let Q=A.statusCode||500;if(A.rawBody)try{let O=JSON.parse(A.rawBody);return F.code(Q).send(O)}catch{return F.code(Q).send(A.rawBody)}let M={error:{message:A.message+(A.stack||"Internal Server Error"),type:A.type||"api_error",code:A.code||"internal_error"}};return F.code(Q).send(M)}var a0=Vo();function u0(A,B,F,Q,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(B),signal:G};return F.httpsProxy&&(ne.dispatcher=new a0.ProxyAgent(new URL(F.httpsProxy).toString())),M?.debug({reqId:Q.req.id,request:ne,headers:Object.fromEntries(O.entries()),requestUrl:typeof A=="string"?A:A.toString(),useProxy:F.httpsProxy},"final request"),fetch(typeof A=="string"?A:A.toString(),ne)}var wd=new Set(["authorization","x-api-key","x-goog-api-key","cookie","set-cookie"]),Nu={maxBodyLength:4096,maxStreamChunks:100},Id=!1;function l0(A){Id=A}function _d(){return Id}function vd(A){return Id||A.get("DEBUG_LOG")===!0}function c0(A){let B=A.get("DEBUG_LOG_OPTIONS");return!B||typeof B!="object"?Nu:{maxBodyLength:B.maxBodyLength??Nu.maxBodyLength,maxStreamChunks:B.maxStreamChunks??Nu.maxStreamChunks}}function d0(A){let B={};for(let[F,Q]of Object.entries(A))wd.has(F.toLowerCase())?B[F]="***MASKED***":B[F]=Q;return B}function Bd(A,B){return A.length<=B?A:A.slice(0,B)+`...[truncated, total ${A.length} bytes]`}function qm(A,B,F){let Q=typeof F.body=="string"?F.body:JSON.stringify(F.body);A.info({debug_log:!0,reqId:B,phase:"provider_request",url:F.url,headers:d0(F.headers),body:Bd(Q,Nu.maxBodyLength)})}function Gm(A,B,F){A.info({debug_log:!0,reqId:B,phase:"provider_response",status:F.status,headers:d0(F.headers),...F.body!==void 0?{body:Bd(F.body,Nu.maxBodyLength)}:{}})}function h0(A,B,F,Q){let M=xd(Q);A.info({debug_log:!0,reqId:B,phase:"provider_stream_chunk",chunkIndex:F,...M?{usage_monitor:M}:{},data:Bd(Q,Nu.maxBodyLength)})}function xd(A){let B=[];for(let F of A.split(/\r?\n/)){if(!F.startsWith("data:"))continue;let Q=F.slice(5).trim();if(!(!Q||Q==="[DONE]"))try{let M=JSON.parse(Q),O=M?.usage||M?.response?.usage;O&&B.push({path:M?.usage?"usage":"response.usage",usage:O,choicesLength:Array.isArray(M?.choices)?M.choices.length:void 0,finishReason:M?.choices?.[0]?.finish_reason})}catch{B.push({parseError:!0,data:Bd(Q,512)})}}if(B.length)return B.length===1?B[0]:B}function f0(A,B,F){A.info({debug_log:!0,reqId:B,phase:"provider_stream_end",totalChunks:F})}function A0(A,B,F,Q){(async()=>{let M=A.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<Q.maxStreamChunks?h0(B,F,O,te):O===Q.maxStreamChunks&&B.info({debug_log:!0,reqId:F,phase:"provider_stream_chunk_omitted",message:`[chunks after #${O} omitted, maxStreamChunks=${Q.maxStreamChunks}]`}),O++)}G.trim()&&(O<Q.maxStreamChunks&&h0(B,F,O,G.trim()),O++),f0(B,F,O)}catch(G){console.error(`[debug_log] Error reading debug stream for reqId=${F}:`,G),f0(B,F,O)}finally{M.releaseLock()}})()}var p0="2.3.0";de();var Ou=require("fs"),Sd=require("path"),Fd=Ta(),qs=(0,Sd.join)(Fd.HOME_DIR,"runtime"),wl=(0,Sd.join)(qs,"rate-limit.json"),Il=new Map,g0=!1,kd=null,m0=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],Vm=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],E0=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function df(A,B,F){let Q=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=hf(Q,m0),O=hf(Q,Vm),G=hf(Q,E0);(M||O||G)&&Il.set(A,{provider:A,remaining:y0(M),limit:y0(O),reset:zm(G),capturedAt:Date.now()})}function Jm(A){return Il.get(A)}function Ym(){return Array.from(Il.values())}function hf(A,B){for(let F of B){let Q=A(F);if(Q)return Q}return null}function y0(A){if(!A)return null;let B=Number(A.trim().replace(/,/g,""));return Number.isFinite(B)?B:null}function zm(A){if(!A)return null;let B=A.trim();if(!B)return null;let F=Number(B);if(Number.isFinite(F))return F>1e12?Math.floor(F/1e3):F>1e9?Math.floor(F):Math.floor(Date.now()/1e3+F);let Q=Date.parse(B);if(Number.isFinite(Q))return Math.floor(Q/1e3);let M=Td(B);return M===null?null:Math.floor((Date.now()+M)/1e3)}function Td(A){let B=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,F=0,Q=!1;for(let M of A.matchAll(B)){Q=!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 Q?F:null}function ff(){try{if(!(0,Ou.existsSync)(wl))return;let A=JSON.parse((0,Ou.readFileSync)(wl,"utf-8"));if(!Array.isArray(A))return;let B=Date.now();for(let F of A)if(F&&F.provider){if(F.capturedAt&&B-F.capturedAt>3600*1e3)continue;Il.set(F.provider,F)}}catch{}}function Pu(){try{if(Il.size===0)return;(0,Ou.existsSync)(qs)||(0,Ou.mkdirSync)(qs,{recursive:!0}),(0,Ou.writeFileSync)(wl,JSON.stringify(Array.from(Il.values()),null,2),"utf-8")}catch{}}function Af(){g0||(g0=!0,ff(),kd=setInterval(Pu,6e4),process.on("exit",Pu))}_();var H=class{name="openai-responses";endPoint="/v1/responses";getCacheReadInputTokens(A){return A?.cache_read_input_tokens??A?.input_tokens_details?.cached_tokens??A?.prompt_tokens_details?.cached_tokens??0}getCacheCreationInputTokens(A){return A?.cache_creation_input_tokens??A?.input_tokens_details?.cache_creation_tokens??A?.input_tokens_details?.cache_write_tokens??A?.prompt_tokens_details?.cache_creation_tokens??A?.prompt_tokens_details?.cache_write_tokens??0}buildResponsesUsage(A){let B=A?.input_tokens??A?.prompt_tokens??0,F=A?.output_tokens??A?.completion_tokens??0,Q=this.getCacheReadInputTokens(A),M=this.getCacheCreationInputTokens(A);return{input_tokens:B,output_tokens:F,total_tokens:A?.total_tokens??B+F,input_tokens_details:{cached_tokens:Q,cache_creation_tokens:M},output_tokens_details:{reasoning_tokens:A?.output_tokens_details?.reasoning_tokens??0},cache_read_input_tokens:Q,cache_creation_input_tokens:M}}async transformRequestIn(A){delete A.temperature,delete A.max_tokens,A.reasoning&&(A.reasoning={effort:A.reasoning.effort,summary:"detailed"});let B=[],F=A.messages.filter(Q=>Q.role==="system");if(F.length>0){let Q=F[0];Array.isArray(Q.content)?Q.content.forEach(M=>{let O="";typeof M=="string"?O=M:M&&typeof M=="object"&&"text"in M&&(O=M.text),B.push({role:"system",content:O})}):A.instructions=Q.content}if(A.messages.forEach(Q=>{if(Q.role!=="system"){if(Array.isArray(Q.content)){let M=Q.content.map(O=>this.normalizeRequestContent(O,Q.role)).filter(O=>O!==null);M.length>0?Q.content=M:delete Q.content}if(Q.role==="tool"){let M={...Q};M.type="function_call_output",M.call_id=Q.tool_call_id,M.output=Q.content,delete M.cache_control,delete M.role,delete M.tool_call_id,delete M.content,B.push(M);return}if(Q.role==="assistant"&&Array.isArray(Q.tool_calls)){Q.tool_calls.forEach(M=>{B.push({type:"function_call",arguments:M.function.arguments,name:M.function.name,call_id:M.id})});return}B.push(Q)}}),A.input=B,delete A.messages,Array.isArray(A.tools)){let Q=A.tools.find(M=>M.function.name==="web_search");A.tools=A.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})),Q&&A.tools.push({type:"web_search"})}return A.parallel_tool_calls=!1,A}async transformResponseOut(A){let B=A.headers.get("Content-Type")||"";if(B.includes("application/json")){let F=await A.json();if(F.object==="response"&&F.output){let Q=this.convertResponseToChat(F);return new Response(JSON.stringify(Q),{status:A.status,statusText:A.statusText,headers:A.headers})}return F.type==="message"&&Array.isArray(F.content)?new Response(JSON.stringify(F),{status:A.status,statusText:A.statusText,headers:A.headers}):new Response(JSON.stringify(F),{status:A.status,statusText:A.statusText,headers:A.headers})}else if(B.includes("text/event-stream")){if(!A.body)return A;let[F,Q]=A.body.tee(),M=F.getReader(),O="";try{let{value:K,done:le}=await M.read();!le&&K&&(O=new TextDecoder().decode(K))}finally{M.releaseLock()}if(F.cancel().catch(()=>{}),O.includes("message_start")||O.includes("content_block_start")){let K=this.prependToStream(O,Q);return new Response(K,{status:A.status,statusText:A.statusText,headers:A.headers})}if(O.includes("response.created")||O.includes("response.output_text.delta")||O.includes("response.in_progress")||O.includes("response.output_item.added")){let K=this.prependToStream(O,Q);return new Response(K,{status:A.status,statusText:A.statusText,headers:A.headers})}let G=this.prependToStream(O,Q),J=new TextDecoder,ne=new TextEncoder,z="",te=!1,ie=this,ce=new ReadableStream({async start(K){let le=G.getReader(),pe=-1,be="",De=we=>(we!==be&&(pe++,be=we),pe);try{for(;;){let{done:we,value:xe}=await le.read();if(we){te||K.enqueue(ne.encode(`data: [DONE]
634
+ `);G=z.pop()||"";for(let te of z)te.trim()&&(O<Q.maxStreamChunks?h0(B,F,O,te):O===Q.maxStreamChunks&&B.info({debug_log:!0,reqId:F,phase:"provider_stream_chunk_omitted",message:`[chunks after #${O} omitted, maxStreamChunks=${Q.maxStreamChunks}]`}),O++)}G.trim()&&(O<Q.maxStreamChunks&&h0(B,F,O,G.trim()),O++),f0(B,F,O)}catch(G){console.error(`[debug_log] Error reading debug stream for reqId=${F}:`,G),f0(B,F,O)}finally{M.releaseLock()}})()}var p0="2.3.1";de();var Ou=require("fs"),Sd=require("path"),Fd=Ta(),qs=(0,Sd.join)(Fd.HOME_DIR,"runtime"),wl=(0,Sd.join)(qs,"rate-limit.json"),Il=new Map,g0=!1,kd=null,m0=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],Vm=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],E0=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function df(A,B,F){let Q=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=hf(Q,m0),O=hf(Q,Vm),G=hf(Q,E0);(M||O||G)&&Il.set(A,{provider:A,remaining:y0(M),limit:y0(O),reset:zm(G),capturedAt:Date.now()})}function Jm(A){return Il.get(A)}function Ym(){return Array.from(Il.values())}function hf(A,B){for(let F of B){let Q=A(F);if(Q)return Q}return null}function y0(A){if(!A)return null;let B=Number(A.trim().replace(/,/g,""));return Number.isFinite(B)?B:null}function zm(A){if(!A)return null;let B=A.trim();if(!B)return null;let F=Number(B);if(Number.isFinite(F))return F>1e12?Math.floor(F/1e3):F>1e9?Math.floor(F):Math.floor(Date.now()/1e3+F);let Q=Date.parse(B);if(Number.isFinite(Q))return Math.floor(Q/1e3);let M=Td(B);return M===null?null:Math.floor((Date.now()+M)/1e3)}function Td(A){let B=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/gi,F=0,Q=!1;for(let M of A.matchAll(B)){Q=!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 Q?F:null}function ff(){try{if(!(0,Ou.existsSync)(wl))return;let A=JSON.parse((0,Ou.readFileSync)(wl,"utf-8"));if(!Array.isArray(A))return;let B=Date.now();for(let F of A)if(F&&F.provider){if(F.capturedAt&&B-F.capturedAt>3600*1e3)continue;Il.set(F.provider,F)}}catch{}}function Pu(){try{if(Il.size===0)return;(0,Ou.existsSync)(qs)||(0,Ou.mkdirSync)(qs,{recursive:!0}),(0,Ou.writeFileSync)(wl,JSON.stringify(Array.from(Il.values()),null,2),"utf-8")}catch{}}function Af(){g0||(g0=!0,ff(),kd=setInterval(Pu,6e4),process.on("exit",Pu))}_();var H=class{name="openai-responses";endPoint="/v1/responses";getCacheReadInputTokens(A){return A?.cache_read_input_tokens??A?.input_tokens_details?.cached_tokens??A?.prompt_tokens_details?.cached_tokens??0}getCacheCreationInputTokens(A){return A?.cache_creation_input_tokens??A?.input_tokens_details?.cache_creation_tokens??A?.input_tokens_details?.cache_write_tokens??A?.prompt_tokens_details?.cache_creation_tokens??A?.prompt_tokens_details?.cache_write_tokens??0}buildResponsesUsage(A){let B=A?.input_tokens??A?.prompt_tokens??0,F=A?.output_tokens??A?.completion_tokens??0,Q=this.getCacheReadInputTokens(A),M=this.getCacheCreationInputTokens(A);return{input_tokens:B,output_tokens:F,total_tokens:A?.total_tokens??B+F,input_tokens_details:{cached_tokens:Q,cache_creation_tokens:M},output_tokens_details:{reasoning_tokens:A?.output_tokens_details?.reasoning_tokens??0},cache_read_input_tokens:Q,cache_creation_input_tokens:M}}async transformRequestIn(A){delete A.temperature,delete A.max_tokens,A.reasoning&&(A.reasoning={effort:A.reasoning.effort,summary:"detailed"});let B=[],F=A.messages.filter(Q=>Q.role==="system");if(F.length>0){let Q=F[0];Array.isArray(Q.content)?Q.content.forEach(M=>{let O="";typeof M=="string"?O=M:M&&typeof M=="object"&&"text"in M&&(O=M.text),B.push({role:"system",content:O})}):A.instructions=Q.content}if(A.messages.forEach(Q=>{if(Q.role!=="system"){if(Array.isArray(Q.content)){let M=Q.content.map(O=>this.normalizeRequestContent(O,Q.role)).filter(O=>O!==null);M.length>0?Q.content=M:delete Q.content}if(Q.role==="tool"){let M={...Q};M.type="function_call_output",M.call_id=Q.tool_call_id,M.output=Q.content,delete M.cache_control,delete M.role,delete M.tool_call_id,delete M.content,B.push(M);return}if(Q.role==="assistant"&&Array.isArray(Q.tool_calls)){Q.tool_calls.forEach(M=>{B.push({type:"function_call",arguments:M.function.arguments,name:M.function.name,call_id:M.id})});return}B.push(Q)}}),A.input=B,delete A.messages,Array.isArray(A.tools)){let Q=A.tools.find(M=>M.function.name==="web_search");A.tools=A.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})),Q&&A.tools.push({type:"web_search"})}return A.parallel_tool_calls=!1,A}async transformResponseOut(A){let B=A.headers.get("Content-Type")||"";if(B.includes("application/json")){let F=await A.json();if(F.object==="response"&&F.output){let Q=this.convertResponseToChat(F);return new Response(JSON.stringify(Q),{status:A.status,statusText:A.statusText,headers:A.headers})}return F.type==="message"&&Array.isArray(F.content)?new Response(JSON.stringify(F),{status:A.status,statusText:A.statusText,headers:A.headers}):new Response(JSON.stringify(F),{status:A.status,statusText:A.statusText,headers:A.headers})}else if(B.includes("text/event-stream")){if(!A.body)return A;let[F,Q]=A.body.tee(),M=F.getReader(),O="";try{let{value:K,done:le}=await M.read();!le&&K&&(O=new TextDecoder().decode(K))}finally{M.releaseLock()}if(F.cancel().catch(()=>{}),O.includes("message_start")||O.includes("content_block_start")){let K=this.prependToStream(O,Q);return new Response(K,{status:A.status,statusText:A.statusText,headers:A.headers})}if(O.includes("response.created")||O.includes("response.output_text.delta")||O.includes("response.in_progress")||O.includes("response.output_item.added")){let K=this.prependToStream(O,Q);return new Response(K,{status:A.status,statusText:A.statusText,headers:A.headers})}let G=this.prependToStream(O,Q),J=new TextDecoder,ne=new TextEncoder,z="",te=!1,ie=this,ce=new ReadableStream({async start(K){let le=G.getReader(),pe=-1,be="",De=we=>(we!==be&&(pe++,be=we),pe);try{for(;;){let{done:we,value:xe}=await le.read();if(we){te||K.enqueue(ne.encode(`data: [DONE]
635
635
 
636
636
  `));break}let me=J.decode(xe,{stream:!0});z+=me;let Fe=z.split(/\r?\n/);z=Fe.pop()||"";for(let $e of Fe)if($e.trim())try{if($e.startsWith("event: "))continue;if($e.startsWith("data: ")){let We=$e.slice(5).trim();if(We==="[DONE]"){te=!0,K.enqueue(ne.encode(`data: [DONE]
637
637
 
@@ -998,7 +998,7 @@ ${this.toMarkdown(n,t+1)}`:`${r}- ${n}`).join(`
998
998
  ${this.toMarkdown(i,t+1)}`:`${r}${n}: ${i}`).join(`
999
999
  `):`${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}}}}),JS,YS=Ci(()=>{"use strict";JS=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}`)}}}}),zS,WS=Ci(()=>{"use strict";zS=class{type="temp-file";config;baseDir;constructor(e={}){this.config={subdirectory:"claude-code-router",extension:"json",includeTimestamp:!1,prefix:"session",...e};let t=(0,bj.tmpdir)();this.baseDir=(0,KI.join)(t,this.config.subdirectory),this.ensureDir()}ensureDir(){try{(0,cy.existsSync)(this.baseDir)||(0,cy.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,KI.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,cy.writeFileSync)(i,JSON.stringify(n,null,2),"utf-8"),!0}catch{return!1}}getBaseDir(){return this.baseDir}}}),w_,iA,Z$=Ci(()=>{"use strict";VS(),YS(),WS(),w_=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 GS(e.config);case"webhook":return new JS(e.config);case"temp-file":return new zS(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)}},iA=new w_}),X$=zl(kx(),1),I_=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,ZI.join)(process.cwd(),this.options.jsonPath);if((0,dy.existsSync)(e))try{let t=(0,dy.readFileSync)(e,"utf-8"),r=X$.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,ZI.join)(process.cwd(),this.options.envPath);if((0,dy.existsSync)(e))try{let t=(0,_j.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 vo(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 e7(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 t7(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 vj.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 r7=new Set(["authorization","x-api-key","x-goog-api-key","cookie","set-cookie"]),ph={maxBodyLength:4096,maxStreamChunks:100},aD=!1;function n7(e){aD=e}function __(){return aD}function rC(e){return aD||e.get("DEBUG_LOG")===!0}function i7(e){let t=e.get("DEBUG_LOG_OPTIONS");return!t||typeof t!="object"?ph:{maxBodyLength:t.maxBodyLength??ph.maxBodyLength,maxStreamChunks:t.maxStreamChunks??ph.maxStreamChunks}}function KS(e){let t={};for(let[r,n]of Object.entries(e))r7.has(r.toLowerCase())?t[r]="***MASKED***":t[r]=n;return t}function Og(e,t){return e.length<=t?e:e.slice(0,t)+`...[truncated, total ${e.length} bytes]`}function o7(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:KS(r.headers),body:Og(n,ph.maxBodyLength)})}function s7(e,t,r){e.info({debug_log:!0,reqId:t,phase:"provider_response",status:r.status,headers:KS(r.headers),...r.body!==void 0?{body:Og(r.body,ph.maxBodyLength)}:{}})}function v_(e,t,r,n){let i=a7(n);e.info({debug_log:!0,reqId:t,phase:"provider_stream_chunk",chunkIndex:r,...i?{usage_monitor:i}:{},data:Og(n,ph.maxBodyLength)})}function a7(e){let t=[];for(let r of e.split(/\r?\n/)){if(!r.startsWith("data:"))continue;let n=r.slice(5).trim();if(!(!n||n==="[DONE]"))try{let i=JSON.parse(n),o=i?.usage||i?.response?.usage;o&&t.push({path:i?.usage?"usage":"response.usage",usage:o,choicesLength:Array.isArray(i?.choices)?i.choices.length:void 0,finishReason:i?.choices?.[0]?.finish_reason})}catch{t.push({parseError:!0,data:Og(n,512)})}}if(t.length)return t.length===1?t[0]:t}function B_(e,t,r){e.info({debug_log:!0,reqId:t,phase:"provider_stream_end",totalChunks:r})}function u7(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(`
1000
1000
 
1001
- `);s=l.pop()||"";for(let c of l)c.trim()&&(o<n.maxStreamChunks?v_(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&&v_(t,r,o,s.trim()),o++),B_(t,r,o)}catch(s){console.error(`[debug_log] Error reading debug stream for reqId=${r}:`,s),B_(t,r,o)}finally{i.releaseLock()}})()}var l7="2.3.0";qc();var nC=(0,Bx.join)(Bj.HOME_DIR,"runtime"),iC=(0,Bx.join)(nC,"rate-limit.json"),lA=new Map,x_=!1,c7=null,d7=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],h7=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],f7=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function uD(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=Cy(n,d7),o=Cy(n,h7),s=Cy(n,f7);(i||o||s)&&lA.set(e,{provider:e,remaining:S_(i),limit:S_(o),reset:p7(s),capturedAt:Date.now()})}function A7(){return Array.from(lA.values())}function Cy(e,t){for(let r of t){let n=e(r);if(n)return n}return null}function S_(e){if(!e)return null;let t=Number(e.trim().replace(/,/g,""));return Number.isFinite(t)?t:null}function p7(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=g7(t);return i===null?null:Math.floor((Date.now()+i)/1e3)}function g7(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 m7(){try{if(!(0,rA.existsSync)(iC))return;let e=JSON.parse((0,rA.readFileSync)(iC,"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;lA.set(r.provider,r)}}catch{}}function F_(){try{if(lA.size===0)return;(0,rA.existsSync)(nC)||(0,rA.mkdirSync)(nC,{recursive:!0}),(0,rA.writeFileSync)(iC,JSON.stringify(Array.from(lA.values()),null,2),"utf-8")}catch{}}function E7(){x_||(x_=!0,m7(),c7=setInterval(F_,6e4),process.on("exit",F_))}KC();var ZS=class{name="openai-responses";endPoint="/v1/responses";getCacheReadInputTokens(e){return e?.cache_read_input_tokens??e?.input_tokens_details?.cached_tokens??e?.prompt_tokens_details?.cached_tokens??0}getCacheCreationInputTokens(e){return e?.cache_creation_input_tokens??e?.input_tokens_details?.cache_creation_tokens??e?.input_tokens_details?.cache_write_tokens??e?.prompt_tokens_details?.cache_creation_tokens??e?.prompt_tokens_details?.cache_write_tokens??0}buildResponsesUsage(e){let t=e?.input_tokens??e?.prompt_tokens??0,r=e?.output_tokens??e?.completion_tokens??0,n=this.getCacheReadInputTokens(e),i=this.getCacheCreationInputTokens(e);return{input_tokens:t,output_tokens:r,total_tokens:e?.total_tokens??t+r,input_tokens_details:{cached_tokens:n,cache_creation_tokens:i},output_tokens_details:{reasoning_tokens:e?.output_tokens_details?.reasoning_tokens??0},cache_read_input_tokens:n,cache_creation_input_tokens:i}}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 r.type==="message"&&Array.isArray(r.content)?new Response(JSON.stringify(r),{status:e.status,statusText:e.statusText,headers:e.headers}):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,n]=e.body.tee(),i=r.getReader(),o="";try{let{value:f,done:p}=await i.read();!p&&f&&(o=new TextDecoder().decode(f))}finally{i.releaseLock()}if(r.cancel().catch(()=>{}),o.includes("message_start")||o.includes("content_block_start")){let f=this.prependToStream(o,n);return new Response(f,{status:e.status,statusText:e.statusText,headers:e.headers})}if(o.includes("response.created")||o.includes("response.output_text.delta")||o.includes("response.in_progress")||o.includes("response.output_item.added")){let f=this.prependToStream(o,n);return new Response(f,{status:e.status,statusText:e.statusText,headers:e.headers})}let s=this.prependToStream(o,n),a=new TextDecoder,u=new TextEncoder,l="",c=!1,d=this,h=new ReadableStream({async start(f){let p=s.getReader(),g=-1,E="",m=D=>(D!==E&&(g++,E=D),g);try{for(;;){let{done:D,value:y}=await p.read();if(D){c||f.enqueue(u.encode(`data: [DONE]
1001
+ `);s=l.pop()||"";for(let c of l)c.trim()&&(o<n.maxStreamChunks?v_(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&&v_(t,r,o,s.trim()),o++),B_(t,r,o)}catch(s){console.error(`[debug_log] Error reading debug stream for reqId=${r}:`,s),B_(t,r,o)}finally{i.releaseLock()}})()}var l7="2.3.1";qc();var nC=(0,Bx.join)(Bj.HOME_DIR,"runtime"),iC=(0,Bx.join)(nC,"rate-limit.json"),lA=new Map,x_=!1,c7=null,d7=["x-ratelimit-remaining-tokens","x-ratelimit-remaining-requests","x-ratelimit-remaining"],h7=["x-ratelimit-limit-tokens","x-ratelimit-limit-requests","x-ratelimit-limit"],f7=["x-ratelimit-reset-tokens","x-ratelimit-reset-requests","x-ratelimit-reset"];function uD(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=Cy(n,d7),o=Cy(n,h7),s=Cy(n,f7);(i||o||s)&&lA.set(e,{provider:e,remaining:S_(i),limit:S_(o),reset:p7(s),capturedAt:Date.now()})}function A7(){return Array.from(lA.values())}function Cy(e,t){for(let r of t){let n=e(r);if(n)return n}return null}function S_(e){if(!e)return null;let t=Number(e.trim().replace(/,/g,""));return Number.isFinite(t)?t:null}function p7(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=g7(t);return i===null?null:Math.floor((Date.now()+i)/1e3)}function g7(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 m7(){try{if(!(0,rA.existsSync)(iC))return;let e=JSON.parse((0,rA.readFileSync)(iC,"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;lA.set(r.provider,r)}}catch{}}function F_(){try{if(lA.size===0)return;(0,rA.existsSync)(nC)||(0,rA.mkdirSync)(nC,{recursive:!0}),(0,rA.writeFileSync)(iC,JSON.stringify(Array.from(lA.values()),null,2),"utf-8")}catch{}}function E7(){x_||(x_=!0,m7(),c7=setInterval(F_,6e4),process.on("exit",F_))}KC();var ZS=class{name="openai-responses";endPoint="/v1/responses";getCacheReadInputTokens(e){return e?.cache_read_input_tokens??e?.input_tokens_details?.cached_tokens??e?.prompt_tokens_details?.cached_tokens??0}getCacheCreationInputTokens(e){return e?.cache_creation_input_tokens??e?.input_tokens_details?.cache_creation_tokens??e?.input_tokens_details?.cache_write_tokens??e?.prompt_tokens_details?.cache_creation_tokens??e?.prompt_tokens_details?.cache_write_tokens??0}buildResponsesUsage(e){let t=e?.input_tokens??e?.prompt_tokens??0,r=e?.output_tokens??e?.completion_tokens??0,n=this.getCacheReadInputTokens(e),i=this.getCacheCreationInputTokens(e);return{input_tokens:t,output_tokens:r,total_tokens:e?.total_tokens??t+r,input_tokens_details:{cached_tokens:n,cache_creation_tokens:i},output_tokens_details:{reasoning_tokens:e?.output_tokens_details?.reasoning_tokens??0},cache_read_input_tokens:n,cache_creation_input_tokens:i}}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 r.type==="message"&&Array.isArray(r.content)?new Response(JSON.stringify(r),{status:e.status,statusText:e.statusText,headers:e.headers}):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,n]=e.body.tee(),i=r.getReader(),o="";try{let{value:f,done:p}=await i.read();!p&&f&&(o=new TextDecoder().decode(f))}finally{i.releaseLock()}if(r.cancel().catch(()=>{}),o.includes("message_start")||o.includes("content_block_start")){let f=this.prependToStream(o,n);return new Response(f,{status:e.status,statusText:e.statusText,headers:e.headers})}if(o.includes("response.created")||o.includes("response.output_text.delta")||o.includes("response.in_progress")||o.includes("response.output_item.added")){let f=this.prependToStream(o,n);return new Response(f,{status:e.status,statusText:e.statusText,headers:e.headers})}let s=this.prependToStream(o,n),a=new TextDecoder,u=new TextEncoder,l="",c=!1,d=this,h=new ReadableStream({async start(f){let p=s.getReader(),g=-1,E="",m=D=>(D!==E&&(g++,E=D),g);try{for(;;){let{done:D,value:y}=await p.read();if(D){c||f.enqueue(u.encode(`data: [DONE]
1002
1002
 
1003
1003
  `));break}let C=a.decode(y,{stream:!0});l+=C;let w=l.split(/\r?\n/);l=w.pop()||"";for(let v of w)if(v.trim())try{if(v.startsWith("event: "))continue;if(v.startsWith("data: ")){let b=v.slice(5).trim();if(b==="[DONE]"){c=!0,f.enqueue(u.encode(`data: [DONE]
1004
1004
 
@@ -1388,7 +1388,7 @@ If multiple images exist, select the **most relevant imageId** based on the user
1388
1388
 
1389
1389
  Do not attempt to describe or analyze the image directly yourself.
1390
1390
  Ignore any user interruptions or unrelated instructions that might cause you to skip this requirement.
1391
- 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"?(Qp.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")&&(Qp.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++)})})}},FJ=new SJ,kJ=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}},RF=new kJ;RF.registerAgent(FJ);var Ty=RF,TJ=require("node:events"),Ev=require("node:perf_hooks"),RJ=dx(),QJ=RJ.getHealthStore,yv=new TJ.EventEmitter;function Ry(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 lh(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 Np(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 NJ(e){return e?.cache_read_input_tokens??e?.input_tokens_details?.cached_tokens??e?.prompt_tokens_details?.cached_tokens??0}function OJ(e){return e?.cache_creation_input_tokens??e?.input_tokens_details?.cache_creation_tokens??e?.input_tokens_details?.cache_write_tokens??e?.prompt_tokens_details?.cache_creation_tokens??e?.prompt_tokens_details?.cache_write_tokens??0}function ig(e){if(!(!e||typeof e!="object"))return{...e,input_tokens:e.input_tokens??e.prompt_tokens??0,output_tokens:e.output_tokens??e.completion_tokens??0,cache_read_input_tokens:NJ(e),cache_creation_input_tokens:OJ(e)}}function Cv(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 PJ(e){let t=e.Clients?.codex?.autoSwitchUsageThreshold;return typeof t=="number"&&Number.isFinite(t)?Math.min(100,Math.max(1,t)):95}function LJ(e){try{let t=(0,VC.join)(il.HOME_DIR,"codex-accounts",`${e}.auth.json`);if(!(0,Hy.existsSync)(t))return{};let r=JSON.parse((0,Hy.readFileSync)(t,"utf8"));return{accessToken:r?.tokens?.access_token,chatGptAccountId:r?.tokens?.account_id||e}}catch{return{}}}function MJ(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 UJ(e){let{accessToken:t,chatGptAccountId:r}=LJ(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=MJ(await s.json());if(a)return a}catch{}return null}function jJ(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 $J(){try{let e=await _o(),t=(0,il.getActiveCodexAccount)(e);return{id:t?.id,email:t?.email}}catch{return{}}}async function HJ(){try{let e=await _o();if((e.Clients?.codex||{}).autoSwitchAccounts===!1)return;let t=PJ(e),r=Math.max(1,(0,il.listCodexAccounts)(e).accounts.length);for(let n=0;n<r;n+=1){let i=(0,il.getActiveCodexAccount)(e);if(!i?.id)return;let o=await UJ(i.id);if(!o)return;let s=jJ(o,t);if(!s)return;let a=`Codex ${s.window} usage reached ${Math.round(s.used)}% (auto-switch threshold ${t}%)`,u=(0,il.markActiveCodexAccountLimitedAndSwitch)(e,a,s.retryAfterSeconds);if(await Fa(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 Dv(e){try{let t=await _o();if((t.Clients?.codex||{}).autoSwitchAccounts===!1)return;let r=(0,il.markActiveCodexAccountLimitedAndSwitch)(t,e);await Fa(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 qJ(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 ig(t.usage);if(t.response?.usage)return ig(t.response.usage)}}async function GJ(){let e=(0,_x.homedir)(),t=(0,VC.join)(e,".claude.json");if(!(0,Hy.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,fj.writeFile)(t,JSON.stringify(r,null,2))}}async function VJ(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":lC.registerPlugin(yF,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:console.warn(`Unknown plugin: ${i}`);break}}await lC.enablePlugins(e)}async function QF(e={}){await GJ(),await JC();let t=await vx(),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=h=>(h>9?"":"0")+h,u=(h,f)=>{let p;h?typeof h=="number"?p=new Date(h):p=h:p=new Date;let g=p.getFullYear()+""+a(p.getMonth()+1),E=a(p.getDate()),m=a(p.getHours()),D=a(p.getMinutes());return`./logs/ccr-${g}${E}${m}${D}${a(p.getSeconds())}${f?`_${f}`:""}.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:DJ(u,{path:il.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,il.listPresets)(),d=await sJ({jsonPath:il.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:i,PORT:s,LOG_FILE:(0,VC.join)((0,_x.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return d.recordUsage=h=>{try{let f=h.req?Np(h.req):"unknown";f==="codex"&&Cv(0,h.errorMessage)&&Dv(h.errorMessage),av({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:h.sessionId||"",provider:h.provider||"",originalModel:h.originalModel||"",model:h.model||"",modelFamily:h.modelFamily||"",scenarioType:h.scenarioType||"default",clientType:f,codexAccountId:h.req?.codexAccountId,codexAccountEmail:h.req?.codexAccountEmail,stream:h.stream??!1,inputTokens:h.inputTokens||0,outputTokens:0,cacheReadInputTokens:h.cacheReadInputTokens||0,cacheCreationInputTokens:h.cacheCreationInputTokens||0,ttft:null,tokensPerSecond:null,durationMs:0,status:"error",errorMessage:h.errorMessage,responseBody:void 0})}catch(f){console.error("Fallback usage tracking error:",f)}},await Promise.allSettled(c.map(async h=>await d.registerNamespace(`/preset/${h.name}`,h.config))),await VJ(d,t),d.addHook("onRequest",async h=>{let f=new URL(`http://127.0.0.1${h.url}`);(f.pathname.endsWith("/v1/messages")||f.pathname.endsWith("/v1/responses"))&&!h.requestStartTime&&(h.requestStartTime=Ev.performance.now())}),d.addHook("preHandler",async(h,f)=>{let p=new URL(`http://127.0.0.1${h.url}`);if(p.pathname.endsWith("/v1/messages")||p.pathname.endsWith("/v1/responses")){let g=Ry(h);$l.put(g,{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0})}}),d.addHook("preHandler",async(h,f)=>new Promise((p,g)=>{let E=m=>{m?g(m):p()};uJ(t)(h,f,E).catch(g)})),d.addHook("preHandler",async(h,f)=>{let p=new URL(`http://127.0.0.1${h.url}`);if(h.pathname=p.pathname,h.pathname.endsWith("/v1/messages")&&h.pathname!=="/v1/messages"&&(h.preset=h.pathname.replace("/v1/messages","").replace("/","")),h.pathname.endsWith("/v1/responses")&&h.pathname!=="/v1/responses"&&(h.preset=h.pathname.replace("/v1/responses","").replace("/","")),(h.pathname.endsWith("/v1/messages")||h.pathname.endsWith("/v1/responses"))&&Np(h)==="codex"){await HJ();let g=await $J();h.codexAccountId=g.id,h.codexAccountEmail=g.email}}),d.addHook("preHandler",async(h,f)=>{if(h.pathname.endsWith("/v1/messages")){let p=[];for(let g of Ty.getAllAgents())g.shouldHandle(h,t)&&(p.push(g.name),g.reqHandler(h,t),g.tools.size&&(h.body?.tools?.length||(h.body.tools=[]),h.body.tools.unshift(...Array.from(g.tools.values()).map(E=>({name:E.name,description:E.description,input_schema:E.input_schema})))));p.length&&(h.agents=p)}}),d.addHook("onError",async(h,f,p)=>{h.errorMessage=p?.message||p?.toString?.()||"Unknown error",yv.emit("onError",h,f,p)}),d.addHook("onSend",(h,f,p,g)=>{let E=h.pathname?.endsWith("/v1/messages"),m=h.pathname?.endsWith("/v1/responses");if(E||m){let D=Ry(h);if(p instanceof ReadableStream){if(E&&h.agents){let v=new AbortController,b=p.pipeThrough(new ky),I,_=-1,S="",x="",k="",R=[],P=[];return g(null,wJ(b,async(T,N)=>{try{if(T.event==="content_block_start"&&T?.data?.content_block?.name){let j=h.agents.find(Y=>Ty.getAgent(Y)?.tools.get(T.data.content_block.name));if(j){I=Ty.getAgent(j),_=T.data.index,S=T.data.content_block.name,k=T.data.content_block.id;return}}if(_>-1&&T.data.index===_&&T.data?.delta?.type==="input_json_delta"){x+=T.data?.delta?.partial_json;return}if(_>-1&&T.data.index===_&&T.data.type==="content_block_stop"){try{let j=IJ.default.parse(x);P.push({type:"tool_use",id:k,name:S,input:j});let Y=await I?.tools.get(S)?.handler(j,{req:h,config:t});R.push({tool_use_id:k,type:"tool_result",content:Y}),I=void 0,_=-1,S="",x="",k=""}catch(j){console.log(j)}return}if(T.event==="message_delta"&&R.length){h.body.messages.push({role:"assistant",content:P}),h.body.messages.push({role:"user",content:R});let j=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(h.body)});if(!j.ok)return;let Y=j.body.pipeThrough(new ky).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"){v.abort();break}throw Z}return}return T}catch(j){if(console.error("Unexpected error in stream processing:",j),j.code==="ERR_STREAM_PREMATURE_CLOSE"){v.abort();return}throw j}}).pipeThrough(new bJ))}let[C,w]=p.tee();return(async v=>{let b=v.pipeThrough(new TextDecoderStream).pipeThrough(new ky).getReader();try{for(;;){let{done:I,value:_}=await b.read();if(I)break;let S=_.event,x=_.data;if(x?.usage){let k=$l.get(D)||{},R=ig(x.usage),P={...S==="message_start"?{}:k,...R};h.log?.info?.({debug_log:!0,reqId:h.id,phase:"usage_capture_anthropic_sse",event:S,provider:h.provider,model:lh(h),usageSessionId:D,capturedUsage:R,mergedUsage:P}),(R?.cache_read_input_tokens||R?.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:R?.cache_read_input_tokens,cache_creation:R?.cache_creation_input_tokens}),$l.put(D,P)}if(x?.response?.usage){let k=ig(x.response.usage),R=S==="response.completed"?{}:$l.get(D)||{},P={...R,input_tokens:k?.input_tokens||0,output_tokens:k?.output_tokens||0,cache_read_input_tokens:k?.cache_read_input_tokens??R.cache_read_input_tokens??0,cache_creation_input_tokens:k?.cache_creation_input_tokens??R.cache_creation_input_tokens??0};h.log?.info?.({debug_log:!0,reqId:h.id,phase:"usage_capture_responses_sse",event:S,provider:h.provider,model:lh(h),usageSessionId:D,capturedUsage:k,mergedUsage:P}),$l.put(D,P)}}}catch(I){I.name==="AbortError"||I.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",I)}finally{b.releaseLock()}})(w),g(null,C)}let y=qJ(p);if(y&&$l.put(D,y),typeof p=="object")return p.error?g(p.error,null):g(p,null)}if(typeof p=="object"&&p.error)return g(p.error,null);g(null,p)}),d.addHook("onSend",async(h,f,p)=>{if(yv.emit("onSend",h,f,p),f.statusCode>=400&&(h.pathname?.endsWith("/v1/messages")||h.pathname?.endsWith("/v1/responses")))try{typeof p=="string"?h.errorResponseBody=p:p&&typeof p=="object"&&(h.errorResponseBody=JSON.stringify(p))}catch{}return p}),d.addHook("onResponse",async(h,f)=>{if(!(!h.pathname?.endsWith("/v1/messages")&&!h.pathname?.endsWith("/v1/responses")))try{let p=Ry(h),g=$l.get(p),E=qV(p),m=QJ(),D,y,C=h.sseError,w=C&&(C.type||C.code||C.message),v=g?.output_tokens&&g.output_tokens>0,b=f.statusCode>=400||w&&!v;if(b){D=h.errorMessage||f.errorMessage||h.error?.message||h.error?.toString?.()||void 0,w&&(D=D||JSON.stringify(C),y=JSON.stringify(C)),y=y||h.errorResponseBody;let x=lh(h);Cv(f.statusCode,D)?(m.markRateLimited(h.provider||"",x,120,D),Np(h)==="codex"&&await Dv(D)):m.recordFailure(h.provider||"",x,D)}else{let x=lh(h);m.recordSuccess(h.provider||"",x)}let I=g?.cache_read_input_tokens??0,_=g?.input_tokens??h.tokenCount??0;!I&&h.tokenCount&&g?.input_tokens&&g.input_tokens<h.tokenCount&&(I=h.tokenCount-g.input_tokens,I&&console.log("[Usage] Inferred cache tokens:",{tokenCount:h.tokenCount,netInput:g.input_tokens,impliedCache:I}));let S=b?0:g?.output_tokens||0;!b&&h.body?.stream&&_===0&&S===0&&h.log?.warn?.({debug_log:!0,reqId:h.id,phase:"usage_zero_stream",provider:h.provider,originalModel:h.originalModel||h.body?.model||"",model:lh(h),usageSessionId:p,tokenCount:h.tokenCount,cachedUsage:g,note:"Successful streaming request ended with zero usage. Check provider_stream_chunk usage_monitor and usage_capture_* logs."}),av({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:p,provider:h.provider||"",originalModel:h.originalModel||h.body?.model||"",model:lh(h),modelFamily:h.modelFamily||"",scenarioType:h.scenarioType||"default",clientType:Np(h),codexAccountId:h.codexAccountId,codexAccountEmail:h.codexAccountEmail,stream:h.body?.stream??!1,inputTokens:_,outputTokens:S,cacheReadInputTokens:I,cacheCreationInputTokens:g?.cache_creation_input_tokens||0,ttft:b?null:E.ttft,tokensPerSecond:b?null:E.tokensPerSecond,durationMs:h.requestStartTime?Math.round(Ev.performance.now()-h.requestStartTime):0,status:b?"error":"success",errorMessage:D,responseBody:y})}catch(p){console.error("Usage tracking error:",p)}}),process.on("uncaughtException",h=>{d.app.log.error("Uncaught exception:",h)}),process.on("unhandledRejection",(h,f)=>{d.app.log.error("Unhandled rejection at:",f,"reason:",h)}),d}async function JJ(){let e=await QF();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===hD&&JJ().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function MF(e){try{let{stdout:t}=await LF("npm view claude-code-router-next version"),r=t.trim();return{hasUpdate:YJ(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function UF(){try{let{stdout:e,stderr:t}=await LF("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 YJ(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 OF,PF,LF,jF=sp(()=>{"use strict";OF=require("child_process"),PF=require("util"),LF=(0,PF.promisify)(OF.exec)});var $g,fD=sp(()=>{$g="2.3.0"});var pD=Rr(AD=>{"use strict";Object.defineProperty(AD,"__esModule",{value:!0});var $F=require("child_process"),WJ=1024*1024,HF={exec(e,t){let r={maxBuffer:2*WJ,windowsHide:!0};(0,$F.exec)(e,r,t)},spawn(e,t,r){return(0,$F.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
1391
+ 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"?(Qp.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")&&(Qp.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++)})})}},FJ=new SJ,kJ=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}},RF=new kJ;RF.registerAgent(FJ);var Ty=RF,TJ=require("node:events"),Ev=require("node:perf_hooks"),RJ=dx(),QJ=RJ.getHealthStore,yv=new TJ.EventEmitter;function Ry(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 lh(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 Np(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 NJ(e){return e?.cache_read_input_tokens??e?.input_tokens_details?.cached_tokens??e?.prompt_tokens_details?.cached_tokens??0}function OJ(e){return e?.cache_creation_input_tokens??e?.input_tokens_details?.cache_creation_tokens??e?.input_tokens_details?.cache_write_tokens??e?.prompt_tokens_details?.cache_creation_tokens??e?.prompt_tokens_details?.cache_write_tokens??0}function ig(e){if(!(!e||typeof e!="object"))return{...e,input_tokens:e.input_tokens??e.prompt_tokens??0,output_tokens:e.output_tokens??e.completion_tokens??0,cache_read_input_tokens:NJ(e),cache_creation_input_tokens:OJ(e)}}function Cv(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 PJ(e){let t=e.Clients?.codex?.autoSwitchUsageThreshold;return typeof t=="number"&&Number.isFinite(t)?Math.min(100,Math.max(1,t)):95}function LJ(e){try{let t=(0,VC.join)(il.HOME_DIR,"codex-accounts",`${e}.auth.json`);if(!(0,Hy.existsSync)(t))return{};let r=JSON.parse((0,Hy.readFileSync)(t,"utf8"));return{accessToken:r?.tokens?.access_token,chatGptAccountId:r?.tokens?.account_id||e}}catch{return{}}}function MJ(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 UJ(e){let{accessToken:t,chatGptAccountId:r}=LJ(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=MJ(await s.json());if(a)return a}catch{}return null}function jJ(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 $J(){try{let e=await _o(),t=(0,il.getActiveCodexAccount)(e);return{id:t?.id,email:t?.email}}catch{return{}}}async function HJ(){try{let e=await _o();if((e.Clients?.codex||{}).autoSwitchAccounts===!1)return;let t=PJ(e),r=Math.max(1,(0,il.listCodexAccounts)(e).accounts.length);for(let n=0;n<r;n+=1){let i=(0,il.getActiveCodexAccount)(e);if(!i?.id)return;let o=await UJ(i.id);if(!o)return;let s=jJ(o,t);if(!s)return;let a=`Codex ${s.window} usage reached ${Math.round(s.used)}% (auto-switch threshold ${t}%)`,u=(0,il.markActiveCodexAccountLimitedAndSwitch)(e,a,s.retryAfterSeconds);if(await Fa(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 Dv(e){try{let t=await _o();if((t.Clients?.codex||{}).autoSwitchAccounts===!1)return;let r=(0,il.markActiveCodexAccountLimitedAndSwitch)(t,e);await Fa(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 qJ(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 ig(t.usage);if(t.response?.usage)return ig(t.response.usage)}}async function GJ(){let e=(0,_x.homedir)(),t=(0,VC.join)(e,".claude.json");if(!(0,Hy.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,fj.writeFile)(t,JSON.stringify(r,null,2))}}async function VJ(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":lC.registerPlugin(yF,{enabled:o,outputHandlers:[{type:"temp-file",enabled:!0}],...s});break;default:console.warn(`Unknown plugin: ${i}`);break}}await lC.enablePlugins(e)}async function QF(e={}){await GJ(),await JC();let t=await vx(),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=h=>(h>9?"":"0")+h,u=(h,f)=>{let p;h?typeof h=="number"?p=new Date(h):p=h:p=new Date;let g=p.getFullYear()+""+a(p.getMonth()+1),E=a(p.getDate()),m=a(p.getHours()),D=a(p.getMinutes());return`./logs/ccr-${g}${E}${m}${D}${a(p.getSeconds())}${f?`_${f}`:""}.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:DJ(u,{path:il.HOME_DIR,maxFiles:3,interval:"1d",compress:!1,maxSize:"50M"})}):l=!1;let c=await(0,il.listPresets)(),d=await sJ({jsonPath:il.CONFIG_FILE,initialConfig:{providers:t.Providers||t.providers,HOST:i,PORT:s,LOG_FILE:(0,VC.join)((0,_x.homedir)(),".claude-code-router","claude-code-router.log")},logger:l});return d.recordUsage=h=>{try{let f=h.req?Np(h.req):"unknown";f==="codex"&&Cv(0,h.errorMessage)&&Dv(h.errorMessage),av({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:h.sessionId||"",provider:h.provider||"",originalModel:h.originalModel||"",model:h.model||"",modelFamily:h.modelFamily||"",scenarioType:h.scenarioType||"default",clientType:f,codexAccountId:h.req?.codexAccountId,codexAccountEmail:h.req?.codexAccountEmail,stream:h.stream??!1,inputTokens:h.inputTokens||0,outputTokens:0,cacheReadInputTokens:h.cacheReadInputTokens||0,cacheCreationInputTokens:h.cacheCreationInputTokens||0,ttft:null,tokensPerSecond:null,durationMs:0,status:"error",errorMessage:h.errorMessage,responseBody:void 0})}catch(f){console.error("Fallback usage tracking error:",f)}},await Promise.allSettled(c.map(async h=>await d.registerNamespace(`/preset/${h.name}`,h.config))),await VJ(d,t),d.addHook("onRequest",async h=>{let f=new URL(`http://127.0.0.1${h.url}`);(f.pathname.endsWith("/v1/messages")||f.pathname.endsWith("/v1/responses"))&&!h.requestStartTime&&(h.requestStartTime=Ev.performance.now())}),d.addHook("preHandler",async(h,f)=>{let p=new URL(`http://127.0.0.1${h.url}`);if(p.pathname.endsWith("/v1/messages")||p.pathname.endsWith("/v1/responses")){let g=Ry(h);$l.put(g,{input_tokens:0,output_tokens:0,cache_read_input_tokens:0,cache_creation_input_tokens:0})}}),d.addHook("preHandler",async(h,f)=>new Promise((p,g)=>{let E=m=>{m?g(m):p()};uJ(t)(h,f,E).catch(g)})),d.addHook("preHandler",async(h,f)=>{let p=new URL(`http://127.0.0.1${h.url}`);if(h.pathname=p.pathname,h.pathname.endsWith("/v1/messages")&&h.pathname!=="/v1/messages"&&(h.preset=h.pathname.replace("/v1/messages","").replace("/","")),h.pathname.endsWith("/v1/responses")&&h.pathname!=="/v1/responses"&&(h.preset=h.pathname.replace("/v1/responses","").replace("/","")),(h.pathname.endsWith("/v1/messages")||h.pathname.endsWith("/v1/responses"))&&Np(h)==="codex"){await HJ();let g=await $J();h.codexAccountId=g.id,h.codexAccountEmail=g.email}}),d.addHook("preHandler",async(h,f)=>{if(h.pathname.endsWith("/v1/messages")){let p=[];for(let g of Ty.getAllAgents())g.shouldHandle(h,t)&&(p.push(g.name),g.reqHandler(h,t),g.tools.size&&(h.body?.tools?.length||(h.body.tools=[]),h.body.tools.unshift(...Array.from(g.tools.values()).map(E=>({name:E.name,description:E.description,input_schema:E.input_schema})))));p.length&&(h.agents=p)}}),d.addHook("onError",async(h,f,p)=>{h.errorMessage=p?.message||p?.toString?.()||"Unknown error",yv.emit("onError",h,f,p)}),d.addHook("onSend",(h,f,p,g)=>{let E=h.pathname?.endsWith("/v1/messages"),m=h.pathname?.endsWith("/v1/responses");if(E||m){let D=Ry(h);if(p instanceof ReadableStream){if(E&&h.agents){let v=new AbortController,b=p.pipeThrough(new ky),I,_=-1,S="",x="",k="",R=[],P=[];return g(null,wJ(b,async(T,N)=>{try{if(T.event==="content_block_start"&&T?.data?.content_block?.name){let j=h.agents.find(Y=>Ty.getAgent(Y)?.tools.get(T.data.content_block.name));if(j){I=Ty.getAgent(j),_=T.data.index,S=T.data.content_block.name,k=T.data.content_block.id;return}}if(_>-1&&T.data.index===_&&T.data?.delta?.type==="input_json_delta"){x+=T.data?.delta?.partial_json;return}if(_>-1&&T.data.index===_&&T.data.type==="content_block_stop"){try{let j=IJ.default.parse(x);P.push({type:"tool_use",id:k,name:S,input:j});let Y=await I?.tools.get(S)?.handler(j,{req:h,config:t});R.push({tool_use_id:k,type:"tool_result",content:Y}),I=void 0,_=-1,S="",x="",k=""}catch(j){console.log(j)}return}if(T.event==="message_delta"&&R.length){h.body.messages.push({role:"assistant",content:P}),h.body.messages.push({role:"user",content:R});let j=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(h.body)});if(!j.ok)return;let Y=j.body.pipeThrough(new ky).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"){v.abort();break}throw Z}return}return T}catch(j){if(console.error("Unexpected error in stream processing:",j),j.code==="ERR_STREAM_PREMATURE_CLOSE"){v.abort();return}throw j}}).pipeThrough(new bJ))}let[C,w]=p.tee();return(async v=>{let b=v.pipeThrough(new TextDecoderStream).pipeThrough(new ky).getReader();try{for(;;){let{done:I,value:_}=await b.read();if(I)break;let S=_.event,x=_.data;if(x?.usage){let k=$l.get(D)||{},R=ig(x.usage),P={...S==="message_start"?{}:k,...R};h.log?.info?.({debug_log:!0,reqId:h.id,phase:"usage_capture_anthropic_sse",event:S,provider:h.provider,model:lh(h),usageSessionId:D,capturedUsage:R,mergedUsage:P}),(R?.cache_read_input_tokens||R?.cache_creation_input_tokens)&&console.log("[Usage] Cache tokens:",{cache_read:R?.cache_read_input_tokens,cache_creation:R?.cache_creation_input_tokens}),$l.put(D,P)}if(x?.response?.usage){let k=ig(x.response.usage),R=S==="response.completed"?{}:$l.get(D)||{},P={...R,input_tokens:k?.input_tokens||0,output_tokens:k?.output_tokens||0,cache_read_input_tokens:k?.cache_read_input_tokens??R.cache_read_input_tokens??0,cache_creation_input_tokens:k?.cache_creation_input_tokens??R.cache_creation_input_tokens??0};h.log?.info?.({debug_log:!0,reqId:h.id,phase:"usage_capture_responses_sse",event:S,provider:h.provider,model:lh(h),usageSessionId:D,capturedUsage:k,mergedUsage:P}),$l.put(D,P)}}}catch(I){I.name==="AbortError"||I.code==="ERR_STREAM_PREMATURE_CLOSE"?console.error("Background read stream closed prematurely"):console.error("Error in background stream reading:",I)}finally{b.releaseLock()}})(w),g(null,C)}let y=qJ(p);if(y&&$l.put(D,y),typeof p=="object")return p.error?g(p.error,null):g(p,null)}if(typeof p=="object"&&p.error)return g(p.error,null);g(null,p)}),d.addHook("onSend",async(h,f,p)=>{if(yv.emit("onSend",h,f,p),f.statusCode>=400&&(h.pathname?.endsWith("/v1/messages")||h.pathname?.endsWith("/v1/responses")))try{typeof p=="string"?h.errorResponseBody=p:p&&typeof p=="object"&&(h.errorResponseBody=JSON.stringify(p))}catch{}return p}),d.addHook("onResponse",async(h,f)=>{if(!(!h.pathname?.endsWith("/v1/messages")&&!h.pathname?.endsWith("/v1/responses")))try{let p=Ry(h),g=$l.get(p),E=qV(p),m=QJ(),D,y,C=h.sseError,w=C&&(C.type||C.code||C.message),v=g?.output_tokens&&g.output_tokens>0,b=f.statusCode>=400||w&&!v;if(b){D=h.errorMessage||f.errorMessage||h.error?.message||h.error?.toString?.()||void 0,w&&(D=D||JSON.stringify(C),y=JSON.stringify(C)),y=y||h.errorResponseBody;let x=lh(h);Cv(f.statusCode,D)?(m.markRateLimited(h.provider||"",x,120,D),Np(h)==="codex"&&await Dv(D)):m.recordFailure(h.provider||"",x,D)}else{let x=lh(h);m.recordSuccess(h.provider||"",x)}let I=g?.cache_read_input_tokens??0,_=g?.input_tokens??h.tokenCount??0;!I&&h.tokenCount&&g?.input_tokens&&g.input_tokens<h.tokenCount&&(I=h.tokenCount-g.input_tokens,I&&console.log("[Usage] Inferred cache tokens:",{tokenCount:h.tokenCount,netInput:g.input_tokens,impliedCache:I}));let S=b?0:g?.output_tokens||0;!b&&h.body?.stream&&_===0&&S===0&&h.log?.warn?.({debug_log:!0,reqId:h.id,phase:"usage_zero_stream",provider:h.provider,originalModel:h.originalModel||h.body?.model||"",model:lh(h),usageSessionId:p,tokenCount:h.tokenCount,cachedUsage:g,note:"Successful streaming request ended with zero usage. Check provider_stream_chunk usage_monitor and usage_capture_* logs."}),av({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),sessionId:p,provider:h.provider||"",originalModel:h.originalModel||h.body?.model||"",model:lh(h),modelFamily:h.modelFamily||"",scenarioType:h.scenarioType||"default",clientType:Np(h),codexAccountId:h.codexAccountId,codexAccountEmail:h.codexAccountEmail,stream:h.body?.stream??!1,inputTokens:_,outputTokens:S,cacheReadInputTokens:I,cacheCreationInputTokens:g?.cache_creation_input_tokens||0,ttft:b?null:E.ttft,tokensPerSecond:b?null:E.tokensPerSecond,durationMs:h.requestStartTime?Math.round(Ev.performance.now()-h.requestStartTime):0,status:b?"error":"success",errorMessage:D,responseBody:y})}catch(p){console.error("Usage tracking error:",p)}}),process.on("uncaughtException",h=>{d.app.log.error("Uncaught exception:",h)}),process.on("unhandledRejection",(h,f)=>{d.app.log.error("Unhandled rejection at:",f,"reason:",h)}),d}async function JJ(){let e=await QF();e.app.post("/api/restart",async()=>(setTimeout(async()=>{process.exit(0)},100),{success:!0,message:"Service restart initiated"})),await e.start()}require.main===hD&&JJ().catch(e=>{console.error("Failed to start server:",e),process.exit(1)});});async function MF(e){try{let{stdout:t}=await LF("npm view claude-code-router-next version"),r=t.trim();return{hasUpdate:YJ(r,e)>0,latestVersion:r,changelog:""}}catch(t){return console.error("Error checking for updates:",t),{hasUpdate:!1,latestVersion:e,changelog:""}}}async function UF(){try{let{stdout:e,stderr:t}=await LF("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 YJ(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 OF,PF,LF,jF=sp(()=>{"use strict";OF=require("child_process"),PF=require("util"),LF=(0,PF.promisify)(OF.exec)});var $g,fD=sp(()=>{$g="2.3.1"});var pD=Rr(AD=>{"use strict";Object.defineProperty(AD,"__esModule",{value:!0});var $F=require("child_process"),WJ=1024*1024,HF={exec(e,t){let r={maxBuffer:2*WJ,windowsHide:!0};(0,$F.exec)(e,r,t)},spawn(e,t,r){return(0,$F.spawn)(e,t,r)},stripLine(e,t){let r=0;for(;t-- >0;){let n=e.indexOf(`
1392
1392
  `,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=HF.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})}};AD.default=HF});var GF=Rr((qF,Hg)=>{(function(e,t){"use strict";typeof define=="function"&&define.amd?define(t):typeof Hg=="object"&&Hg.exports?Hg.exports=t():e.log=t()})(qF,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(p,g){var E=p[g];if(typeof E.bind=="function")return E.bind(p);try{return Function.prototype.bind.call(E,p)}catch{return function(){return Function.prototype.apply.apply(E,[p,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(p){return p==="debug"&&(p="log"),typeof console===t?!1:p==="trace"&&r?a:console[p]!==void 0?s(console,p):console.log!==void 0?s(console,"log"):e}function l(){for(var p=this.getLevel(),g=0;g<n.length;g++){var E=n[g];this[E]=g<p?e:this.methodFactory(E,p,this.name)}if(this.log=this.debug,typeof console===t&&p<this.levels.SILENT)return"No console available for logging"}function c(p){return function(){typeof console!==t&&(l.call(this),this[p].apply(this,arguments))}}function d(p,g,E){return u(p)||c.apply(this,arguments)}function h(p,g){var E=this,m,D,y,C="loglevel";typeof p=="string"?C+=":"+p:typeof p=="symbol"&&(C=void 0);function w(S){var x=(n[S]||"silent").toUpperCase();if(!(typeof window===t||!C)){try{window.localStorage[C]=x;return}catch{}try{window.document.cookie=encodeURIComponent(C)+"="+x+";"}catch{}}}function v(){var S;if(!(typeof window===t||!C)){try{S=window.localStorage[C]}catch{}if(typeof S===t)try{var x=window.document.cookie,k=encodeURIComponent(C),R=x.indexOf(k+"=");R!==-1&&(S=/^([^;]+)/.exec(x.slice(R+k.length+1))[1])}catch{}return E.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 I(S){var x=S;if(typeof x=="string"&&E.levels[x.toUpperCase()]!==void 0&&(x=E.levels[x.toUpperCase()]),typeof x=="number"&&x>=0&&x<=E.levels.SILENT)return x;throw new TypeError("log.setLevel() called with invalid level: "+S)}E.name=p,E.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},E.methodFactory=g||d,E.getLevel=function(){return y??D??m},E.setLevel=function(S,x){return y=I(S),x!==!1&&w(y),l.call(E)},E.setDefaultLevel=function(S){D=I(S),v()||E.setLevel(S,!1)},E.resetLevel=function(){y=null,b(),l.call(E)},E.enableAll=function(S){E.setLevel(E.levels.TRACE,S)},E.disableAll=function(S){E.setLevel(E.levels.SILENT,S)},E.rebuild=function(){if(o!==E&&(m=I(o.getLevel())),l.call(E),o===E)for(var S in i)i[S].rebuild()},m=I(o?o.getLevel():"WARN");var _=v();_!=null&&(y=I(_)),l.call(E)}o=new h,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 E=i[g];return E||(E=i[g]=new h(g,o.methodFactory)),E};var f=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=f),o},o.getLoggers=function(){return i},o.default=o,o})});var gD=Rr(FA=>{"use strict";var KJ=FA&&FA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(FA,"__esModule",{value:!0});var ZJ=KJ(GF());FA.default=ZJ.default});var YF=Rr(Oa=>{"use strict";var XJ=Oa&&Oa.__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]})),eY=Oa&&Oa.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),VF=Oa&&Oa.__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"&&XJ(r,t,n[i]);return eY(r,t),r}})(),JF=Oa&&Oa.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Oa,"__esModule",{value:!0});var tY=VF(require("os")),qg=VF(require("fs")),Ts=JF(pD()),rY=JF(gD()),nY=e=>new Promise((t,r)=>{qg.existsSync(e)?t():qg.mkdir(e,n=>{n?r(n):t()})}),Sh={darwin(e){return new Promise((t,r)=>{Ts.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=Ts.default.stripLine(i.toString(),1),u=a.slice(0,a.indexOf(`
1393
1393
  `)),l=Ts.default.stripLine(a,1),c=u.indexOf("rxbytes")>=0?10:8,d=Ts.default.extractColumns(l,[0,3,c],10).filter(h=>!!String(h[0]).match(/^(udp|tcp)/)).find(h=>{let f=String(h[1]).match(/\.(\d+)$/);return!!(f&&f[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)=>{Ts.default.exec("netstat -tunlp",function(i,o,s){if(i)r(i);else{let a=s.toString().trim();a&&rY.default.warn(a);let u=Ts.default.stripLine(o.toString(),2),l=Ts.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)=>{Ts.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=Ts.default.stripLine(i.toString(),4),u=Ts.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=tY.tmpdir()+"/.find-process",i=n+"/"+process.pid,o='netstat -tunp >> "'+i+'"';nY(n).then(()=>{Ts.default.exec(o,()=>{qg.readFile(i,"utf8",(s,a)=>{if(qg.unlink(i,()=>{}),s)r(s);else{a=Ts.default.stripLine(a,2);let u=Ts.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`))}})})})})}};Sh.freebsd=Sh.darwin;Sh.sunos=Sh.darwin;function iY(e){let t=process.platform;return new Promise((r,n)=>{if(!(t in Sh))return n(new Error(`platform ${t} is unsupported`));let i=Sh[t];i(e).then(r,n)})}Oa.default=iY});var KF=Rr(Pa=>{"use strict";var oY=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]})),sY=Pa&&Pa.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),aY=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"&&oY(r,t,n[i]);return sY(r,t),r}})(),uY=Pa&&Pa.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Pa,"__esModule",{value:!0});var Gg=aY(require("path")),Wl=uY(pD());function mD(e,t){return t?e&&e.match?e.match(t)!==null:!1:!0}function zF(e){let t=e.split(Gg.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(Gg.sep)}function WF(e){if(process.platform==="darwin"){let t=e.indexOf(".app/");if(t>=0)return Gg.basename(e.substring(0,t))}return Gg.basename(e)}var Jc={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",Wl.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=Wl.default.stripLine(o.toString(),1),c=Wl.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?mD(d[4],e.name):!!d[0]).map(d=>{let h=String(d[4]),f=zF(h);return{pid:parseInt(d[0],10),ppid:parseInt(d[1],10),uid:parseInt(d[2],10),gid:parseInt(d[3],10),name:WF(f),bin:f,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=Wl.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=Wl.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:mD(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)=>{Wl.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=Wl.default.stripLine(o.toString(),1),c=Wl.default.extractColumns(u,[0,3],4).filter(d=>d[0]&&e.pid!==void 0?d[0]===String(e.pid):d[1]&&e.name?mD(d[1],e.name):!!d[0]).map(d=>{let h=String(d[1]),f=zF(h);return{pid:parseInt(d[0],10),ppid:0,name:WF(f),bin:f,cmd:d[1]}});e.config.strict&&e.name&&(c=c.filter(d=>d.name===e.name)),t(c)}})})}};Jc.linux=Jc.darwin;Jc.sunos=Jc.darwin;Jc.freebsd=Jc.darwin;function lY(e){let t=process.platform,r=Jc[t];return r?r(e):Promise.reject(new Error(`Platform "${t}" is not supported`))}Pa.default=lY});var XF=Rr(kA=>{"use strict";var yD=kA&&kA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(kA,"__esModule",{value:!0});var cY=yD(YF()),ZF=yD(KF()),dY=yD(gD()),ED={port(e,t){return(0,cY.default)(e).then(r=>ED.pid(r,t),()=>[])},pid(e,t){return(0,ZF.default)({pid:e,config:t})},name(e,t){return(0,ZF.default)({name:e,config:t,skipSelf:!0})}};function hY(e,t,r){let n=Object.assign({logLevel:"warn",strict:typeof r=="boolean"?r:!1},typeof r=="object"?r:{});return n.logLevel&&dY.default.setLevel(n.logLevel),new Promise((i,o)=>{if(!(e in ED))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")):ED[e](t,n).then(i,o)}})}kA.default=hY});var t2=Rr(e2=>{"use strict";Object.defineProperty(e2,"__esModule",{value:!0})});var r2=Rr(La=>{"use strict";var fY=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]})),AY=La&&La.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&fY(t,e,r)},pY=La&&La.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(La,"__esModule",{value:!0});La.default=void 0;var gY=XF();Object.defineProperty(La,"default",{enumerable:!0,get:function(){return pY(gY).default}});AY(t2(),La)});function i2(){let e=0;(0,Ko.existsSync)(Bo.REFERENCE_COUNT_FILE)&&(e=parseInt((0,Ko.readFileSync)(Bo.REFERENCE_COUNT_FILE,"utf-8"))||0),e++,(0,Ko.writeFileSync)(Bo.REFERENCE_COUNT_FILE,e.toString())}function CD(){let e=0;(0,Ko.existsSync)(Bo.REFERENCE_COUNT_FILE)&&(e=parseInt((0,Ko.readFileSync)(Bo.REFERENCE_COUNT_FILE,"utf-8"))||0),e=Math.max(0,e-1),(0,Ko.writeFileSync)(Bo.REFERENCE_COUNT_FILE,e.toString())}function o2(){return(0,Ko.existsSync)(Bo.REFERENCE_COUNT_FILE)&&parseInt((0,Ko.readFileSync)(Bo.REFERENCE_COUNT_FILE,"utf-8"))||0}function Yc(){if(!(0,Ko.existsSync)(Bo.PID_FILE))return!1;let e;try{let t=(0,Ko.readFileSync)(Bo.PID_FILE,"utf-8");if(e=parseInt(t,10),isNaN(e))return al(),!1}catch{return!1}try{if(process.platform==="win32"){let t=`tasklist /FI "PID eq ${e}"`;return(0,n2.execSync)(t,{stdio:"pipe"}).toString().includes(e.toString())?!0:(al(),!1)}else return process.kill(e,0),!0}catch{return al(),!1}}function al(){if((0,Ko.existsSync)(Bo.PID_FILE))try{require("fs").unlinkSync(Bo.PID_FILE)}catch{}}function s2(){if(!(0,Ko.existsSync)(Bo.PID_FILE))return null;try{let e=parseInt((0,Ko.readFileSync)(Bo.PID_FILE,"utf-8"));return isNaN(e)?null:e}catch{return null}}async function Vg(){let e=s2(),t=await Yc(),n=(await Vi()).PORT||3456;return{running:t,pid:e,port:n,endpoint:`http://127.0.0.1:${n}`,pidFile:Bo.PID_FILE,referenceCount:o2()}}async function a2(){if(o2()===0){let t=s2();if(t&&await Yc())try{process.kill(t,"SIGTERM")}catch{}}}var Ko,Bo,mY,n2,TA=sp(()=>{"use strict";Ko=require("fs"),Bo=un(xs());ul();mY=un(r2()),n2=require("child_process")});var A2={};M1(A2,{backupConfigFile:()=>f2,getSettingsPath:()=>_D,initConfig:()=>EY,initDir:()=>h2,readConfigFile:()=>Vi,restartService:()=>ID,run:()=>wD,writeConfigFile:()=>Ma});var Ds,u2,Kl,l2,c2,hi,d2,Fh,bD,DD,RA,h2,Vi,f2,Ma,EY,wD,ID,_D,ul=sp(()=>{"use strict";Ds=un(require("node:fs/promises")),u2=un(dp()),Kl=un(require("node:path")),l2=require("node:crypto"),c2=un(require("node:os")),hi=un(xs()),d2=un(NF()),Fh=require("fs");jF();fD();bD=require("child_process");TA();DD=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(DD);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=DD(n);return t}return e},RA=async e=>{try{await Ds.default.access(e)}catch{await Ds.default.mkdir(e,{recursive:!0})}},h2=async()=>{await RA(hi.HOME_DIR),await RA(hi.PLUGINS_DIR),await RA(hi.PRESETS_DIR),await RA(Kl.default.join(hi.HOME_DIR,"logs"))},Vi=async()=>{try{let e=await Ds.default.readFile(hi.CONFIG_FILE,"utf-8");try{let t=u2.default.parse(e);return DD(t)}catch(t){console.error(`Failed to parse config file at ${hi.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 h2();let t=await f2();t&&console.log(`Backed up existing configuration file to ${t}`);let r={PORT:3456,Providers:[],Router:{},Clients:(0,hi.getDefaultClientsConfig)()};return await Ma(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 ${hi.CONFIG_FILE}`),console.error("Error details:",e.message),process.exit(1)}},f2=async()=>{try{if(await Ds.default.access(hi.CONFIG_FILE).then(()=>!0).catch(()=>!1)){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=`${hi.CONFIG_FILE}.${e}.bak`;await Ds.default.copyFile(hi.CONFIG_FILE,t);try{let r=Kl.default.dirname(hi.CONFIG_FILE),n=Kl.default.basename(hi.CONFIG_FILE),o=(await Ds.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=Kl.default.join(r,o[s]);await Ds.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},Ma=async e=>{await RA(hi.HOME_DIR);let t=`${JSON.stringify(e,null,2)}`;await Ds.default.writeFile(hi.CONFIG_FILE,t)},EY=async()=>{let e=await Vi();return Object.assign(process.env,e),e},wD=async(e=[])=>{if(Yc()){console.log("claude-code-router server is running");return}let r=await(0,d2.getServer)(),n=r.app;(0,Fh.writeFileSync)(hi.PID_FILE,process.pid.toString()),n.post("/api/update/perform",async()=>await UF()),n.get("/api/update/check",async()=>await MF($g)),n.post("/api/restart",async()=>(setTimeout(async()=>{(0,bD.spawn)("ccr",["restart"],{detached:!0,stdio:"ignore"}).unref()},100),{success:!0,message:"Service restart initiated"})),await r.start()},ID=async()=>{try{let r=parseInt((0,Fh.readFileSync)(hi.PID_FILE,"utf-8"));if(process.kill(r),al(),(0,Fh.existsSync)(hi.REFERENCE_COUNT_FILE))try{await Ds.default.unlink(hi.REFERENCE_COUNT_FILE)}catch{}console.log("claude code router service has been stopped.")}catch{console.log("Service was not running or failed to stop."),al()}console.log("Starting claude code router service...");let e=Kl.default.join(__dirname,"cli.js"),t=(0,bD.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.")},_D=async e=>{let t=(0,l2.createHash)("sha256").update(e,"utf-8").digest("hex"),r=Kl.default.join(c2.default.tmpdir(),"claude-code-router"),n=`ccr-settings-${t}.json`,i=Kl.default.join(r,n);try{await Ds.default.access(r)}catch{await Ds.default.mkdir(r,{recursive:!0})}try{return await Ds.default.access(i),i}catch{return await Ds.default.writeFile(i,e,"utf-8"),i}}});var NA=Rr((jse,D2)=>{var bY=require("node:tty"),wY=bY?.WriteStream?.prototype?.hasColors?.()??!1,xn=(e,t)=>{if(!wY)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}},vn={};vn.reset=xn(0,0);vn.bold=xn(1,22);vn.dim=xn(2,22);vn.italic=xn(3,23);vn.underline=xn(4,24);vn.overline=xn(53,55);vn.inverse=xn(7,27);vn.hidden=xn(8,28);vn.strikethrough=xn(9,29);vn.black=xn(30,39);vn.red=xn(31,39);vn.green=xn(32,39);vn.yellow=xn(33,39);vn.blue=xn(34,39);vn.magenta=xn(35,39);vn.cyan=xn(36,39);vn.white=xn(37,39);vn.gray=xn(90,39);vn.bgBlack=xn(40,49);vn.bgRed=xn(41,49);vn.bgGreen=xn(42,49);vn.bgYellow=xn(43,49);vn.bgBlue=xn(44,49);vn.bgMagenta=xn(45,49);vn.bgCyan=xn(46,49);vn.bgWhite=xn(47,49);vn.bgGray=xn(100,49);vn.redBright=xn(91,39);vn.greenBright=xn(92,39);vn.yellowBright=xn(93,39);vn.blueBright=xn(94,39);vn.magentaBright=xn(95,39);vn.cyanBright=xn(96,39);vn.whiteBright=xn(97,39);vn.bgRedBright=xn(101,49);vn.bgGreenBright=xn(102,49);vn.bgYellowBright=xn(103,49);vn.bgBlueBright=xn(104,49);vn.bgMagentaBright=xn(105,49);vn.bgCyanBright=xn(106,49);vn.bgWhiteBright=xn(107,49);D2.exports=vn});var x2=Rr((sae,B2)=>{"use strict";B2.exports=kY;function FY(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 kY(e){let t=FY(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 F2=Rr((aae,S2)=>{"use strict";S2.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 tm=Rr((uae,k2)=>{"use strict";var TY=F2();k2.exports=e=>typeof e=="string"?e.replace(TY(),""):e});var R2=Rr((lae,FD)=>{"use strict";var T2=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);FD.exports=T2;FD.exports.default=T2});var N2=Rr((cae,Q2)=>{"use strict";Q2.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 P2=Rr((dae,kD)=>{"use strict";var RY=tm(),QY=R2(),NY=N2(),O2=e=>{if(typeof e!="string"||e.length===0||(e=RY(e),e.length===0))return 0;e=e.replace(NY()," ");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+=QY(n)?2:1)}return t};kD.exports=O2;kD.exports.default=O2});var M2=Rr((hae,L2)=>{"use strict";L2.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 TD=Rr((fae,j2)=>{var OA=M2(),U2={};for(let e of Object.keys(OA))U2[OA[e]]=e;var Wr={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"]}};j2.exports=Wr;for(let e of Object.keys(Wr)){if(!("channels"in Wr[e]))throw new Error("missing channels property: "+e);if(!("labels"in Wr[e]))throw new Error("missing channel labels property: "+e);if(Wr[e].labels.length!==Wr[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=Wr[e];delete Wr[e].channels,delete Wr[e].labels,Object.defineProperty(Wr[e],"channels",{value:t}),Object.defineProperty(Wr[e],"labels",{value:r})}Wr.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]};Wr.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(h){return(l-h)/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]};Wr.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=Wr.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]};Wr.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 OY(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}Wr.rgb.keyword=function(e){let t=U2[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(OA)){let o=OA[i],s=OY(e,o);s<r&&(r=s,n=i)}return n};Wr.keyword.rgb=function(e){return OA[e]};Wr.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]};Wr.rgb.lab=function(e){let t=Wr.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]};Wr.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};Wr.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]};Wr.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]}};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.rgb.ansi16=function(e,t=null){let[r,n,i]=e,o=t===null?Wr.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};Wr.hsv.ansi16=function(e){return Wr.rgb.ansi16(Wr.hsv.rgb(e),e[2])};Wr.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)};Wr.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]};Wr.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]};Wr.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};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.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]};Wr.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};Wr.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};Wr.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};Wr.gray.hsl=function(e){return[0,0,e[0]]};Wr.gray.hsv=Wr.gray.hsl;Wr.gray.hwb=function(e){return[0,100,e[0]]};Wr.gray.cmyk=function(e){return[0,0,0,e[0]]};Wr.gray.lab=function(e){return[e[0],0,0]};Wr.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};Wr.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var H2=Rr((Aae,$2)=>{var rm=TD();function PY(){let e={},t=Object.keys(rm);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function LY(e){let t=PY(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys(rm[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 MY(e,t){return function(r){return t(e(r))}}function UY(e,t){let r=[t[e].parent,e],n=rm[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=MY(rm[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}$2.exports=function(e){let t=LY(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]=UY(s,t))}return r}});var G2=Rr((pae,q2)=>{var RD=TD(),jY=H2(),Rh={},$Y=Object.keys(RD);function HY(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 qY(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}$Y.forEach(e=>{Rh[e]={},Object.defineProperty(Rh[e],"channels",{value:RD[e].channels}),Object.defineProperty(Rh[e],"labels",{value:RD[e].labels});let t=jY(e);Object.keys(t).forEach(n=>{let i=t[n];Rh[e][n]=qY(i),Rh[e][n].raw=HY(i)})});q2.exports=Rh});var K2=Rr((gae,W2)=>{"use strict";var V2=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,J2=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},Y2=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},nm=e=>e,z2=(e,t,r)=>[e,t,r],Qh=(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})},QD,Nh=(e,t,r,n)=>{QD===void 0&&(QD=G2());let i=n?10:0,o={};for(let[s,a]of Object.entries(QD)){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 GY(){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",Qh(t.color,"ansi",()=>Nh(V2,"ansi16",nm,!1)),Qh(t.color,"ansi256",()=>Nh(J2,"ansi256",nm,!1)),Qh(t.color,"ansi16m",()=>Nh(Y2,"rgb",z2,!1)),Qh(t.bgColor,"ansi",()=>Nh(V2,"ansi16",nm,!0)),Qh(t.bgColor,"ansi256",()=>Nh(J2,"ansi256",nm,!0)),Qh(t.bgColor,"ansi16m",()=>Nh(Y2,"rgb",z2,!0)),t}Object.defineProperty(W2,"exports",{enumerable:!0,get:GY})});var ek=Rr((mae,X2)=>{"use strict";var PA=P2(),VY=tm(),JY=K2(),OD=new Set(["\x1B","\x9B"]),YY=39,Z2=e=>`${OD.values().next().value}[${e}m`,zY=e=>e.split(" ").map(t=>PA(t)),ND=(e,t,r)=>{let n=[...t],i=!1,o=PA(VY(e[e.length-1]));for(let[s,a]of n.entries()){let u=PA(a);if(o+u<=r?e[e.length-1]+=a:(e.push(a),o=0),OD.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())},WY=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(PA(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},KY=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i="",o,s=zY(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimLeft());let c=PA(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,h=1+Math.floor((s[u]-d-1)/t);Math.floor((s[u]-1)/t)<h&&a.push(""),ND(a,l,t);continue}if(c+s[u]>t&&c>0&&s[u]>0){if(r.wordWrap===!1&&c<t){ND(a,l,t);continue}a.push("")}if(c+s[u]>t&&r.wordWrap===!1){ND(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(WY)),n=a.join(`
1394
1394
  `);for(let[u,l]of[...n].entries()){if(i+=l,OD.has(l)){let d=parseFloat(/\d[^m]*/.exec(n.slice(u,u+4)));o=d===YY?null:d}let c=JY.codes.get(Number(o));o&&c&&(n[u+1]===`