clavue-v1 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/dist/openai-responses-adapter.js +1 -1
- package/package.json +2 -3
package/dist/cli.js
CHANGED
|
@@ -225,7 +225,7 @@ ${gitignoreEntry}
|
|
|
225
225
|
`),firstLine=headerParts.shift();if(!firstLine)return socket.destroy(),reject2(new Error("No header received from proxy CONNECT response"));let firstLineParts=firstLine.split(" "),statusCode=+firstLineParts[1],statusText=firstLineParts.slice(2).join(" "),headers={};for(let header of headerParts){if(!header)continue;let firstColon=header.indexOf(":");if(firstColon===-1)return socket.destroy(),reject2(new Error(`Invalid header from proxy CONNECT response: "${header}"`));let key=header.slice(0,firstColon).toLowerCase(),value=header.slice(firstColon+1).trimStart(),current=headers[key];typeof current=="string"?headers[key]=[current,value]:Array.isArray(current)?current.push(value):headers[key]=value}debug("got proxy server response: %o %o",firstLine,headers),cleanup(),resolve44({connect:{statusCode,statusText,headers},buffered})}__name(ondata,"ondata"),socket.on("error",onerror),socket.on("end",onend),read()})}var import_debug10,debug,init_parse_proxy_response=__esm({"../../node_modules/https-proxy-agent/dist/parse-proxy-response.js"(){import_debug10=__toESM(require_src()),debug=(0,import_debug10.default)("https-proxy-agent:parse-proxy-response");__name(parseProxyResponse,"parseProxyResponse")}});import*as net2 from"net";import*as tls from"tls";import assert2 from"assert";import{URL as URL2}from"url";function resume(socket){socket.resume()}function omit3(obj,...keys2){let ret={},key;for(key in obj)keys2.includes(key)||(ret[key]=obj[key]);return ret}var import_debug11,debug2,setServernameFromNonIpHost,HttpsProxyAgent,init_dist2=__esm({"../../node_modules/https-proxy-agent/dist/index.js"(){import_debug11=__toESM(require_src(),1);init_dist();init_parse_proxy_response();debug2=(0,import_debug11.default)("https-proxy-agent"),setServernameFromNonIpHost=__name(options=>options.servername===void 0&&options.host&&!net2.isIP(options.host)?{...options,servername:options.host}:options,"setServernameFromNonIpHost"),HttpsProxyAgent=class extends Agent2{static{__name(this,"HttpsProxyAgent")}constructor(proxy,opts){super(opts),this.options={path:void 0},this.proxy=typeof proxy=="string"?new URL2(proxy):proxy,this.proxyHeaders=opts?.headers??{},debug2("Creating new HttpsProxyAgent instance: %o",this.proxy.href);let host=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,""),port=this.proxy.port?parseInt(this.proxy.port,10):this.proxy.protocol==="https:"?443:80;this.connectOpts={ALPNProtocols:["http/1.1"],...opts?omit3(opts,"headers"):null,host,port}}async connect(req,opts){let{proxy}=this;if(!opts.host)throw new TypeError('No "host" provided');let socket;proxy.protocol==="https:"?(debug2("Creating `tls.Socket`: %o",this.connectOpts),socket=tls.connect(setServernameFromNonIpHost(this.connectOpts))):(debug2("Creating `net.Socket`: %o",this.connectOpts),socket=net2.connect(this.connectOpts));let headers=typeof this.proxyHeaders=="function"?this.proxyHeaders():{...this.proxyHeaders},host=net2.isIPv6(opts.host)?`[${opts.host}]`:opts.host,payload=`CONNECT ${host}:${opts.port} HTTP/1.1\r
|
|
226
226
|
`;if(proxy.username||proxy.password){let auth2=`${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;headers["Proxy-Authorization"]=`Basic ${Buffer.from(auth2).toString("base64")}`}headers.Host=`${host}:${opts.port}`,headers["Proxy-Connection"]||(headers["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close");for(let name of Object.keys(headers))payload+=`${name}: ${headers[name]}\r
|
|
227
227
|
`;let proxyResponsePromise=parseProxyResponse(socket);socket.write(`${payload}\r
|
|
228
|
-
`);let{connect:connect3,buffered}=await proxyResponsePromise;if(req.emit("proxyConnect",connect3),this.emit("proxyConnect",connect3,req),connect3.statusCode===200)return req.once("socket",resume),opts.secureEndpoint?(debug2("Upgrading socket connection to TLS"),tls.connect({...omit3(setServernameFromNonIpHost(opts),"host","path","port"),socket})):socket;socket.destroy();let fakeSocket=new net2.Socket({writable:!1});return fakeSocket.readable=!0,req.once("socket",s2=>{debug2("Replaying proxy buffer for failed request"),assert2(s2.listenerCount("data")>0),s2.push(buffered),s2.push(null)}),fakeSocket}};HttpsProxyAgent.protocols=["http","https"];__name(resume,"resume");__name(omit3,"omit")}});function clearCACertsCache(){getCACertificates.cache.clear?.(),logForDebugging("Cleared CA certificates cache")}var getCACertificates,init_caCerts=__esm({"src/utils/caCerts.ts"(){init_memoize();init_debug();init_envUtils();init_fsOperations();getCACertificates=memoize_default(()=>{let useSystemCA=hasNodeOption("--use-system-ca")||hasNodeOption("--use-openssl-ca"),extraCertsPath=process.env.NODE_EXTRA_CA_CERTS;if(logForDebugging(`CA certs: useSystemCA=${useSystemCA}, extraCertsPath=${extraCertsPath}`),!useSystemCA&&!extraCertsPath)return;let tls2=__require("tls"),certs=[];if(useSystemCA){let getCACerts=tls2.getCACertificates,systemCAs=getCACerts?.("system");if(systemCAs&&systemCAs.length>0)certs.push(...systemCAs),logForDebugging(`CA certs: Loaded ${certs.length} system CA certificates (--use-system-ca)`);else if(!getCACerts&&!extraCertsPath){logForDebugging("CA certs: --use-system-ca set but system CA API unavailable, deferring to runtime");return}else certs.push(...tls2.rootCertificates),logForDebugging(`CA certs: Loaded ${certs.length} bundled root certificates as base (--use-system-ca fallback)`)}else certs.push(...tls2.rootCertificates),logForDebugging(`CA certs: Loaded ${certs.length} bundled root certificates as base`);if(extraCertsPath)try{let extraCert=getFsImplementation().readFileSync(extraCertsPath,{encoding:"utf8"});certs.push(extraCert),logForDebugging(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${extraCertsPath})`)}catch(error40){logForDebugging(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${extraCertsPath}): ${error40}`,{level:"error"})}return certs.length>0?certs:void 0});__name(clearCACertsCache,"clearCACertsCache")}});import{Agent as HttpsAgent2}from"https";function getWebSocketTLSOptions(){let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates();if(!(!mtlsConfig&&!caCerts))return{...mtlsConfig,...caCerts&&{ca:caCerts}}}function getTLSFetchOptions(){let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates();if(!mtlsConfig&&!caCerts)return{};let tlsConfig={...mtlsConfig,...caCerts&&{ca:caCerts}};if(typeof Bun<"u")return{tls:tlsConfig};logForDebugging("TLS: Created undici agent with custom certificates");let undiciMod=__require("undici");return{dispatcher:new undiciMod.Agent({connect:{cert:tlsConfig.cert,key:tlsConfig.key,passphrase:tlsConfig.passphrase,...tlsConfig.ca&&{ca:tlsConfig.ca}},pipelining:1})}}function clearMTLSCache(){getMTLSConfig.cache.clear?.(),getMTLSAgent.cache.clear?.(),logForDebugging("Cleared mTLS configuration cache")}function configureGlobalMTLS(){getMTLSConfig()&&process.env.NODE_EXTRA_CA_CERTS&&logForDebugging("NODE_EXTRA_CA_CERTS detected - Node.js will automatically append to built-in CAs")}var getMTLSConfig,getMTLSAgent,init_mtls=__esm({"src/utils/mtls.ts"(){init_memoize();init_caCerts();init_debug();init_fsOperations();getMTLSConfig=memoize_default(()=>{let config3={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{config3.cert=getFsImplementation().readFileSync(process.env.CLAUDE_CODE_CLIENT_CERT,{encoding:"utf8"}),logForDebugging("mTLS: Loaded client certificate from CLAUDE_CODE_CLIENT_CERT")}catch(error40){logForDebugging(`mTLS: Failed to load client certificate: ${error40}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY)try{config3.key=getFsImplementation().readFileSync(process.env.CLAUDE_CODE_CLIENT_KEY,{encoding:"utf8"}),logForDebugging("mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY")}catch(error40){logForDebugging(`mTLS: Failed to load client key: ${error40}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE&&(config3.passphrase=process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE,logForDebugging("mTLS: Using client key passphrase")),Object.keys(config3).length!==0)return config3}),getMTLSAgent=memoize_default(()=>{let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates();if(!mtlsConfig&&!caCerts)return;let agentOptions={...mtlsConfig,...caCerts&&{ca:caCerts},keepAlive:!0};return logForDebugging("mTLS: Creating HTTPS agent with custom certificates"),new HttpsAgent2(agentOptions)});__name(getWebSocketTLSOptions,"getWebSocketTLSOptions");__name(getTLSFetchOptions,"getTLSFetchOptions");__name(clearMTLSCache,"clearMTLSCache");__name(configureGlobalMTLS,"configureGlobalMTLS")}});function disableKeepAlive(){keepAliveDisabled=!0}function getAddressFamily(options){switch(options.family){case 0:case 4:case 6:return options.family;case"IPv6":return 6;case"IPv4":case void 0:return 4;default:throw new Error(`Unsupported address family: ${options.family}`)}}function getProxyUrl(env5=process.env){return env5.https_proxy||env5.HTTPS_PROXY||env5.http_proxy||env5.HTTP_PROXY}function getNoProxy(env5=process.env){return env5.no_proxy||env5.NO_PROXY}function shouldBypassProxy(urlString,noProxy=getNoProxy()){if(!noProxy)return!1;if(noProxy==="*")return!0;try{let url3=new URL(urlString),hostname4=url3.hostname.toLowerCase(),port=url3.port||(url3.protocol==="https:"?"443":"80"),hostWithPort=`${hostname4}:${port}`;return noProxy.split(/[,\s]+/).filter(Boolean).some(pattern=>{if(pattern=pattern.toLowerCase().trim(),pattern.includes(":"))return hostWithPort===pattern;if(pattern.startsWith(".")){let suffix=pattern;return hostname4===pattern.substring(1)||hostname4.endsWith(suffix)}return hostname4===pattern})}catch{return!1}}function createHttpsProxyAgent(proxyUrl,extra={}){let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates(),agentOptions={...mtlsConfig&&{cert:mtlsConfig.cert,key:mtlsConfig.key,passphrase:mtlsConfig.passphrase},...caCerts&&{ca:caCerts}};return isEnvTruthy3(process.env.CLAUDE_CODE_PROXY_RESOLVES_HOSTS)&&(agentOptions.lookup=(hostname4,options,callback)=>{callback(null,hostname4,getAddressFamily(options))}),new HttpsProxyAgent(proxyUrl,{...agentOptions,...extra})}function createAxiosInstance(extra={}){let proxyUrl=getProxyUrl(),mtlsAgent=getMTLSAgent(),instance=axios_default.create({proxy:!1});if(!proxyUrl)return mtlsAgent&&(instance.defaults.httpsAgent=mtlsAgent),instance;let proxyAgent=createHttpsProxyAgent(proxyUrl,extra);return instance.interceptors.request.use(config3=>(config3.url&&shouldBypassProxy(config3.url)?(config3.httpsAgent=mtlsAgent,config3.httpAgent=mtlsAgent):(config3.httpsAgent=proxyAgent,config3.httpAgent=proxyAgent),config3)),instance}function getWebSocketProxyAgent(url3){let proxyUrl=getProxyUrl();if(proxyUrl&&!shouldBypassProxy(url3))return createHttpsProxyAgent(proxyUrl)}function getWebSocketProxyUrl(url3){let proxyUrl=getProxyUrl();if(proxyUrl&&!shouldBypassProxy(url3))return proxyUrl}function getProxyFetchOptions(opts){let base=keepAliveDisabled?{keepalive:!1}:{};if(opts?.forAnthropicAPI){let unixSocket=process.env.ANTHROPIC_UNIX_SOCKET;if(unixSocket&&typeof Bun<"u")return{...base,unix:unixSocket}}let proxyUrl=getProxyUrl();return proxyUrl?typeof Bun<"u"?{...base,proxy:proxyUrl,...getTLSFetchOptions()}:{...base,dispatcher:getProxyAgent(proxyUrl)}:{...base,...getTLSFetchOptions()}}function configureGlobalAgents(){let proxyUrl=getProxyUrl(),mtlsAgent=getMTLSAgent();if(proxyInterceptorId!==void 0&&(axios_default.interceptors.request.eject(proxyInterceptorId),proxyInterceptorId=void 0),axios_default.defaults.proxy=void 0,axios_default.defaults.httpAgent=void 0,axios_default.defaults.httpsAgent=void 0,proxyUrl){axios_default.defaults.proxy=!1;let proxyAgent=createHttpsProxyAgent(proxyUrl);proxyInterceptorId=axios_default.interceptors.request.use(config3=>(config3.url&&shouldBypassProxy(config3.url)?mtlsAgent?(config3.httpsAgent=mtlsAgent,config3.httpAgent=mtlsAgent):(delete config3.httpsAgent,delete config3.httpAgent):(config3.httpsAgent=proxyAgent,config3.httpAgent=proxyAgent),config3)),__require("undici").setGlobalDispatcher(getProxyAgent(proxyUrl))}else if(mtlsAgent){axios_default.defaults.httpsAgent=mtlsAgent;let mtlsOptions=getTLSFetchOptions();mtlsOptions.dispatcher&&__require("undici").setGlobalDispatcher(mtlsOptions.dispatcher)}}async function getAWSClientProxyConfig(){let proxyUrl=getProxyUrl();if(!proxyUrl)return{};let[{NodeHttpHandler},{defaultProvider}]=await Promise.all([import("@smithy/node-http-handler"),import("@aws-sdk/credential-provider-node")]),agent=createHttpsProxyAgent(proxyUrl),requestHandler=new NodeHttpHandler({httpAgent:agent,httpsAgent:agent});return{requestHandler,credentials:defaultProvider({clientConfig:{requestHandler}})}}function clearProxyCache(){getProxyAgent.cache.clear?.(),logForDebugging("Cleared proxy agent cache")}var keepAliveDisabled,getProxyAgent,proxyInterceptorId,init_proxy=__esm({"src/utils/proxy.ts"(){init_axios2();init_dist2();init_memoize();init_caCerts();init_debug();init_envUtils();init_mtls();keepAliveDisabled=!1;__name(disableKeepAlive,"disableKeepAlive");__name(getAddressFamily,"getAddressFamily");__name(getProxyUrl,"getProxyUrl");__name(getNoProxy,"getNoProxy");__name(shouldBypassProxy,"shouldBypassProxy");__name(createHttpsProxyAgent,"createHttpsProxyAgent");__name(createAxiosInstance,"createAxiosInstance");getProxyAgent=memoize_default(uri=>{let undiciMod=__require("undici"),mtlsConfig=getMTLSConfig(),caCerts=getCACertificates(),proxyOptions={httpProxy:uri,httpsProxy:uri,noProxy:process.env.NO_PROXY||process.env.no_proxy};if(mtlsConfig||caCerts){let tlsOpts={...mtlsConfig&&{cert:mtlsConfig.cert,key:mtlsConfig.key,passphrase:mtlsConfig.passphrase},...caCerts&&{ca:caCerts}};proxyOptions.connect=tlsOpts,proxyOptions.requestTls=tlsOpts}return new undiciMod.EnvHttpProxyAgent(proxyOptions)});__name(getWebSocketProxyAgent,"getWebSocketProxyAgent");__name(getWebSocketProxyUrl,"getWebSocketProxyUrl");__name(getProxyFetchOptions,"getProxyFetchOptions");__name(configureGlobalAgents,"configureGlobalAgents");__name(getAWSClientProxyConfig,"getAWSClientProxyConfig");__name(clearProxyCache,"clearProxyCache")}});function findFirstMatch(profiles,substring){return profiles.find(p=>p.includes(substring))??null}async function createBedrockClient(){let{BedrockClient}=await import("@aws-sdk/client-bedrock"),region=getAWSRegion(),skipAuth=isEnvTruthy3(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH),clientConfig={region,...process.env.ANTHROPIC_BEDROCK_BASE_URL&&{endpoint:process.env.ANTHROPIC_BEDROCK_BASE_URL},...await getAWSClientProxyConfig(),...skipAuth&&{requestHandler:new(await import("@smithy/node-http-handler")).NodeHttpHandler,httpAuthSchemes:[{schemeId:"smithy.api#noAuth",identityProvider:__name(()=>async()=>({}),"identityProvider"),signer:new(await import("@smithy/core")).NoAuthSigner}],httpAuthSchemeProvider:__name(()=>[{schemeId:"smithy.api#noAuth"}],"httpAuthSchemeProvider")}};if(!skipAuth&&!process.env.AWS_BEARER_TOKEN_BEDROCK){let cachedCredentials=await refreshAndGetAwsCredentials();cachedCredentials&&(clientConfig.credentials={accessKeyId:cachedCredentials.accessKeyId,secretAccessKey:cachedCredentials.secretAccessKey,sessionToken:cachedCredentials.sessionToken})}return new BedrockClient(clientConfig)}async function createBedrockRuntimeClient(){let{BedrockRuntimeClient}=await import("@aws-sdk/client-bedrock-runtime"),region=getAWSRegion(),skipAuth=isEnvTruthy3(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH),clientConfig={region,...process.env.ANTHROPIC_BEDROCK_BASE_URL&&{endpoint:process.env.ANTHROPIC_BEDROCK_BASE_URL},...await getAWSClientProxyConfig(),...skipAuth&&{requestHandler:new(await import("@smithy/node-http-handler")).NodeHttpHandler,httpAuthSchemes:[{schemeId:"smithy.api#noAuth",identityProvider:__name(()=>async()=>({}),"identityProvider"),signer:new(await import("@smithy/core")).NoAuthSigner}],httpAuthSchemeProvider:__name(()=>[{schemeId:"smithy.api#noAuth"}],"httpAuthSchemeProvider")}};if(!skipAuth&&!process.env.AWS_BEARER_TOKEN_BEDROCK){let cachedCredentials=await refreshAndGetAwsCredentials();cachedCredentials&&(clientConfig.credentials={accessKeyId:cachedCredentials.accessKeyId,secretAccessKey:cachedCredentials.secretAccessKey,sessionToken:cachedCredentials.sessionToken})}return new BedrockRuntimeClient(clientConfig)}function isFoundationModel(modelId){return modelId.startsWith("anthropic.")}function extractModelIdFromArn(modelId){if(!modelId.startsWith("arn:"))return modelId;let lastSlashIndex=modelId.lastIndexOf("/");return lastSlashIndex===-1?modelId:modelId.substring(lastSlashIndex+1)}function getBedrockRegionPrefix(modelId){let effectiveModelId=extractModelIdFromArn(modelId);for(let prefix of BEDROCK_REGION_PREFIXES)if(effectiveModelId.startsWith(`${prefix}.anthropic.`))return prefix}function applyBedrockRegionPrefix(modelId,prefix){let existingPrefix=getBedrockRegionPrefix(modelId);return existingPrefix?modelId.replace(`${existingPrefix}.`,`${prefix}.`):isFoundationModel(modelId)?`${prefix}.${modelId}`:modelId}var getBedrockInferenceProfiles,getInferenceProfileBackingModel,BEDROCK_REGION_PREFIXES,init_bedrock=__esm({"src/utils/model/bedrock.ts"(){init_memoize();init_auth();init_envUtils();init_log3();init_proxy();getBedrockInferenceProfiles=memoize_default(async function(){let[client2,{ListInferenceProfilesCommand}]=await Promise.all([createBedrockClient(),import("@aws-sdk/client-bedrock")]),allProfiles=[],nextToken;try{do{let command8=new ListInferenceProfilesCommand({...nextToken&&{nextToken},typeEquals:"SYSTEM_DEFINED"}),response=await client2.send(command8);response.inferenceProfileSummaries&&allProfiles.push(...response.inferenceProfileSummaries),nextToken=response.nextToken}while(nextToken);return allProfiles.filter(profile=>profile.inferenceProfileId?.includes("anthropic")).map(profile=>profile.inferenceProfileId).filter(Boolean)}catch(error40){throw logError2(error40),error40}});__name(findFirstMatch,"findFirstMatch");__name(createBedrockClient,"createBedrockClient");__name(createBedrockRuntimeClient,"createBedrockRuntimeClient");getInferenceProfileBackingModel=memoize_default(async function(profileId){try{let[client2,{GetInferenceProfileCommand}]=await Promise.all([createBedrockClient(),import("@aws-sdk/client-bedrock")]),command8=new GetInferenceProfileCommand({inferenceProfileIdentifier:profileId}),response=await client2.send(command8);if(!response.models||response.models.length===0)return null;let primaryModel=response.models[0];if(!primaryModel?.modelArn)return null;let lastSlashIndex=primaryModel.modelArn.lastIndexOf("/");return lastSlashIndex>=0?primaryModel.modelArn.substring(lastSlashIndex+1):primaryModel.modelArn}catch(error40){return logError2(error40),null}});__name(isFoundationModel,"isFoundationModel");BEDROCK_REGION_PREFIXES=["us","eu","apac","global"];__name(extractModelIdFromArn,"extractModelIdFromArn");__name(getBedrockRegionPrefix,"getBedrockRegionPrefix");__name(applyBedrockRegionPrefix,"applyBedrockRegionPrefix")}});var CLAUDE_3_7_SONNET_CONFIG,CLAUDE_3_5_V2_SONNET_CONFIG,CLAUDE_3_5_HAIKU_CONFIG,CLAUDE_HAIKU_4_5_CONFIG,CLAUDE_SONNET_4_CONFIG,CLAUDE_SONNET_4_5_CONFIG,CLAUDE_OPUS_4_CONFIG,CLAUDE_OPUS_4_1_CONFIG,CLAUDE_OPUS_4_5_CONFIG,CLAUDE_OPUS_4_6_CONFIG,CLAUDE_SONNET_4_6_CONFIG,ALL_MODEL_CONFIGS,CANONICAL_MODEL_IDS,CANONICAL_ID_TO_KEY,init_configs=__esm({"src/utils/model/configs.ts"(){CLAUDE_3_7_SONNET_CONFIG={firstParty:"claude-3-7-sonnet-20250219",bedrock:"us.anthropic.\u0063laude-3-7-sonnet-20250219-v1:0",vertex:"claude-3-7-sonnet@20250219",foundry:"claude-3-7-sonnet"},CLAUDE_3_5_V2_SONNET_CONFIG={firstParty:"claude-3-5-sonnet-20241022",bedrock:"anthropic.\u0063laude-3-5-sonnet-20241022-v2:0",vertex:"claude-3-5-sonnet-v2@20241022",foundry:"claude-3-5-sonnet"},CLAUDE_3_5_HAIKU_CONFIG={firstParty:"claude-3-5-haiku-20241022",bedrock:"us.anthropic.\u0063laude-3-5-haiku-20241022-v1:0",vertex:"claude-3-5-haiku@20241022",foundry:"claude-3-5-haiku"},CLAUDE_HAIKU_4_5_CONFIG={firstParty:"claude-haiku-4-5-20251001",bedrock:"us.anthropic.\u0063laude-haiku-4-5-20251001-v1:0",vertex:"claude-haiku-4-5@20251001",foundry:"claude-haiku-4-5"},CLAUDE_SONNET_4_CONFIG={firstParty:"claude-sonnet-4-20250514",bedrock:"us.anthropic.\u0063laude-sonnet-4-20250514-v1:0",vertex:"claude-sonnet-4@20250514",foundry:"claude-sonnet-4"},CLAUDE_SONNET_4_5_CONFIG={firstParty:"claude-sonnet-4-5-20250929",bedrock:"us.anthropic.\u0063laude-sonnet-4-5-20250929-v1:0",vertex:"claude-sonnet-4-5@20250929",foundry:"claude-sonnet-4-5"},CLAUDE_OPUS_4_CONFIG={firstParty:"claude-opus-4-20250514",bedrock:"us.anthropic.\u0063laude-opus-4-20250514-v1:0",vertex:"claude-opus-4@20250514",foundry:"claude-opus-4"},CLAUDE_OPUS_4_1_CONFIG={firstParty:"claude-opus-4-1-20250805",bedrock:"us.anthropic.\u0063laude-opus-4-1-20250805-v1:0",vertex:"claude-opus-4-1@20250805",foundry:"claude-opus-4-1"},CLAUDE_OPUS_4_5_CONFIG={firstParty:"claude-opus-4-5-20251101",bedrock:"us.anthropic.\u0063laude-opus-4-5-20251101-v1:0",vertex:"claude-opus-4-5@20251101",foundry:"claude-opus-4-5"},CLAUDE_OPUS_4_6_CONFIG={firstParty:"claude-opus-4-6",bedrock:"us.anthropic.\u0063laude-opus-4-6-v1",vertex:"claude-opus-4-6",foundry:"claude-opus-4-6"},CLAUDE_SONNET_4_6_CONFIG={firstParty:"claude-sonnet-4-6",bedrock:"us.anthropic.\u0063laude-sonnet-4-6",vertex:"claude-sonnet-4-6",foundry:"claude-sonnet-4-6"},ALL_MODEL_CONFIGS={haiku35:CLAUDE_3_5_HAIKU_CONFIG,haiku45:CLAUDE_HAIKU_4_5_CONFIG,sonnet35:CLAUDE_3_5_V2_SONNET_CONFIG,sonnet37:CLAUDE_3_7_SONNET_CONFIG,sonnet40:CLAUDE_SONNET_4_CONFIG,sonnet45:CLAUDE_SONNET_4_5_CONFIG,sonnet46:CLAUDE_SONNET_4_6_CONFIG,opus40:CLAUDE_OPUS_4_CONFIG,opus41:CLAUDE_OPUS_4_1_CONFIG,opus45:CLAUDE_OPUS_4_5_CONFIG,opus46:CLAUDE_OPUS_4_6_CONFIG},CANONICAL_MODEL_IDS=Object.values(ALL_MODEL_CONFIGS).map(c4=>c4.firstParty),CANONICAL_ID_TO_KEY=Object.fromEntries(Object.entries(ALL_MODEL_CONFIGS).map(([key,cfg])=>[cfg.firstParty,key]))}});function getAPIProvider(){return isEnvTruthy3(process.env.CLAUDE_CODE_USE_BEDROCK)?"bedrock":isEnvTruthy3(process.env.CLAUDE_CODE_USE_VERTEX)?"vertex":isEnvTruthy3(process.env.CLAUDE_CODE_USE_FOUNDRY)?"foundry":"firstParty"}function getAPIProviderForStatsig(){return getAPIProvider()}function isFirstPartyAnthropicBaseUrl(){let baseUrl=process.env.ANTHROPIC_BASE_URL;if(!baseUrl)return!0;try{let host=new URL(baseUrl).host,allowedHosts=["api.anthropic.com"];return process.env.USER_TYPE==="ant"&&allowedHosts.push("api-staging.anthropic.com"),allowedHosts.includes(host)}catch{return!1}}var init_providers=__esm({"src/utils/model/providers.ts"(){init_envUtils();__name(getAPIProvider,"getAPIProvider");__name(getAPIProviderForStatsig,"getAPIProviderForStatsig");__name(isFirstPartyAnthropicBaseUrl,"isFirstPartyAnthropicBaseUrl")}});function getBuiltinModelStrings(provider){let out={};for(let key of MODEL_KEYS)out[key]=ALL_MODEL_CONFIGS[key][provider];return out}async function getBedrockModelStrings(){let fallback=getBuiltinModelStrings("bedrock"),profiles;try{profiles=await getBedrockInferenceProfiles()}catch(error40){return logError2(error40),fallback}if(!profiles?.length)return fallback;let out={};for(let key of MODEL_KEYS){let needle=ALL_MODEL_CONFIGS[key].firstParty;out[key]=findFirstMatch(profiles,needle)||fallback[key]}return out}function applyModelOverrides(ms){let overrides=getInitialSettings().modelOverrides;if(!overrides)return ms;let out={...ms};for(let[canonicalId,override]of Object.entries(overrides)){let key=CANONICAL_ID_TO_KEY[canonicalId];key&&override&&(out[key]=override)}return out}function resolveOverriddenModel(modelId){let overrides;try{overrides=getInitialSettings().modelOverrides}catch{return modelId}if(!overrides)return modelId;for(let[canonicalId,override]of Object.entries(overrides))if(override===modelId)return canonicalId;return modelId}function initModelStrings(){if(getModelStrings()===null){if(getAPIProvider()!=="bedrock"){setModelStrings(getBuiltinModelStrings(getAPIProvider()));return}updateBedrockModelStrings()}}function getModelStrings2(){let ms=getModelStrings();return ms===null?(initModelStrings(),applyModelOverrides(getBuiltinModelStrings(getAPIProvider()))):applyModelOverrides(ms)}async function ensureModelStringsInitialized(){if(getModelStrings()===null){if(getAPIProvider()!=="bedrock"){setModelStrings(getBuiltinModelStrings(getAPIProvider()));return}await updateBedrockModelStrings()}}var MODEL_KEYS,updateBedrockModelStrings,init_modelStrings=__esm({"src/utils/model/modelStrings.ts"(){init_state();init_log3();init_sequential();init_settings2();init_bedrock();init_configs();init_providers();MODEL_KEYS=Object.keys(ALL_MODEL_CONFIGS);__name(getBuiltinModelStrings,"getBuiltinModelStrings");__name(getBedrockModelStrings,"getBedrockModelStrings");__name(applyModelOverrides,"applyModelOverrides");__name(resolveOverriddenModel,"resolveOverriddenModel");updateBedrockModelStrings=sequential(async()=>{if(getModelStrings()===null)try{let ms=await getBedrockModelStrings();setModelStrings(ms)}catch(error40){logError2(error40)}});__name(initModelStrings,"initModelStrings");__name(getModelStrings2,"getModelStrings");__name(ensureModelStringsInitialized,"ensureModelStringsInitialized")}});function hasConsoleBillingAccess(){if(isEnvTruthy3(process.env.DISABLE_COST_WARNINGS)||isClaudeAISubscriber())return!1;let authSource=getAuthTokenSource(),hasApiKey=getAnthropicApiKey()!==null;if(!authSource.hasToken&&!hasApiKey)return!1;let config3=getGlobalConfig(),orgRole=config3.oauthAccount?.organizationRole,workspaceRole=config3.oauthAccount?.workspaceRole;return!orgRole||!workspaceRole?!1:["admin","billing"].includes(orgRole)||["workspace_admin","workspace_billing"].includes(workspaceRole)}function setMockBillingAccessOverride(value){mockBillingAccessOverride=value}function hasClaudeAiBillingAccess(){if(mockBillingAccessOverride!==null)return mockBillingAccessOverride;if(!isClaudeAISubscriber())return!1;let subscriptionType=getSubscriptionType();if(subscriptionType==="max"||subscriptionType==="pro")return!0;let orgRole=getGlobalConfig().oauthAccount?.organizationRole;return!!orgRole&&["admin","billing","owner","primary_owner"].includes(orgRole)}var mockBillingAccessOverride,init_billing=__esm({"src/utils/billing.ts"(){init_auth();init_config2();init_envUtils();__name(hasConsoleBillingAccess,"hasConsoleBillingAccess");mockBillingAccessOverride=null;__name(setMockBillingAccessOverride,"setMockBillingAccessOverride");__name(hasClaudeAiBillingAccess,"hasClaudeAiBillingAccess")}});function getMockHeaderless429Message(){return process.env.USER_TYPE!=="ant"?null:process.env.CLAUDE_MOCK_HEADERLESS_429?process.env.CLAUDE_MOCK_HEADERLESS_429:mockEnabled?mockHeaderless429Message:null}function getMockHeaders(){return!mockEnabled||process.env.USER_TYPE!=="ant"||Object.keys(mockHeaders).length===0?null:mockHeaders}function clearMockHeaders(){mockHeaders={},exceededLimits=[],mockSubscriptionType=null,mockFastModeRateLimitDurationMs=null,mockFastModeRateLimitExpiresAt=null,mockHeaderless429Message=null,setMockBillingAccessOverride(null),mockEnabled=!1}function applyMockHeaders(headers){let mock=getMockHeaders();if(!mock)return headers;let newHeaders=new globalThis.Headers(headers);return Object.entries(mock).forEach(([key,value])=>{value!==void 0&&newHeaders.set(key,value)}),newHeaders}function shouldProcessMockLimits(){return process.env.USER_TYPE!=="ant"?!1:mockEnabled||!!process.env.CLAUDE_MOCK_HEADERLESS_429}function getMockSubscriptionType(){return!mockEnabled||process.env.USER_TYPE!=="ant"?null:mockSubscriptionType||DEFAULT_MOCK_SUBSCRIPTION}function shouldUseMockSubscription(){return mockEnabled&&mockSubscriptionType!==null&&process.env.USER_TYPE==="ant"}function isMockFastModeRateLimitScenario(){return mockFastModeRateLimitDurationMs!==null}function checkMockFastModeRateLimit(isFastModeActive){if(mockFastModeRateLimitDurationMs===null||!isFastModeActive)return null;if(mockFastModeRateLimitExpiresAt!==null&&Date.now()>=mockFastModeRateLimitExpiresAt)return clearMockHeaders(),null;mockFastModeRateLimitExpiresAt===null&&(mockFastModeRateLimitExpiresAt=Date.now()+mockFastModeRateLimitDurationMs);let remainingMs=mockFastModeRateLimitExpiresAt-Date.now(),headersToSend={...mockHeaders};return headersToSend["retry-after"]=String(Math.max(1,Math.ceil(remainingMs/1e3))),headersToSend}var mockHeaders,mockEnabled,mockHeaderless429Message,mockSubscriptionType,mockFastModeRateLimitDurationMs,mockFastModeRateLimitExpiresAt,DEFAULT_MOCK_SUBSCRIPTION,exceededLimits,init_mockRateLimits=__esm({"src/services/mockRateLimits.ts"(){init_billing();mockHeaders={},mockEnabled=!1,mockHeaderless429Message=null,mockSubscriptionType=null,mockFastModeRateLimitDurationMs=null,mockFastModeRateLimitExpiresAt=null,DEFAULT_MOCK_SUBSCRIPTION="max",exceededLimits=[];__name(getMockHeaderless429Message,"getMockHeaderless429Message");__name(getMockHeaders,"getMockHeaders");__name(clearMockHeaders,"clearMockHeaders");__name(applyMockHeaders,"applyMockHeaders");__name(shouldProcessMockLimits,"shouldProcessMockLimits");__name(getMockSubscriptionType,"getMockSubscriptionType");__name(shouldUseMockSubscription,"shouldUseMockSubscription");__name(isMockFastModeRateLimitScenario,"isMockFastModeRateLimitScenario");__name(checkMockFastModeRateLimit,"checkMockFastModeRateLimit")}});async function getOauthProfileFromApiKey(){let accountUuid=getGlobalConfig().oauthAccount?.accountUuid,apiKey=getAnthropicApiKey();if(!accountUuid||!apiKey)return;let endpoint=`${getOauthConfig().BASE_API_URL}/api/claude_cli_profile`;try{return(await axios_default.get(endpoint,{headers:{"x-api-key":apiKey,"anthropic-beta":OAUTH_BETA_HEADER},params:{account_uuid:accountUuid},timeout:1e4})).data}catch(error40){logError2(error40)}}async function getOauthProfileFromOauthToken(accessToken){let endpoint=`${getOauthConfig().BASE_API_URL}/api/oauth/profile`;try{return(await axios_default.get(endpoint,{headers:{Authorization:`Bearer ${accessToken}`,"Content-Type":"application/json"},timeout:1e4})).data}catch(error40){logError2(error40)}}var init_getOauthProfile=__esm({"src/services/oauth/getOauthProfile.ts"(){init_axios2();init_oauth();init_auth();init_config2();init_log3();__name(getOauthProfileFromApiKey,"getOauthProfileFromApiKey");__name(getOauthProfileFromOauthToken,"getOauthProfileFromOauthToken")}});var client_exports={};__export(client_exports,{buildAuthUrl:()=>buildAuthUrl,createAndStoreApiKey:()=>createAndStoreApiKey,exchangeCodeForTokens:()=>exchangeCodeForTokens,fetchAndStoreUserRoles:()=>fetchAndStoreUserRoles,fetchProfileInfo:()=>fetchProfileInfo,getOrganizationUUID:()=>getOrganizationUUID,isOAuthTokenExpired:()=>isOAuthTokenExpired,parseScopes:()=>parseScopes,populateOAuthAccountInfoIfNeeded:()=>populateOAuthAccountInfoIfNeeded,refreshOAuthToken:()=>refreshOAuthToken,shouldUseClaudeAIAuth:()=>shouldUseClaudeAIAuth,storeOAuthAccountInfo:()=>storeOAuthAccountInfo});function shouldUseClaudeAIAuth(scopes){return!!scopes?.includes(CLAUDE_AI_INFERENCE_SCOPE)}function parseScopes(scopeString){return scopeString?.split(" ").filter(Boolean)??[]}function buildAuthUrl({codeChallenge,state:state2,port,isManual,loginWithClaudeAi,inferenceOnly,orgUUID,loginHint,loginMethod}){let authUrlBase=loginWithClaudeAi?getOauthConfig().CLAUDE_AI_AUTHORIZE_URL:getOauthConfig().CONSOLE_AUTHORIZE_URL,authUrl=new URL(authUrlBase);authUrl.searchParams.append("code","true"),authUrl.searchParams.append("client_id",getOauthConfig().CLIENT_ID),authUrl.searchParams.append("response_type","code"),authUrl.searchParams.append("redirect_uri",isManual?getOauthConfig().MANUAL_REDIRECT_URL:`http://localhost:${port}/callback`);let scopesToUse=inferenceOnly?[CLAUDE_AI_INFERENCE_SCOPE]:ALL_OAUTH_SCOPES;return authUrl.searchParams.append("scope",scopesToUse.join(" ")),authUrl.searchParams.append("code_challenge",codeChallenge),authUrl.searchParams.append("code_challenge_method","S256"),authUrl.searchParams.append("state",state2),orgUUID&&authUrl.searchParams.append("orgUUID",orgUUID),loginHint&&authUrl.searchParams.append("login_hint",loginHint),loginMethod&&authUrl.searchParams.append("login_method",loginMethod),authUrl.toString()}async function exchangeCodeForTokens(authorizationCode,state2,codeVerifier,port,useManualRedirect=!1,expiresIn){let requestBody={grant_type:"authorization_code",code:authorizationCode,redirect_uri:useManualRedirect?getOauthConfig().MANUAL_REDIRECT_URL:`http://localhost:${port}/callback`,client_id:getOauthConfig().CLIENT_ID,code_verifier:codeVerifier,state:state2};expiresIn!==void 0&&(requestBody.expires_in=expiresIn);let response=await axios_default.post(getOauthConfig().TOKEN_URL,requestBody,{headers:{"Content-Type":"application/json"},timeout:15e3});if(response.status!==200)throw new Error(response.status===401?"Authentication failed: Invalid authorization code":`Token exchange failed (${response.status}): ${response.statusText}`);return logEvent("tengu_oauth_token_exchange_success",{}),response.data}async function refreshOAuthToken(refreshToken,{scopes:requestedScopes}={}){let requestBody={grant_type:"refresh_token",refresh_token:refreshToken,client_id:getOauthConfig().CLIENT_ID,scope:(requestedScopes?.length?requestedScopes:CLAUDE_AI_OAUTH_SCOPES).join(" ")};try{let response=await axios_default.post(getOauthConfig().TOKEN_URL,requestBody,{headers:{"Content-Type":"application/json"},timeout:15e3});if(response.status!==200)throw new Error(`Token refresh failed: ${response.statusText}`);let data=response.data,{access_token:accessToken,refresh_token:newRefreshToken=refreshToken,expires_in:expiresIn}=data,expiresAt=Date.now()+expiresIn*1e3,scopes=parseScopes(data.scope);logEvent("tengu_oauth_token_refresh_success",{});let config3=getGlobalConfig(),existing=getClaudeAIOAuthTokens2(),profileInfo=config3.oauthAccount?.billingType!==void 0&&config3.oauthAccount?.accountCreatedAt!==void 0&&config3.oauthAccount?.subscriptionCreatedAt!==void 0&&existing?.subscriptionType!=null&&existing?.rateLimitTier!=null?null:await fetchProfileInfo(accessToken);if(profileInfo&&config3.oauthAccount){let updates={};profileInfo.displayName!==void 0&&(updates.displayName=profileInfo.displayName),typeof profileInfo.hasExtraUsageEnabled=="boolean"&&(updates.hasExtraUsageEnabled=profileInfo.hasExtraUsageEnabled),profileInfo.billingType!==null&&(updates.billingType=profileInfo.billingType),profileInfo.accountCreatedAt!==void 0&&(updates.accountCreatedAt=profileInfo.accountCreatedAt),profileInfo.subscriptionCreatedAt!==void 0&&(updates.subscriptionCreatedAt=profileInfo.subscriptionCreatedAt),Object.keys(updates).length>0&&saveGlobalConfig(current=>({...current,oauthAccount:current.oauthAccount?{...current.oauthAccount,...updates}:current.oauthAccount}))}return{accessToken,refreshToken:newRefreshToken,expiresAt,scopes,subscriptionType:profileInfo?.subscriptionType??existing?.subscriptionType??null,rateLimitTier:profileInfo?.rateLimitTier??existing?.rateLimitTier??null,profile:profileInfo?.rawProfile,tokenAccount:data.account?{uuid:data.account.uuid,emailAddress:data.account.email_address,organizationUuid:data.organization?.uuid}:void 0}}catch(error40){let responseBody=axios_default.isAxiosError(error40)&&error40.response?.data?JSON.stringify(error40.response.data):void 0;throw logEvent("tengu_oauth_token_refresh_failure",{error:error40.message,...responseBody&&{responseBody}}),error40}}async function fetchAndStoreUserRoles(accessToken){let response=await axios_default.get(getOauthConfig().ROLES_URL,{headers:{Authorization:`Bearer ${accessToken}`}});if(response.status!==200)throw new Error(`Failed to fetch user roles: ${response.statusText}`);let data=response.data;if(!getGlobalConfig().oauthAccount)throw new Error("OAuth account information not found in config");saveGlobalConfig(current=>({...current,oauthAccount:current.oauthAccount?{...current.oauthAccount,organizationRole:data.organization_role,workspaceRole:data.workspace_role,organizationName:data.organization_name}:current.oauthAccount})),logEvent("tengu_oauth_roles_stored",{org_role:data.organization_role})}async function createAndStoreApiKey(accessToken){try{let response=await axios_default.post(getOauthConfig().API_KEY_URL,null,{headers:{Authorization:`Bearer ${accessToken}`}}),apiKey=response.data?.raw_key;return apiKey?(await saveApiKey(apiKey),logEvent("tengu_oauth_api_key",{status:"success",statusCode:response.status}),apiKey):null}catch(error40){throw logEvent("tengu_oauth_api_key",{status:"failure",error:error40 instanceof Error?error40.message:String(error40)}),error40}}function isOAuthTokenExpired(expiresAt){if(expiresAt===null)return!1;let bufferTime=300*1e3;return Date.now()+bufferTime>=expiresAt}async function fetchProfileInfo(accessToken){let profile=await getOauthProfileFromOauthToken(accessToken),orgType=profile?.organization?.organization_type,subscriptionType=null;switch(orgType){case"claude_max":subscriptionType="max";break;case"claude_pro":subscriptionType="pro";break;case"claude_enterprise":subscriptionType="enterprise";break;case"claude_team":subscriptionType="team";break;default:subscriptionType=null;break}let result2={subscriptionType,rateLimitTier:profile?.organization?.rate_limit_tier??null,hasExtraUsageEnabled:profile?.organization?.has_extra_usage_enabled??null,billingType:profile?.organization?.billing_type??null};return profile?.account?.display_name&&(result2.displayName=profile.account.display_name),profile?.account?.created_at&&(result2.accountCreatedAt=profile.account.created_at),profile?.organization?.subscription_created_at&&(result2.subscriptionCreatedAt=profile.organization.subscription_created_at),logEvent("tengu_oauth_profile_fetch_success",{}),{...result2,rawProfile:profile}}async function getOrganizationUUID(){let orgUUID=getGlobalConfig().oauthAccount?.organizationUuid;if(orgUUID)return orgUUID;let accessToken=getClaudeAIOAuthTokens2()?.accessToken;if(accessToken===void 0||!hasProfileScope())return null;let profileOrgUUID=(await getOauthProfileFromOauthToken(accessToken))?.organization?.uuid;return profileOrgUUID||null}async function populateOAuthAccountInfoIfNeeded(){let envAccountUuid=process.env.CLAUDE_CODE_ACCOUNT_UUID,envUserEmail=process.env.CLAUDE_CODE_USER_EMAIL,envOrganizationUuid=process.env.CLAUDE_CODE_ORGANIZATION_UUID,hasEnvVars=!!(envAccountUuid&&envUserEmail&&envOrganizationUuid);envAccountUuid&&envUserEmail&&envOrganizationUuid&&(getGlobalConfig().oauthAccount||storeOAuthAccountInfo({accountUuid:envAccountUuid,emailAddress:envUserEmail,organizationUuid:envOrganizationUuid})),await checkAndRefreshOAuthTokenIfNeeded();let config3=getGlobalConfig();if(config3.oauthAccount&&config3.oauthAccount.billingType!==void 0&&config3.oauthAccount.accountCreatedAt!==void 0&&config3.oauthAccount.subscriptionCreatedAt!==void 0||!isClaudeAISubscriber()||!hasProfileScope())return!1;let tokens=getClaudeAIOAuthTokens2();if(tokens?.accessToken){let profile=await getOauthProfileFromOauthToken(tokens.accessToken);if(profile)return hasEnvVars&&logForDebugging("OAuth profile fetch succeeded, overriding env var account info",{level:"info"}),storeOAuthAccountInfo({accountUuid:profile.account.uuid,emailAddress:profile.account.email,organizationUuid:profile.organization.uuid,displayName:profile.account.display_name||void 0,hasExtraUsageEnabled:profile.organization.has_extra_usage_enabled??!1,billingType:profile.organization.billing_type??void 0,accountCreatedAt:profile.account.created_at,subscriptionCreatedAt:profile.organization.subscription_created_at??void 0}),!0}return!1}function storeOAuthAccountInfo({accountUuid,emailAddress,organizationUuid,displayName,hasExtraUsageEnabled,billingType,accountCreatedAt,subscriptionCreatedAt}){let accountInfo={accountUuid,emailAddress,organizationUuid,hasExtraUsageEnabled,billingType,accountCreatedAt,subscriptionCreatedAt};displayName&&(accountInfo.displayName=displayName),saveGlobalConfig(current=>current.oauthAccount?.accountUuid===accountInfo.accountUuid&¤t.oauthAccount?.emailAddress===accountInfo.emailAddress&¤t.oauthAccount?.organizationUuid===accountInfo.organizationUuid&¤t.oauthAccount?.displayName===accountInfo.displayName&¤t.oauthAccount?.hasExtraUsageEnabled===accountInfo.hasExtraUsageEnabled&¤t.oauthAccount?.billingType===accountInfo.billingType&¤t.oauthAccount?.accountCreatedAt===accountInfo.accountCreatedAt&¤t.oauthAccount?.subscriptionCreatedAt===accountInfo.subscriptionCreatedAt?current:{...current,oauthAccount:accountInfo})}var init_client2=__esm({"src/services/oauth/client.ts"(){init_axios2();init_analytics();init_oauth();init_auth();init_config2();init_debug();init_getOauthProfile();__name(shouldUseClaudeAIAuth,"shouldUseClaudeAIAuth");__name(parseScopes,"parseScopes");__name(buildAuthUrl,"buildAuthUrl");__name(exchangeCodeForTokens,"exchangeCodeForTokens");__name(refreshOAuthToken,"refreshOAuthToken");__name(fetchAndStoreUserRoles,"fetchAndStoreUserRoles");__name(createAndStoreApiKey,"createAndStoreApiKey");__name(isOAuthTokenExpired,"isOAuthTokenExpired");__name(fetchProfileInfo,"fetchProfileInfo");__name(getOrganizationUUID,"getOrganizationUUID");__name(populateOAuthAccountInfoIfNeeded,"populateOAuthAccountInfoIfNeeded");__name(storeOAuthAccountInfo,"storeOAuthAccountInfo")}});import{mkdirSync as mkdirSync2,writeFileSync as writeFileSync2}from"fs";function maybePersistTokenForSubprocesses(path25,token,tokenName){if(isEnvTruthy3(process.env.CLAUDE_CODE_REMOTE))try{mkdirSync2(CCR_TOKEN_DIR,{recursive:!0,mode:448}),writeFileSync2(path25,token,{encoding:"utf8",mode:384}),logForDebugging(`Persisted ${tokenName} to ${path25} for subprocess access`)}catch(error40){logForDebugging(`Failed to persist ${tokenName} to disk (non-fatal): ${errorMessage(error40)}`,{level:"error"})}}function readTokenFromWellKnownFile(path25,tokenName){try{let token=getFsImplementation().readFileSync(path25,{encoding:"utf8"}).trim();return token?(logForDebugging(`Read ${tokenName} from well-known file ${path25}`),token):null}catch(error40){return isENOENT(error40)||logForDebugging(`Failed to read ${tokenName} from ${path25}: ${errorMessage(error40)}`,{level:"debug"}),null}}function getCredentialFromFd({envVar,wellKnownPath,label,getCached,setCached}){let cached3=getCached();if(cached3!==void 0)return cached3;let fdEnv=process.env[envVar];if(!fdEnv){let fromFile2=readTokenFromWellKnownFile(wellKnownPath,label);return setCached(fromFile2),fromFile2}let fd2=parseInt(fdEnv,10);if(Number.isNaN(fd2))return logForDebugging(`${envVar} must be a valid file descriptor number, got: ${fdEnv}`,{level:"error"}),setCached(null),null;try{let fsOps=getFsImplementation(),fdPath=process.platform==="darwin"||process.platform==="freebsd"?`/dev/fd/${fd2}`:`/proc/self/fd/${fd2}`,token=fsOps.readFileSync(fdPath,{encoding:"utf8"}).trim();return token?(logForDebugging(`Successfully read ${label} from file descriptor ${fd2}`),setCached(token),maybePersistTokenForSubprocesses(wellKnownPath,token,label),token):(logForDebugging(`File descriptor contained empty ${label}`,{level:"error"}),setCached(null),null)}catch(error40){logForDebugging(`Failed to read ${label} from file descriptor ${fd2}: ${errorMessage(error40)}`,{level:"error"});let fromFile2=readTokenFromWellKnownFile(wellKnownPath,label);return setCached(fromFile2),fromFile2}}function getOAuthTokenFromFileDescriptor(){return getCredentialFromFd({envVar:"CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR",wellKnownPath:CCR_OAUTH_TOKEN_PATH,label:"OAuth token",getCached:getOauthTokenFromFd,setCached:setOauthTokenFromFd})}function getApiKeyFromFileDescriptor(){return getCredentialFromFd({envVar:"CLAUDE_CODE_API_KEY_FILE_DESCRIPTOR",wellKnownPath:CCR_API_KEY_PATH,label:"API key",getCached:getApiKeyFromFd,setCached:setApiKeyFromFd})}var CCR_TOKEN_DIR,CCR_OAUTH_TOKEN_PATH,CCR_API_KEY_PATH,CCR_SESSION_INGRESS_TOKEN_PATH,init_authFileDescriptor=__esm({"src/utils/authFileDescriptor.ts"(){init_state();init_debug();init_envUtils();init_errors2();init_fsOperations();CCR_TOKEN_DIR="/home/claude/.\u0063laude/remote",CCR_OAUTH_TOKEN_PATH=`${CCR_TOKEN_DIR}/.oauth_token`,CCR_API_KEY_PATH=`${CCR_TOKEN_DIR}/.api_key`,CCR_SESSION_INGRESS_TOKEN_PATH=`${CCR_TOKEN_DIR}/.session_ingress_token`;__name(maybePersistTokenForSubprocesses,"maybePersistTokenForSubprocesses");__name(readTokenFromWellKnownFile,"readTokenFromWellKnownFile");__name(getCredentialFromFd,"getCredentialFromFd");__name(getOAuthTokenFromFileDescriptor,"getOAuthTokenFromFileDescriptor");__name(getApiKeyFromFileDescriptor,"getApiKeyFromFileDescriptor")}});import{createHash as createHash2}from"crypto";import{userInfo as userInfo2}from"os";function getMacOsKeychainStorageServiceName(serviceSuffix=""){let configDir=getClaudeConfigHomeDir(),dirHash=!process.env.CLAVUE_CONFIG_DIR?"":`-${createHash2("sha256").update(configDir).digest("hex").substring(0,8)}`;return`Claude Code${getOauthConfig().OAUTH_FILE_SUFFIX}${serviceSuffix}${dirHash}`}function getUsername(){try{return process.env.USER||userInfo2().username}catch{return"claude-code-user"}}function clearKeychainCache(){keychainCacheState.cache={data:null,cachedAt:0},keychainCacheState.generation++,keychainCacheState.readInFlight=null}function primeKeychainCacheFromPrefetch(stdout){if(keychainCacheState.cache.cachedAt!==0)return;let data=null;if(stdout)try{data=JSON.parse(stdout)}catch{return}keychainCacheState.cache={data,cachedAt:Date.now()}}var CREDENTIALS_SERVICE_SUFFIX,KEYCHAIN_CACHE_TTL_MS,keychainCacheState,init_macOsKeychainHelpers=__esm({"src/utils/secureStorage/macOsKeychainHelpers.ts"(){init_oauth();init_envUtils();CREDENTIALS_SERVICE_SUFFIX="-credentials";__name(getMacOsKeychainStorageServiceName,"getMacOsKeychainStorageServiceName");__name(getUsername,"getUsername");KEYCHAIN_CACHE_TTL_MS=3e4,keychainCacheState={cache:{data:null,cachedAt:0},generation:0,readInFlight:null};__name(clearKeychainCache,"clearKeychainCache");__name(primeKeychainCacheFromPrefetch,"primeKeychainCacheFromPrefetch")}});async function maybeRemoveApiKeyFromMacOSKeychainThrows(){if(process.platform==="darwin"&&shouldUseMacOSKeychain()){let storageServiceName=getMacOsKeychainStorageServiceName();if((await execa(`security delete-generic-password -a $USER -s "${storageServiceName}"`,{shell:!0,reject:!1})).exitCode!==0)throw new Error("Failed to delete keychain entry")}}function normalizeApiKeyForConfig(apiKey){return apiKey.slice(-20)}var init_authPortable=__esm({"src/utils/authPortable.ts"(){init_execa();init_envUtils();init_macOsKeychainHelpers();__name(maybeRemoveApiKeyFromMacOSKeychainThrows,"maybeRemoveApiKeyFromMacOSKeychainThrows");__name(normalizeApiKeyForConfig,"normalizeApiKeyForConfig")}});function isAwsCredentialsProviderError(err2){return err2?.name==="CredentialsProviderError"}function isValidAwsStsOutput(obj){if(!obj||typeof obj!="object")return!1;let output=obj;if(!output.Credentials||typeof output.Credentials!="object")return!1;let credentials=output.Credentials;return typeof credentials.AccessKeyId=="string"&&typeof credentials.SecretAccessKey=="string"&&typeof credentials.SessionToken=="string"&&credentials.AccessKeyId.length>0&&credentials.SecretAccessKey.length>0&&credentials.SessionToken.length>0}async function checkStsCallerIdentity(){let{STSClient,GetCallerIdentityCommand}=await import("@aws-sdk/client-sts");await new STSClient().send(new GetCallerIdentityCommand({}))}async function clearAwsIniCache(){try{logForDebugging("Clearing AWS credential provider cache");let{fromIni}=await import("@aws-sdk/credential-providers");await fromIni({ignoreCache:!0})(),logForDebugging("AWS credential provider cache refreshed")}catch{logForDebugging("Failed to clear AWS credential cache (this is expected if no credentials are configured)")}}var init_aws=__esm({"src/utils/aws.ts"(){init_debug();__name(isAwsCredentialsProviderError,"isAwsCredentialsProviderError");__name(isValidAwsStsOutput,"isValidAwsStsOutput");__name(checkStsCallerIdentity,"checkStsCallerIdentity");__name(clearAwsIniCache,"clearAwsIniCache")}});var AwsAuthStatusManager,init_awsAuthStatusManager=__esm({"src/utils/awsAuthStatusManager.ts"(){init_signal();AwsAuthStatusManager=class _AwsAuthStatusManager{static{__name(this,"AwsAuthStatusManager")}static instance=null;status={isAuthenticating:!1,output:[]};changed=createSignal();static getInstance(){return _AwsAuthStatusManager.instance||(_AwsAuthStatusManager.instance=new _AwsAuthStatusManager),_AwsAuthStatusManager.instance}getStatus(){return{...this.status,output:[...this.status.output]}}startAuthentication(){this.status={isAuthenticating:!0,output:[]},this.changed.emit(this.getStatus())}addOutput(line){this.status.output.push(line),this.changed.emit(this.getStatus())}setError(error40){this.status.error=error40,this.changed.emit(this.getStatus())}endAuthentication(success2){success2?this.status={isAuthenticating:!1,output:[]}:this.status.isAuthenticating=!1,this.changed.emit(this.getStatus())}subscribe=this.changed.subscribe;static reset(){_AwsAuthStatusManager.instance&&(_AwsAuthStatusManager.instance.changed.clear(),_AwsAuthStatusManager.instance=null)}}}});var CLAUDE_CODE_20250219_BETA_HEADER,INTERLEAVED_THINKING_BETA_HEADER,CONTEXT_1M_BETA_HEADER,CONTEXT_MANAGEMENT_BETA_HEADER,STRUCTURED_OUTPUTS_BETA_HEADER,WEB_SEARCH_BETA_HEADER,TOOL_SEARCH_BETA_HEADER_1P,TOOL_SEARCH_BETA_HEADER_3P,EFFORT_BETA_HEADER,TASK_BUDGETS_BETA_HEADER,PROMPT_CACHING_SCOPE_BETA_HEADER,FAST_MODE_BETA_HEADER,REDACT_THINKING_BETA_HEADER,TOKEN_EFFICIENT_TOOLS_BETA_HEADER,SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER,AFK_MODE_BETA_HEADER,CLI_INTERNAL_BETA_HEADER,ADVISOR_BETA_HEADER,BEDROCK_EXTRA_PARAMS_HEADERS,VERTEX_COUNT_TOKENS_ALLOWED_BETAS,init_betas=__esm({"src/constants/betas.ts"(){CLAUDE_CODE_20250219_BETA_HEADER="claude-code-20250219",INTERLEAVED_THINKING_BETA_HEADER="interleaved-thinking-2025-05-14",CONTEXT_1M_BETA_HEADER="context-1m-2025-08-07",CONTEXT_MANAGEMENT_BETA_HEADER="context-management-2025-06-27",STRUCTURED_OUTPUTS_BETA_HEADER="structured-outputs-2025-12-15",WEB_SEARCH_BETA_HEADER="web-search-2025-03-05",TOOL_SEARCH_BETA_HEADER_1P="advanced-tool-use-2025-11-20",TOOL_SEARCH_BETA_HEADER_3P="tool-search-tool-2025-10-19",EFFORT_BETA_HEADER="effort-2025-11-24",TASK_BUDGETS_BETA_HEADER="task-budgets-2026-03-13",PROMPT_CACHING_SCOPE_BETA_HEADER="prompt-caching-scope-2026-01-05",FAST_MODE_BETA_HEADER="fast-mode-2026-02-01",REDACT_THINKING_BETA_HEADER="redact-thinking-2026-02-12",TOKEN_EFFICIENT_TOOLS_BETA_HEADER="token-efficient-tools-2026-03-28",SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER="",AFK_MODE_BETA_HEADER="afk-mode-2026-01-31",CLI_INTERNAL_BETA_HEADER=process.env.USER_TYPE==="ant"?"cli-internal-2026-02-09":"",ADVISOR_BETA_HEADER="advisor-tool-2026-03-01",BEDROCK_EXTRA_PARAMS_HEADERS=new Set([INTERLEAVED_THINKING_BETA_HEADER,CONTEXT_1M_BETA_HEADER,TOOL_SEARCH_BETA_HEADER_3P]),VERTEX_COUNT_TOKENS_ALLOWED_BETAS=new Set([CLAUDE_CODE_20250219_BETA_HEADER,INTERLEAVED_THINKING_BETA_HEADER,CONTEXT_MANAGEMENT_BETA_HEADER])}});function isFastModeEnabled(){return!isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_FAST_MODE)}function isFastModeAvailable(){return isFastModeEnabled()?getFastModeUnavailableReason()===null:!1}function getDisabledReasonMessage(disabledReason,authType){switch(disabledReason){case"free":return authType==="oauth"?"Fast mode requires a paid subscription":"Fast mode unavailable during evaluation. Please purchase credits.";case"preference":return"Fast mode has been disabled by your organization";case"extra_usage_disabled":return"Fast mode requires extra usage billing \xB7 /extra-usage to enable";case"network_error":return"Fast mode unavailable due to network connectivity issues";case"unknown":return"Fast mode is currently unavailable"}}function getFastModeUnavailableReason(){if(!isFastModeEnabled())return"Fast mode is not available";let statigReason=getFeatureValue_CACHED_MAY_BE_STALE("tengu_penguins_off",null);if(statigReason!==null)return logForDebugging(`Fast mode unavailable: ${statigReason}`),statigReason;if(!isInBundledMode()&&getFeatureValue_CACHED_MAY_BE_STALE("tengu_marble_sandcastle",!1))return"Fast mode requires the native binary \xB7 Install from: https://claude.com/product/claude-code";if(getIsNonInteractiveSession()&&preferThirdPartyAuthentication()&&!getKairosActive()&&!getSettingsForSource("flagSettings")?.fastMode){let reason="Fast mode is not available in the Agent SDK";return logForDebugging(`Fast mode unavailable: ${reason}`),reason}if(getAPIProvider()!=="firstParty"){let reason="Fast mode is not available on Bedrock, Vertex, or Foundry";return logForDebugging(`Fast mode unavailable: ${reason}`),reason}if(orgStatus.status==="disabled"){if((orgStatus.reason==="network_error"||orgStatus.reason==="unknown")&&isEnvTruthy3(process.env.CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS))return null;let authType=getClaudeAIOAuthTokens2()!==null?"oauth":"api-key",reason=getDisabledReasonMessage(orgStatus.reason,authType);return logForDebugging(`Fast mode unavailable: ${reason}`),reason}return null}function getFastModeModel(){return"opus"+(isOpus1mMergeEnabled()?"[1m]":"")}function getInitialFastModeSetting(model){if(!isFastModeEnabled()||!isFastModeAvailable()||!isFastModeSupportedByModel(model))return!1;let settings=getInitialSettings();return settings.fastModePerSessionOptIn?!1:settings.fastMode===!0}function isFastModeSupportedByModel(modelSetting){if(!isFastModeEnabled())return!1;let model=modelSetting??getDefaultMainLoopModelSetting();return parseUserSpecifiedModel(model).toLowerCase().includes("opus-4-6")}function getFastModeRuntimeState(){return runtimeState.status==="cooldown"&&Date.now()>=runtimeState.resetAt&&(isFastModeEnabled()&&!hasLoggedCooldownExpiry&&(logForDebugging("Fast mode cooldown expired, re-enabling fast mode"),hasLoggedCooldownExpiry=!0,cooldownExpired.emit()),runtimeState={status:"active"}),runtimeState}function triggerFastModeCooldown(resetTimestamp,reason){if(!isFastModeEnabled())return;runtimeState={status:"cooldown",resetAt:resetTimestamp,reason},hasLoggedCooldownExpiry=!1;let cooldownDurationMs=resetTimestamp-Date.now();logForDebugging(`Fast mode cooldown triggered (${reason}), duration ${Math.round(cooldownDurationMs/1e3)}s`),logEvent("tengu_fast_mode_fallback_triggered",{cooldown_duration_ms:cooldownDurationMs,cooldown_reason:reason}),cooldownTriggered.emit(resetTimestamp,reason)}function clearFastModeCooldown(){runtimeState={status:"active"}}function handleFastModeRejectedByAPI(){orgStatus.status!=="disabled"&&(orgStatus={status:"disabled",reason:"preference"},updateSettingsForSource("userSettings",{fastMode:void 0}),saveGlobalConfig(current=>({...current,penguinModeOrgEnabled:!1})),orgFastModeChange.emit(!1))}function getOverageDisabledMessage(reason){switch(reason){case"out_of_credits":return"Fast mode disabled \xB7 extra usage credits exhausted";case"org_level_disabled":case"org_service_level_disabled":return"Fast mode disabled \xB7 extra usage disabled by your organization";case"org_level_disabled_until":return"Fast mode disabled \xB7 extra usage spending cap reached";case"member_level_disabled":return"Fast mode disabled \xB7 extra usage disabled for your account";case"seat_tier_level_disabled":case"seat_tier_zero_credit_limit":case"member_zero_credit_limit":return"Fast mode disabled \xB7 extra usage not available for your plan";case"overage_not_provisioned":case"no_limits_configured":return"Fast mode requires extra usage billing \xB7 /extra-usage to enable";default:return"Fast mode disabled \xB7 extra usage not available"}}function isOutOfCreditsReason(reason){return reason==="org_level_disabled_until"||reason==="out_of_credits"}function handleFastModeOverageRejection(reason){let message=getOverageDisabledMessage(reason);logForDebugging(`Fast mode overage rejection: ${reason??"unknown"} \u2014 ${message}`),logEvent("tengu_fast_mode_overage_rejected",{overage_disabled_reason:reason??"unknown"}),isOutOfCreditsReason(reason)||(updateSettingsForSource("userSettings",{fastMode:void 0}),saveGlobalConfig(current=>({...current,penguinModeOrgEnabled:!1}))),overageRejection.emit(message)}function isFastModeCooldown(){return getFastModeRuntimeState().status==="cooldown"}function getFastModeState(model,fastModeUserEnabled){let enabled=isFastModeEnabled()&&isFastModeAvailable()&&!!fastModeUserEnabled&&isFastModeSupportedByModel(model);return enabled&&isFastModeCooldown()?"cooldown":enabled?"on":"off"}async function fetchFastModeStatus(auth2){let endpoint=`${getOauthConfig().BASE_API_URL}/api/claude_code_penguin_mode`,headers="accessToken"in auth2?{Authorization:`Bearer ${auth2.accessToken}`,"anthropic-beta":OAUTH_BETA_HEADER}:{"x-api-key":auth2.apiKey};return(await axios_default.get(endpoint,{headers})).data}function resolveFastModeStatusFromCache(){if(!isFastModeEnabled()||orgStatus.status!=="pending")return;let isAnt=process.env.USER_TYPE==="ant",cachedEnabled=getGlobalConfig().penguinModeOrgEnabled===!0;orgStatus=isAnt||cachedEnabled?{status:"enabled"}:{status:"disabled",reason:"unknown"}}async function prefetchFastModeStatus(){if(isEssentialTrafficOnly()||!isFastModeEnabled())return;if(inflightPrefetch)return logForDebugging("Fast mode prefetch in progress, returning in-flight promise"),inflightPrefetch;let apiKey=getAnthropicApiKey();if(!(getClaudeAIOAuthTokens2()?.accessToken&&hasProfileScope())&&!apiKey){let isAnt=process.env.USER_TYPE==="ant",cachedEnabled=getGlobalConfig().penguinModeOrgEnabled===!0;orgStatus=isAnt||cachedEnabled?{status:"enabled"}:{status:"disabled",reason:"preference"};return}let now2=Date.now();if(now2-lastPrefetchAt<PREFETCH_MIN_INTERVAL_MS){logForDebugging("Skipping fast mode prefetch, fetched recently");return}lastPrefetchAt=now2;let fetchWithCurrentAuth=__name(async()=>{let currentTokens=getClaudeAIOAuthTokens2(),auth2=currentTokens?.accessToken&&hasProfileScope()?{accessToken:currentTokens.accessToken}:apiKey?{apiKey}:null;if(!auth2)throw new Error("No auth available");return fetchFastModeStatus(auth2)},"fetchWithCurrentAuth");async function doFetch(){try{let status2;try{status2=await fetchWithCurrentAuth()}catch(err2){if(axios_default.isAxiosError(err2)&&(err2.response?.status===401||err2.response?.status===403&&typeof err2.response?.data=="string"&&err2.response.data.includes("OAuth token has been revoked"))){let failedAccessToken=getClaudeAIOAuthTokens2()?.accessToken;if(failedAccessToken)await handleOAuth401Error(failedAccessToken),status2=await fetchWithCurrentAuth();else throw err2}else throw err2}let previousEnabled=orgStatus.status!=="pending"?orgStatus.status==="enabled":getGlobalConfig().penguinModeOrgEnabled;orgStatus=status2.enabled?{status:"enabled"}:{status:"disabled",reason:status2.disabled_reason??"preference"},previousEnabled!==status2.enabled&&(status2.enabled||updateSettingsForSource("userSettings",{fastMode:void 0}),saveGlobalConfig(current=>({...current,penguinModeOrgEnabled:status2.enabled})),orgFastModeChange.emit(status2.enabled)),logForDebugging(`Org fast mode: ${status2.enabled?"enabled":`disabled (${status2.disabled_reason??"preference"})`}`)}catch(err2){let isAnt=process.env.USER_TYPE==="ant",cachedEnabled=getGlobalConfig().penguinModeOrgEnabled===!0;orgStatus=isAnt||cachedEnabled?{status:"enabled"}:{status:"disabled",reason:"network_error"},logForDebugging(`Failed to fetch org fast mode status, defaulting to ${orgStatus.status==="enabled"?"enabled (cached)":"disabled (network_error)"}: ${err2}`,{level:"error"}),logEvent("tengu_org_penguin_mode_fetch_failed",{})}finally{inflightPrefetch=null}}return __name(doFetch,"doFetch"),inflightPrefetch=doFetch(),inflightPrefetch}var FAST_MODE_MODEL_DISPLAY,runtimeState,hasLoggedCooldownExpiry,cooldownTriggered,cooldownExpired,onCooldownTriggered,onCooldownExpired,overageRejection,onFastModeOverageRejection,orgStatus,orgFastModeChange,onOrgFastModeChanged,PREFETCH_MIN_INTERVAL_MS,lastPrefetchAt,inflightPrefetch,init_fastMode=__esm({"src/utils/fastMode.ts"(){init_axios2();init_oauth();init_growthbook();init_state();init_analytics();init_auth();init_bundledMode();init_config2();init_debug();init_envUtils();init_model();init_providers();init_privacyLevel();init_settings2();init_signal();__name(isFastModeEnabled,"isFastModeEnabled");__name(isFastModeAvailable,"isFastModeAvailable");__name(getDisabledReasonMessage,"getDisabledReasonMessage");__name(getFastModeUnavailableReason,"getFastModeUnavailableReason");FAST_MODE_MODEL_DISPLAY="Opus 4.6";__name(getFastModeModel,"getFastModeModel");__name(getInitialFastModeSetting,"getInitialFastModeSetting");__name(isFastModeSupportedByModel,"isFastModeSupportedByModel");runtimeState={status:"active"},hasLoggedCooldownExpiry=!1,cooldownTriggered=createSignal(),cooldownExpired=createSignal(),onCooldownTriggered=cooldownTriggered.subscribe,onCooldownExpired=cooldownExpired.subscribe;__name(getFastModeRuntimeState,"getFastModeRuntimeState");__name(triggerFastModeCooldown,"triggerFastModeCooldown");__name(clearFastModeCooldown,"clearFastModeCooldown");__name(handleFastModeRejectedByAPI,"handleFastModeRejectedByAPI");overageRejection=createSignal(),onFastModeOverageRejection=overageRejection.subscribe;__name(getOverageDisabledMessage,"getOverageDisabledMessage");__name(isOutOfCreditsReason,"isOutOfCreditsReason");__name(handleFastModeOverageRejection,"handleFastModeOverageRejection");__name(isFastModeCooldown,"isFastModeCooldown");__name(getFastModeState,"getFastModeState");orgStatus={status:"pending"},orgFastModeChange=createSignal(),onOrgFastModeChanged=orgFastModeChange.subscribe;__name(fetchFastModeStatus,"fetchFastModeStatus");PREFETCH_MIN_INTERVAL_MS=3e4,lastPrefetchAt=0,inflightPrefetch=null;__name(resolveFastModeStatusFromCache,"resolveFastModeStatusFromCache");__name(prefetchFastModeStatus,"prefetchFastModeStatus")}});function getOpus46CostTier(fastMode){return isFastModeEnabled()&&fastMode?COST_TIER_30_150:COST_TIER_5_25}function tokensToUSDCost(modelCosts,usage){return usage.input_tokens/1e6*modelCosts.inputTokens+usage.output_tokens/1e6*modelCosts.outputTokens+(usage.cache_read_input_tokens??0)/1e6*modelCosts.promptCacheReadTokens+(usage.cache_creation_input_tokens??0)/1e6*modelCosts.promptCacheWriteTokens+(usage.server_tool_use?.web_search_requests??0)*modelCosts.webSearchRequests}function getModelCosts(model,usage){let shortName=getCanonicalName(model);if(shortName===firstPartyNameToCanonical(CLAUDE_OPUS_4_6_CONFIG.firstParty)){let isFastMode=usage.speed==="fast";return getOpus46CostTier(isFastMode)}let costs=MODEL_COSTS[shortName];return costs||(trackUnknownModelCost(model,shortName),MODEL_COSTS[getCanonicalName(getDefaultMainLoopModelSetting())]??DEFAULT_UNKNOWN_MODEL_COST)}function trackUnknownModelCost(model,shortName){logEvent("tengu_unknown_model_cost",{model,shortName}),setHasUnknownModelCost()}function calculateUSDCost(resolvedModel,usage){let modelCosts=getModelCosts(resolvedModel,usage);return tokensToUSDCost(modelCosts,usage)}function calculateCostFromTokens(model,tokens){let usage={input_tokens:tokens.inputTokens,output_tokens:tokens.outputTokens,cache_read_input_tokens:tokens.cacheReadInputTokens,cache_creation_input_tokens:tokens.cacheCreationInputTokens};return calculateUSDCost(model,usage)}function formatPrice(price){return Number.isInteger(price)?`$${price}`:`$${price.toFixed(2)}`}function formatModelPricing(costs){return`${formatPrice(costs.inputTokens)}/${formatPrice(costs.outputTokens)} per Mtok`}var COST_TIER_3_15,COST_TIER_15_75,COST_TIER_5_25,COST_TIER_30_150,COST_HAIKU_35,COST_HAIKU_45,DEFAULT_UNKNOWN_MODEL_COST,MODEL_COSTS,init_modelCost=__esm({"src/utils/modelCost.ts"(){init_analytics();init_state();init_fastMode();init_configs();init_model();COST_TIER_3_15={inputTokens:3,outputTokens:15,promptCacheWriteTokens:3.75,promptCacheReadTokens:.3,webSearchRequests:.01},COST_TIER_15_75={inputTokens:15,outputTokens:75,promptCacheWriteTokens:18.75,promptCacheReadTokens:1.5,webSearchRequests:.01},COST_TIER_5_25={inputTokens:5,outputTokens:25,promptCacheWriteTokens:6.25,promptCacheReadTokens:.5,webSearchRequests:.01},COST_TIER_30_150={inputTokens:30,outputTokens:150,promptCacheWriteTokens:37.5,promptCacheReadTokens:3,webSearchRequests:.01},COST_HAIKU_35={inputTokens:.8,outputTokens:4,promptCacheWriteTokens:1,promptCacheReadTokens:.08,webSearchRequests:.01},COST_HAIKU_45={inputTokens:1,outputTokens:5,promptCacheWriteTokens:1.25,promptCacheReadTokens:.1,webSearchRequests:.01},DEFAULT_UNKNOWN_MODEL_COST=COST_TIER_5_25;__name(getOpus46CostTier,"getOpus46CostTier");MODEL_COSTS={[firstPartyNameToCanonical(CLAUDE_3_5_HAIKU_CONFIG.firstParty)]:COST_HAIKU_35,[firstPartyNameToCanonical(CLAUDE_HAIKU_4_5_CONFIG.firstParty)]:COST_HAIKU_45,[firstPartyNameToCanonical(CLAUDE_3_5_V2_SONNET_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_3_7_SONNET_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_SONNET_4_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_SONNET_4_5_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_SONNET_4_6_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_OPUS_4_CONFIG.firstParty)]:COST_TIER_15_75,[firstPartyNameToCanonical(CLAUDE_OPUS_4_1_CONFIG.firstParty)]:COST_TIER_15_75,[firstPartyNameToCanonical(CLAUDE_OPUS_4_5_CONFIG.firstParty)]:COST_TIER_5_25,[firstPartyNameToCanonical(CLAUDE_OPUS_4_6_CONFIG.firstParty)]:COST_TIER_5_25};__name(tokensToUSDCost,"tokensToUSDCost");__name(getModelCosts,"getModelCosts");__name(trackUnknownModelCost,"trackUnknownModelCost");__name(calculateUSDCost,"calculateUSDCost");__name(calculateCostFromTokens,"calculateCostFromTokens");__name(formatPrice,"formatPrice");__name(formatModelPricing,"formatModelPricing")}});function isModelAlias(modelInput){return MODEL_ALIASES.includes(modelInput)}function isModelFamilyAlias(model){return MODEL_FAMILY_ALIASES.includes(model)}var MODEL_ALIASES,MODEL_FAMILY_ALIASES,init_aliases=__esm({"src/utils/model/aliases.ts"(){MODEL_ALIASES=["sonnet","opus","haiku","best","sonnet[1m]","opus[1m]","opusplan"];__name(isModelAlias,"isModelAlias");MODEL_FAMILY_ALIASES=["sonnet","opus","haiku"];__name(isModelFamilyAlias,"isModelFamilyAlias")}});function modelBelongsToFamily(model,family){return model.includes(family)?!0:isModelAlias(model)?parseUserSpecifiedModel(model).toLowerCase().includes(family):!1}function prefixMatchesModel(modelName,prefix){return modelName.startsWith(prefix)?modelName.length===prefix.length||modelName[prefix.length]==="-":!1}function modelMatchesVersionPrefix(model,entry){let resolvedModel=isModelAlias(model)?parseUserSpecifiedModel(model).toLowerCase():model;return!!(prefixMatchesModel(resolvedModel,entry)||!entry.startsWith("claude-")&&prefixMatchesModel(resolvedModel,`claude-${entry}`))}function familyHasSpecificEntries(family,allowlist){for(let entry of allowlist){if(isModelFamilyAlias(entry))continue;let idx=entry.indexOf(family);if(idx===-1)continue;let afterFamily=idx+family.length;if(afterFamily===entry.length||entry[afterFamily]==="-")return!0}return!1}function isModelAllowed(model){let settings=getSettings_DEPRECATED()||{},{availableModels}=settings;if(!availableModels)return!0;if(availableModels.length===0)return!1;let normalizedModel2=resolveOverriddenModel(model).trim().toLowerCase(),normalizedAllowlist=availableModels.map(m3=>m3.trim().toLowerCase());if(normalizedAllowlist.includes(normalizedModel2)&&(!isModelFamilyAlias(normalizedModel2)||!familyHasSpecificEntries(normalizedModel2,normalizedAllowlist)))return!0;for(let entry of normalizedAllowlist)if(isModelFamilyAlias(entry)&&!familyHasSpecificEntries(entry,normalizedAllowlist)&&modelBelongsToFamily(normalizedModel2,entry))return!0;if(isModelAlias(normalizedModel2)){let resolved=parseUserSpecifiedModel(normalizedModel2).toLowerCase();if(normalizedAllowlist.includes(resolved))return!0}for(let entry of normalizedAllowlist)if(!isModelFamilyAlias(entry)&&isModelAlias(entry)&&parseUserSpecifiedModel(entry).toLowerCase()===normalizedModel2)return!0;for(let entry of normalizedAllowlist)if(!isModelFamilyAlias(entry)&&!isModelAlias(entry)&&modelMatchesVersionPrefix(normalizedModel2,entry))return!0;return!1}var init_modelAllowlist=__esm({"src/utils/model/modelAllowlist.ts"(){init_settings2();init_aliases();init_model();init_modelStrings();__name(modelBelongsToFamily,"modelBelongsToFamily");__name(prefixMatchesModel,"prefixMatchesModel");__name(modelMatchesVersionPrefix,"modelMatchesVersionPrefix");__name(familyHasSpecificEntries,"familyHasSpecificEntries");__name(isModelAllowed,"isModelAllowed")}});var model_exports={};__export(model_exports,{firstPartyNameToCanonical:()=>firstPartyNameToCanonical,getBestModel:()=>getBestModel,getCanonicalName:()=>getCanonicalName,getClaudeAiUserDefaultModelDescription:()=>getClaudeAiUserDefaultModelDescription,getDefaultHaikuModel:()=>getDefaultHaikuModel,getDefaultMainLoopModel:()=>getDefaultMainLoopModel,getDefaultMainLoopModelSetting:()=>getDefaultMainLoopModelSetting,getDefaultOpusModel:()=>getDefaultOpusModel,getDefaultSonnetModel:()=>getDefaultSonnetModel,getMainLoopModel:()=>getMainLoopModel,getMarketingNameForModel:()=>getMarketingNameForModel,getOpus46PricingSuffix:()=>getOpus46PricingSuffix,getPublicModelDisplayName:()=>getPublicModelDisplayName,getPublicModelName:()=>getPublicModelName,getRuntimeMainLoopModel:()=>getRuntimeMainLoopModel,getSmallFastModel:()=>getSmallFastModel,getUserSpecifiedModelSetting:()=>getUserSpecifiedModelSetting,isLegacyModelRemapEnabled:()=>isLegacyModelRemapEnabled,isNonCustomOpusModel:()=>isNonCustomOpusModel,isOpus1mMergeEnabled:()=>isOpus1mMergeEnabled,modelDisplayString:()=>modelDisplayString,normalizeModelStringForAPI:()=>normalizeModelStringForAPI,parseUserSpecifiedModel:()=>parseUserSpecifiedModel,renderDefaultModelSetting:()=>renderDefaultModelSetting,renderModelName:()=>renderModelName,renderModelSetting:()=>renderModelSetting,resolveSkillModelOverride:()=>resolveSkillModelOverride});function getSmallFastModel(){return process.env.ANTHROPIC_SMALL_FAST_MODEL||getDefaultHaikuModel()}function isNonCustomOpusModel(model){return model===getModelStrings2().opus40||model===getModelStrings2().opus41||model===getModelStrings2().opus45||model===getModelStrings2().opus46}function getUserSpecifiedModelSetting(){let specifiedModel,modelOverride=getMainLoopModelOverride();if(modelOverride!==void 0)specifiedModel=modelOverride;else{let settings=getSettings_DEPRECATED()||{};specifiedModel=process.env.ANTHROPIC_MODEL||settings.model||void 0}if(!(specifiedModel&&!isModelAllowed(specifiedModel)))return specifiedModel}function getMainLoopModel(){let model=getUserSpecifiedModelSetting();return model!=null?parseUserSpecifiedModel(model):getDefaultMainLoopModel()}function getBestModel(){return getDefaultOpusModel()}function getDefaultOpusModel(){return process.env.ANTHROPIC_DEFAULT_OPUS_MODEL?process.env.ANTHROPIC_DEFAULT_OPUS_MODEL:getAPIProvider()!=="firstParty"?getModelStrings2().opus46:getModelStrings2().opus46}function getDefaultSonnetModel(){return process.env.ANTHROPIC_DEFAULT_SONNET_MODEL?process.env.ANTHROPIC_DEFAULT_SONNET_MODEL:getAPIProvider()!=="firstParty"?getModelStrings2().sonnet45:getModelStrings2().sonnet46}function getDefaultHaikuModel(){return process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL?process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL:getModelStrings2().haiku45}function getRuntimeMainLoopModel(params){let{permissionMode,mainLoopModel,exceeds200kTokens=!1}=params;return getUserSpecifiedModelSetting()==="opusplan"&&permissionMode==="plan"&&!exceeds200kTokens?getDefaultOpusModel():getUserSpecifiedModelSetting()==="haiku"&&permissionMode==="plan"?getDefaultSonnetModel():mainLoopModel}function getDefaultMainLoopModelSetting(){return process.env.USER_TYPE==="ant"?getAntModelOverrideConfig()?.defaultModel??getDefaultOpusModel()+"[1m]":isMaxSubscriber()||isTeamPremiumSubscriber()?getDefaultOpusModel()+(isOpus1mMergeEnabled()?"[1m]":""):getDefaultSonnetModel()}function getDefaultMainLoopModel(){return parseUserSpecifiedModel(getDefaultMainLoopModelSetting())}function firstPartyNameToCanonical(name){if(name=name.toLowerCase(),name.includes("claude-opus-4-6"))return"claude-opus-4-6";if(name.includes("claude-opus-4-5"))return"claude-opus-4-5";if(name.includes("claude-opus-4-1"))return"claude-opus-4-1";if(name.includes("claude-opus-4"))return"claude-opus-4";if(name.includes("claude-sonnet-4-6"))return"claude-sonnet-4-6";if(name.includes("claude-sonnet-4-5"))return"claude-sonnet-4-5";if(name.includes("claude-sonnet-4"))return"claude-sonnet-4";if(name.includes("claude-haiku-4-5"))return"claude-haiku-4-5";if(name.includes("claude-3-7-sonnet"))return"claude-3-7-sonnet";if(name.includes("claude-3-5-sonnet"))return"claude-3-5-sonnet";if(name.includes("claude-3-5-haiku"))return"claude-3-5-haiku";if(name.includes("claude-3-opus"))return"claude-3-opus";if(name.includes("claude-3-sonnet"))return"claude-3-sonnet";if(name.includes("claude-3-haiku"))return"claude-3-haiku";let match=name.match(/(claude-(\d+-\d+-)?\w+)/);return match&&match[1]?match[1]:name}function getCanonicalName(fullModelName){return firstPartyNameToCanonical(resolveOverriddenModel(fullModelName))}function getClaudeAiUserDefaultModelDescription(fastMode=!1){return isMaxSubscriber()||isTeamPremiumSubscriber()?isOpus1mMergeEnabled()?`Opus 4.6 with 1M context \xB7 Most capable for complex work${fastMode?getOpus46PricingSuffix(!0):""}`:`Opus 4.6 \xB7 Most capable for complex work${fastMode?getOpus46PricingSuffix(!0):""}`:"Sonnet 4.6 \xB7 Best for everyday tasks"}function renderDefaultModelSetting(setting){return setting==="opusplan"?"Opus 4.6 in plan mode, else Sonnet 4.6":renderModelName(parseUserSpecifiedModel(setting))}function getOpus46PricingSuffix(fastMode){if(getAPIProvider()!=="firstParty")return"";let pricing=formatModelPricing(getOpus46CostTier(fastMode));return` \xB7${fastMode?` (${LIGHTNING_BOLT})`:""} ${pricing}`}function isOpus1mMergeEnabled(){return!(is1mContextDisabled()||isProSubscriber()||getAPIProvider()!=="firstParty"||isClaudeAISubscriber()&&getSubscriptionType()===null)}function renderModelSetting(setting){return setting==="opusplan"?"Opus Plan":isModelAlias(setting)?capitalize2(setting):renderModelName(setting)}function getPublicModelDisplayName(model){switch(model){case getModelStrings2().opus46:return"Opus 4.6";case getModelStrings2().opus46+"[1m]":return"Opus 4.6 (1M context)";case getModelStrings2().opus45:return"Opus 4.5";case getModelStrings2().opus41:return"Opus 4.1";case getModelStrings2().opus40:return"Opus 4";case getModelStrings2().sonnet46+"[1m]":return"Sonnet 4.6 (1M context)";case getModelStrings2().sonnet46:return"Sonnet 4.6";case getModelStrings2().sonnet45+"[1m]":return"Sonnet 4.5 (1M context)";case getModelStrings2().sonnet45:return"Sonnet 4.5";case getModelStrings2().sonnet40:return"Sonnet 4";case getModelStrings2().sonnet40+"[1m]":return"Sonnet 4 (1M context)";case getModelStrings2().sonnet37:return"Sonnet 3.7";case getModelStrings2().sonnet35:return"Sonnet 3.5";case getModelStrings2().haiku45:return"Haiku 4.5";case getModelStrings2().haiku35:return"Haiku 3.5";default:return null}}function maskModelCodename(baseName){let[codename="",...rest2]=baseName.split("-");return[codename.slice(0,3)+"*".repeat(Math.max(0,codename.length-3)),...rest2].join("-")}function renderModelName(model){let publicName=getPublicModelDisplayName(model);if(publicName)return publicName;if(process.env.USER_TYPE==="ant"){let resolved=parseUserSpecifiedModel(model),antModel=resolveAntModel(model);if(antModel){let baseName=antModel.model.replace(/\[1m\]$/i,""),masked=maskModelCodename(baseName),suffix=has1mContext(resolved)?"[1m]":"";return masked+suffix}return resolved!==model?`${model} (${resolved})`:resolved}return model}function getPublicModelName(model){let publicName=getPublicModelDisplayName(model);return publicName?`Claude ${publicName}`:`Claude (${model})`}function parseUserSpecifiedModel(modelInput){let modelInputTrimmed=modelInput.trim(),normalizedModel2=modelInputTrimmed.toLowerCase(),has1mTag=has1mContext(normalizedModel2),modelString=has1mTag?normalizedModel2.replace(/\[1m]$/i,"").trim():normalizedModel2;if(isModelAlias(modelString))switch(modelString){case"opusplan":return getDefaultSonnetModel()+(has1mTag?"[1m]":"");case"sonnet":return getDefaultSonnetModel()+(has1mTag?"[1m]":"");case"haiku":return getDefaultHaikuModel()+(has1mTag?"[1m]":"");case"opus":return getDefaultOpusModel()+(has1mTag?"[1m]":"");case"best":return getBestModel();default:}if(getAPIProvider()==="firstParty"&&isLegacyOpusFirstParty(modelString)&&isLegacyModelRemapEnabled())return getDefaultOpusModel()+(has1mTag?"[1m]":"");if(process.env.USER_TYPE==="ant"){let has1mAntTag=has1mContext(normalizedModel2),baseAntModel=normalizedModel2.replace(/\[1m]$/i,"").trim(),antModel=resolveAntModel(baseAntModel);if(antModel){let suffix=has1mAntTag?"[1m]":"";return antModel.model+suffix}}return has1mTag?modelInputTrimmed.replace(/\[1m\]$/i,"").trim()+"[1m]":modelInputTrimmed}function resolveSkillModelOverride(skillModel,currentModel){return has1mContext(skillModel)||!has1mContext(currentModel)?skillModel:modelSupports1M(parseUserSpecifiedModel(skillModel))?skillModel+"[1m]":skillModel}function isLegacyOpusFirstParty(model){return LEGACY_OPUS_FIRSTPARTY.includes(model)}function isLegacyModelRemapEnabled(){return!isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP)}function modelDisplayString(model){if(model===null)return process.env.USER_TYPE==="ant"?`Default for Ants (${renderDefaultModelSetting(getDefaultMainLoopModelSetting())})`:isClaudeAISubscriber()?`Default (${getClaudeAiUserDefaultModelDescription()})`:`Default (${getDefaultMainLoopModel()})`;let resolvedModel=parseUserSpecifiedModel(model);return model===resolvedModel?resolvedModel:`${model} (${resolvedModel})`}function getMarketingNameForModel(modelId){if(getAPIProvider()==="foundry")return;let has1m=modelId.toLowerCase().includes("[1m]"),canonical=getCanonicalName(modelId);if(canonical.includes("claude-opus-4-6"))return has1m?"Opus 4.6 (with 1M context)":"Opus 4.6";if(canonical.includes("claude-opus-4-5"))return"Opus 4.5";if(canonical.includes("claude-opus-4-1"))return"Opus 4.1";if(canonical.includes("claude-opus-4"))return"Opus 4";if(canonical.includes("claude-sonnet-4-6"))return has1m?"Sonnet 4.6 (with 1M context)":"Sonnet 4.6";if(canonical.includes("claude-sonnet-4-5"))return has1m?"Sonnet 4.5 (with 1M context)":"Sonnet 4.5";if(canonical.includes("claude-sonnet-4"))return has1m?"Sonnet 4 (with 1M context)":"Sonnet 4";if(canonical.includes("claude-3-7-sonnet"))return"Claude 3.7 Sonnet";if(canonical.includes("claude-3-5-sonnet"))return"Claude 3.5 Sonnet";if(canonical.includes("claude-haiku-4-5"))return"Haiku 4.5";if(canonical.includes("claude-3-5-haiku"))return"Claude 3.5 Haiku"}function normalizeModelStringForAPI(model){return model.replace(/\[(1|2)m\]/gi,"")}var LEGACY_OPUS_FIRSTPARTY,init_model=__esm({"src/utils/model/model.ts"(){init_state();init_auth();init_context();init_envUtils();init_modelStrings();init_modelCost();init_settings2();init_providers();init_figures2();init_modelAllowlist();init_aliases();init_stringUtils();__name(getSmallFastModel,"getSmallFastModel");__name(isNonCustomOpusModel,"isNonCustomOpusModel");__name(getUserSpecifiedModelSetting,"getUserSpecifiedModelSetting");__name(getMainLoopModel,"getMainLoopModel");__name(getBestModel,"getBestModel");__name(getDefaultOpusModel,"getDefaultOpusModel");__name(getDefaultSonnetModel,"getDefaultSonnetModel");__name(getDefaultHaikuModel,"getDefaultHaikuModel");__name(getRuntimeMainLoopModel,"getRuntimeMainLoopModel");__name(getDefaultMainLoopModelSetting,"getDefaultMainLoopModelSetting");__name(getDefaultMainLoopModel,"getDefaultMainLoopModel");__name(firstPartyNameToCanonical,"firstPartyNameToCanonical");__name(getCanonicalName,"getCanonicalName");__name(getClaudeAiUserDefaultModelDescription,"getClaudeAiUserDefaultModelDescription");__name(renderDefaultModelSetting,"renderDefaultModelSetting");__name(getOpus46PricingSuffix,"getOpus46PricingSuffix");__name(isOpus1mMergeEnabled,"isOpus1mMergeEnabled");__name(renderModelSetting,"renderModelSetting");__name(getPublicModelDisplayName,"getPublicModelDisplayName");__name(maskModelCodename,"maskModelCodename");__name(renderModelName,"renderModelName");__name(getPublicModelName,"getPublicModelName");__name(parseUserSpecifiedModel,"parseUserSpecifiedModel");__name(resolveSkillModelOverride,"resolveSkillModelOverride");LEGACY_OPUS_FIRSTPARTY=["claude-opus-4-20250514","claude-opus-4-1-20250805","claude-opus-4-0","claude-opus-4-1"];__name(isLegacyOpusFirstParty,"isLegacyOpusFirstParty");__name(isLegacyModelRemapEnabled,"isLegacyModelRemapEnabled");__name(modelDisplayString,"modelDisplayString");__name(getMarketingNameForModel,"getMarketingNameForModel");__name(normalizeModelStringForAPI,"normalizeModelStringForAPI")}});var APP_NAME,CLI_COMMAND_NAME,APP_VERSION_FALLBACK,APP_VERSION,APP_WORDMARK,APP_BRAND_SUBTITLE,init_branding=__esm({"src/constants/branding.ts"(){APP_NAME="Clavue",CLI_COMMAND_NAME="clavue",APP_VERSION_FALLBACK="1.0.0",APP_VERSION=typeof MACRO<"u"?"1.0.0":APP_VERSION_FALLBACK,APP_WORDMARK=`/${APP_NAME.toLowerCase()}`,APP_BRAND_SUBTITLE="AI coding CLI"}});function clear3PModelCapabilityOverrideCache(){get3PModelCapabilityOverride.cache?.clear?.()}var TIERS,get3PModelCapabilityOverride,init_modelSupportOverrides=__esm({"src/utils/model/modelSupportOverrides.ts"(){init_memoize();init_providers();TIERS=[{modelEnvVar:"ANTHROPIC_DEFAULT_OPUS_MODEL",capabilitiesEnvVar:"ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES"},{modelEnvVar:"ANTHROPIC_DEFAULT_SONNET_MODEL",capabilitiesEnvVar:"ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES"},{modelEnvVar:"ANTHROPIC_DEFAULT_HAIKU_MODEL",capabilitiesEnvVar:"ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES"}],get3PModelCapabilityOverride=memoize_default((model,capability)=>{if(getAPIProvider()==="firstParty")return;let m3=model.toLowerCase();for(let tier of TIERS){let pinned=process.env[tier.modelEnvVar],capabilities=process.env[tier.capabilitiesEnvVar];if(!(!pinned||capabilities===void 0)&&m3===pinned.toLowerCase())return capabilities.toLowerCase().split(",").map(s2=>s2.trim()).includes(capability)}},(model,capability)=>`${model.toLowerCase()}:${capability}`);__name(clear3PModelCapabilityOverrideCache,"clear3PModelCapabilityOverrideCache")}});function normalizeValue2(value){return String(value??"").trim()}function getOpenAINativeRecommendedModels(slot){let slotDefinition=PROVIDER_MODEL_MODE_DEFINITIONS.openai_native.slotDefinitions[slot];return slotDefinition.recommendedModels??slotDefinition.allowedModels??[]}function inferProviderModelFamily(model){let normalizedModel2=normalizeValue2(model).toLowerCase();return normalizedModel2?normalizedModel2.startsWith("claude-")?"claude":normalizedModel2.startsWith("gpt-")||normalizedModel2.startsWith("o1")||normalizedModel2.startsWith("o3")||normalizedModel2.startsWith("o4")||normalizedModel2.includes("codex")?"openai":"unknown":"unknown"}function getProviderModeSlotValues(routing){let primaryModel=normalizeValue2(routing?.primaryModel),executionModel=normalizeValue2(routing?.generalModel)||normalizeValue2(routing?.subagentModel)||primaryModel,fastModel=normalizeValue2(routing?.smallFastModel)||executionModel||primaryModel,planModel=normalizeValue2(routing?.planModel)||normalizeValue2(routing?.guideModel)||primaryModel;return{primaryModel,haikuModel:fastModel||executionModel||primaryModel,sonnetModel:executionModel||primaryModel,opusModel:planModel||primaryModel}}function getProviderModeRawSlotValues(routing){return{primary:normalizeValue2(routing?.primaryModel),haiku:normalizeValue2(routing?.smallFastModel),sonnet:normalizeValue2(routing?.generalModel)||normalizeValue2(routing?.subagentModel),opus:normalizeValue2(routing?.planModel)||normalizeValue2(routing?.guideModel)}}function getConfiguredFamilies(routing){let slotValues=getProviderModeSlotValues(routing);return new Set(Object.values(slotValues).map(model=>inferProviderModelFamily(model)).filter(family=>family!=="unknown"))}function localize(language,english,chinese){return language==="zh"?chinese:english}function isProviderModelModeId(value){return VALID_PROVIDER_MODEL_MODES.has(value)}function getProviderModelModeDefinition(modeId){return PROVIDER_MODEL_MODE_DEFINITIONS[modeId]}function getProviderModelModeLabel(modeId){return getProviderModelModeDefinition(modeId).label}function getProviderModelModeDescription(modeId){return getProviderModelModeDefinition(modeId).description}function getDefaultProviderModelModeForProviderPreset(providerId){return providerId==="anthropic"||providerId==="glm"||providerId==="minimax"?"anthropic_native":providerId==="kimi"?"openai_native":"hybrid_compatible"}function getProviderModelModeForProfile(profile){let explicitMode=normalizeValue2(profile?.modelMode);if(isProviderModelModeId(explicitMode))return explicitMode;let presetId=normalizeValue2(profile?.modelRouting?.presetId);if(presetId==="claude_code_heritage")return"anthropic_native";if(presetId==="gpt_5_4_codex"||presetId==="gpt_5_1_stable"||presetId==="gpt_5_3_codex")return"openai_native";let configuredFamilies=getConfiguredFamilies(profile?.modelRouting);return configuredFamilies.size===1?configuredFamilies.has("claude")?"anthropic_native":"openai_native":configuredFamilies.size>1?"hybrid_compatible":getDefaultProviderModelModeForProviderPreset(profile?.providerId)}function getProviderModeSlotDefinition(modeId,slot){return getProviderModelModeDefinition(modeId).slotDefinitions[slot]}function getProviderModeAllowedModels(modeId,slot){return[...getProviderModeSlotDefinition(modeId,slot).allowedModels??[]]}function isProviderModelCompatibleWithMode(modeId,model){let normalizedModel2=normalizeValue2(model);if(!normalizedModel2)return!1;let definition=getProviderModelModeDefinition(modeId),family=inferProviderModelFamily(normalizedModel2);if(definition.enforcedFamily)return family===definition.enforcedFamily;let primaryAllowedModels=definition.slotDefinitions.primary.allowedModels;return primaryAllowedModels&&primaryAllowedModels.length>0?primaryAllowedModels.includes(normalizedModel2):family!=="unknown"}function getProviderModeAllowedModelsForRole(modeId,role){switch(role){case"primary":return getProviderModeAllowedModels(modeId,"primary");case"subagent":return getProviderModeAllowedModels(modeId,"sonnet");case"fast":return getProviderModeAllowedModels(modeId,"haiku");case"plan":return getProviderModeAllowedModels(modeId,"opus")}}function createDefaultProviderModeSlotValues(modeId){let definition=getProviderModelModeDefinition(modeId);return{primaryModel:definition.slotDefinitions.primary.defaultModel,haikuModel:definition.slotDefinitions.haiku.defaultModel,sonnetModel:definition.slotDefinitions.sonnet.defaultModel,opusModel:definition.slotDefinitions.opus.defaultModel}}function validateProviderModeRouting(modeId,routing,{language="en",requireExplicitHybridSelections=!1}={}){let definition=getProviderModelModeDefinition(modeId),rawSlotValues=getProviderModeRawSlotValues(routing),issues=[];if(definition.enforcedFamily){for(let slot of PROVIDER_MODE_SLOT_ORDER){let model=rawSlotValues[slot];if(!model)continue;let family=inferProviderModelFamily(model);if(family!=="unknown"&&family!==definition.enforcedFamily&&issues.push({level:"error",slot,message:localize(language,`${getProviderModelModeLabel(modeId)} mode only supports ${definition.enforcedFamily==="claude"?"Claude-family":"GPT/Codex-family"} models in the ${definition.slotDefinitions[slot].label.toLowerCase()} slot.`,`${getProviderModelModeLabel(modeId)} \u6A21\u5F0F\u4EC5\u652F\u6301\u5728 ${definition.slotDefinitions[slot].label} \u4E2D\u4F7F\u7528${definition.enforcedFamily==="claude"?" Claude family":" GPT/Codex family"}\u6A21\u578B\u3002`)}),definition.enforcedFamily==="openai"&&family==="openai"&&!getOpenAINativeRecommendedModels(slot).includes(model)){let recommendedModels=getOpenAINativeRecommendedModels(slot);issues.push({level:"warn",slot,message:localize(language,`${definition.slotDefinitions[slot].label} is not in the recommended OpenAI-native set (${recommendedModels.join(", ")}). Keep it if this provider validates tool calling for ${model}.`,`${definition.slotDefinitions[slot].label} \u4E0D\u5728 OpenAI-native \u63A8\u8350\u6A21\u578B\u5217\u8868\uFF08${recommendedModels.join("\u3001")}\uFF09\u4E2D\u3002\u5982\u679C\u8BE5 provider \u5DF2\u9A8C\u8BC1 ${model} \u7684\u5DE5\u5177\u8C03\u7528\u80FD\u529B\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u4F7F\u7528\u3002`)})}}return issues}for(let slot of PROVIDER_MODE_SLOT_ORDER){let model=rawSlotValues[slot],slotDefinition=definition.slotDefinitions[slot],normalizedModel2=normalizeValue2(model),allowedModels=slotDefinition.allowedModels??[];if(!normalizedModel2){requireExplicitHybridSelections&&slotDefinition.requireExplicitSelection===!0&&issues.push({level:"error",slot,message:localize(language,`${slotDefinition.label} is required for ${definition.label} mode.`,`${definition.label} \u6A21\u5F0F\u4E0B\u5FC5\u987B\u8BBE\u7F6E${slotDefinition.label}\u3002`)});continue}allowedModels.length>0&&!allowedModels.includes(normalizedModel2)&&issues.push({level:requireExplicitHybridSelections?"error":"warn",slot,message:localize(language,`${slotDefinition.label} must be one of: ${allowedModels.join(", ")}.`,`${slotDefinition.label} \u5FC5\u987B\u4E3A\u4EE5\u4E0B\u6A21\u578B\u4E4B\u4E00\uFF1A${allowedModels.join("\u3001")}\u3002`)})}return issues}function filterProviderModeAutoRepairCandidates(modeId,roles,candidates){let definition=getProviderModelModeDefinition(modeId),uniqueCandidates=[...new Set(candidates.map(candidate=>candidate.trim()))].filter(Boolean);if(definition.enforcedFamily)return uniqueCandidates.filter(candidate=>inferProviderModelFamily(candidate)===definition.enforcedFamily);let allowedSets=roles.map(role=>getProviderModeAllowedModelsForRole(modeId,role)).filter(models=>models.length>0).map(models=>new Set(models));return allowedSets.length===0?uniqueCandidates:uniqueCandidates.filter(candidate=>allowedSets.every(allowedModels=>allowedModels.has(candidate)))}var PROVIDER_MODE_SLOT_ORDER,PROVIDER_MODEL_MODE_DEFINITIONS,VALID_PROVIDER_MODEL_MODES,init_providerModes=__esm({"src/utils/providerModes.ts"(){__name(normalizeValue2,"normalizeValue");__name(getOpenAINativeRecommendedModels,"getOpenAINativeRecommendedModels");PROVIDER_MODE_SLOT_ORDER=["primary","haiku","sonnet","opus"];__name(inferProviderModelFamily,"inferProviderModelFamily");__name(getProviderModeSlotValues,"getProviderModeSlotValues");__name(getProviderModeRawSlotValues,"getProviderModeRawSlotValues");__name(getConfiguredFamilies,"getConfiguredFamilies");PROVIDER_MODEL_MODE_DEFINITIONS={anthropic_native:{id:"anthropic_native",label:"Anthropic-native",description:"Claude-family mode. Keep routing on Anthropic-compatible Claude models and validate native tool calling on that family.",providerPresetIds:["anthropic","openrouter","glm","minimax","custom"],routingPresetIds:["claude_code_heritage"],defaultRoutingPresetId:"claude_code_heritage",enforcedFamily:"claude",slotDefinitions:{primary:{label:"Primary model",description:"Main session workhorse model for Anthropic-native mode.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6"},haiku:{label:"Fast model",description:"Fast-response helper slot for Anthropic-native mode.",placeholder:"claude-haiku-4-5",defaultModel:"claude-haiku-4-5"},sonnet:{label:"Workhorse model",description:"Execution slot for day-to-day coding and subagent work in Anthropic-native mode.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6"},opus:{label:"Planner model",description:"Planning and guidance slot for Anthropic-native mode.",placeholder:"claude-opus-4-6",defaultModel:"claude-opus-4-6"}}},openai_native:{id:"openai_native",label:"OpenAI-native",description:"GPT/Codex-family mode. Keep routing on GPT/Codex models and validate the Responses compatibility route on that family.",providerPresetIds:["kimi","openrouter","custom"],routingPresetIds:["gpt_5_5_max","gpt_5_4_codex","gpt_5_1_stable","gpt_5_3_codex"],defaultRoutingPresetId:"gpt_5_5_max",enforcedFamily:"openai",slotDefinitions:{primary:{label:"Primary model",description:"Main session workhorse model for OpenAI-native mode.",placeholder:"gpt-5.5",defaultModel:"gpt-5.5",recommendedModels:["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.1"]},haiku:{label:"Fast model",description:"Fast-response helper slot for OpenAI-native mode.",placeholder:"gpt-5.3-codex",defaultModel:"gpt-5.3-codex",recommendedModels:["gpt-5.3-codex","gpt-5.4","gpt-5.1"]},sonnet:{label:"Workhorse model",description:"Execution slot for day-to-day coding and subagent work in OpenAI-native mode.",placeholder:"gpt-5.5",defaultModel:"gpt-5.5",recommendedModels:["gpt-5.5","gpt-5.3-codex","gpt-5.4","gpt-5.1"]},opus:{label:"Planner model",description:"Planning and guidance slot for OpenAI-native mode.",placeholder:"gpt-5.5",defaultModel:"gpt-5.5",recommendedModels:["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.1"]}}},hybrid_compatible:{id:"hybrid_compatible",label:"Hybrid-compatible",description:"Mixed-family mode. Each slot chooses from a curated compatibility set so Clavue can keep model matching explicit and predictable.",providerPresetIds:["custom","openrouter"],routingPresetIds:["custom"],defaultRoutingPresetId:"custom",slotDefinitions:{primary:{label:"Primary model",description:"Main session slot. Choose either the GPT workhorse or Claude Sonnet.",placeholder:"gpt-5.4",defaultModel:"gpt-5.4",allowedModels:["gpt-5.4","claude-sonnet-4-6"],requireExplicitSelection:!0},haiku:{label:"Fast model",description:"Fast helper slot. Choose either GPT Codex speed or Claude Haiku speed.",placeholder:"gpt-5.3-codex",defaultModel:"gpt-5.3-codex",allowedModels:["gpt-5.3-codex","claude-haiku-4-5"],requireExplicitSelection:!0},sonnet:{label:"Workhorse model",description:"Execution slot for subagents and coding work. Choose GPT-5.4 or Claude Sonnet.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6",allowedModels:["claude-sonnet-4-6","gpt-5.4"],requireExplicitSelection:!0},opus:{label:"Planner model",description:"Planning slot. Choose Claude Opus or GPT-5.4 for compatibility.",placeholder:"claude-opus-4-6",defaultModel:"claude-opus-4-6",allowedModels:["claude-opus-4-6","gpt-5.4"],requireExplicitSelection:!0}}}},VALID_PROVIDER_MODEL_MODES=new Set(Object.keys(PROVIDER_MODEL_MODE_DEFINITIONS));__name(localize,"localize");__name(isProviderModelModeId,"isProviderModelModeId");__name(getProviderModelModeDefinition,"getProviderModelModeDefinition");__name(getProviderModelModeLabel,"getProviderModelModeLabel");__name(getProviderModelModeDescription,"getProviderModelModeDescription");__name(getDefaultProviderModelModeForProviderPreset,"getDefaultProviderModelModeForProviderPreset");__name(getProviderModelModeForProfile,"getProviderModelModeForProfile");__name(getProviderModeSlotDefinition,"getProviderModeSlotDefinition");__name(getProviderModeAllowedModels,"getProviderModeAllowedModels");__name(isProviderModelCompatibleWithMode,"isProviderModelCompatibleWithMode");__name(getProviderModeAllowedModelsForRole,"getProviderModeAllowedModelsForRole");__name(createDefaultProviderModeSlotValues,"createDefaultProviderModeSlotValues");__name(validateProviderModeRouting,"validateProviderModeRouting");__name(filterProviderModeAutoRepairCandidates,"filterProviderModeAutoRepairCandidates")}});function normalizeValue3(value){return String(value||"").trim()}function uniqueValues(values2){return[...new Set(values2.map(value=>value.trim()).filter(Boolean))]}function getConfiguredFamilies2(routing){let models=[routing?.primaryModel,routing?.subagentModel,routing?.smallFastModel,routing?.planModel,routing?.exploreModel,routing?.generalModel,routing?.teamModel,routing?.guideModel];return new Set(models.map(model=>inferProviderModelFamily(model)).filter(family=>family!=="unknown"))}function getConfiguredStrategyId(profile){let strategyId=normalizeValue3(profile?.modelRouting?.presetId);return strategyId==="provider_default"||strategyId==="claude_code_heritage"||strategyId==="gpt_5_4_codex"||strategyId==="gpt_5_1_stable"||strategyId==="gpt_5_3_codex"||strategyId==="custom"?strategyId:"unknown"}function getFallbacksForFamily(family,roleKind){return family==="claude"?roleKind==="plan"?CLAUDE_PLAN_FALLBACKS:roleKind==="primary"?CLAUDE_PRIMARY_FALLBACKS:CLAUDE_EXECUTION_FALLBACKS:family==="openai"?roleKind==="plan"?OPENAI_PLAN_FALLBACKS:roleKind==="primary"?OPENAI_PRIMARY_FALLBACKS:OPENAI_EXECUTION_FALLBACKS:roleKind==="plan"?[...OPENAI_PLAN_FALLBACKS,...CLAUDE_PLAN_FALLBACKS]:roleKind==="primary"?[...OPENAI_PRIMARY_FALLBACKS,...CLAUDE_PRIMARY_FALLBACKS]:[...OPENAI_EXECUTION_FALLBACKS,...CLAUDE_EXECUTION_FALLBACKS]}function getPreferredRepairFamily(roles,failedModel,routing){let failedFamily=inferProviderModelFamily(failedModel);if(failedFamily!=="unknown")return failedFamily;if(roles.includes("primary")){let executionFamily=inferProviderModelFamily(routing.subagentModel);if(executionFamily!=="unknown")return executionFamily}else if(roles.includes("plan")){let primaryFamily=inferProviderModelFamily(routing.primaryModel);if(primaryFamily!=="unknown")return primaryFamily}else{let primaryFamily=inferProviderModelFamily(routing.primaryModel);if(primaryFamily!=="unknown")return primaryFamily}let routeFamily=inferProviderExperienceFamily({id:CURRENT_PROVIDER_PROFILE_ID,modelRouting:routing});return routeFamily==="anthropic_native"?"claude":routeFamily==="openai_native"?"openai":"unknown"}function inferProviderExperienceFamily(profile){return getProviderModelModeForProfile(profile)}function getProviderExperienceLabel(profile){return getProviderModelModeLabel(inferProviderExperienceFamily(profile))}function getProviderRoutingStrategyLabel(profile){switch(getConfiguredStrategyId(profile)){case"provider_default":return"Provider defaults";case"claude_code_heritage":return"Anthropic-native heritage";case"gpt_5_4_codex":return"GPT-5.4 + GPT-5.3 Codex";case"gpt_5_1_stable":return"GPT-5.1 stable";case"gpt_5_3_codex":return"GPT-5.3 Codex everywhere";case"custom":return"Custom routing";default:return"Unknown strategy"}}function getProviderRoutingStrategyDescription(profile){switch(getConfiguredStrategyId(profile)){case"provider_default":return"Use provider defaults and keep mode-specific family selection implicit.";case"claude_code_heritage":return"Anthropic-native routing with Sonnet for execution, Haiku for fast work, and Opus for planning.";case"gpt_5_4_codex":return"OpenAI-native routing with GPT-5.4 primary and GPT-5.3 Codex execution slots.";case"gpt_5_1_stable":return"OpenAI-native routing that keeps all slots on GPT-5.1.";case"gpt_5_3_codex":return"OpenAI-native routing that keeps all slots on GPT-5.3 Codex.";case"custom":return"Advanced routing. Validate carefully when mixing model families or compatibility slots.";default:return"No explicit routing strategy is set."}}function getProviderExperienceDescription(profile){let modeId=inferProviderExperienceFamily(profile),modeDescription=getProviderModelModeDescription(modeId);return modeId==="anthropic_native"?profile?.providerId==="anthropic"?`${modeDescription} Official Anthropic path is active.`:`${modeDescription} Running through a compatible gateway path.`:modeId==="openai_native"?profile?.providerId==="anthropic"?`${modeDescription} OpenAI-family routing is being adapted over Anthropic transport.`:`${modeDescription} Running through a compatible gateway path.`:`${modeDescription} Use compatible providers that can serve every selected slot on one route.`}function getProviderSelectionSource(profile){return profile?.id===CURRENT_PROVIDER_PROFILE_ID?"current_env":"saved_profile"}function getProviderSourceLabel(profile){return profile?getProviderSelectionSource(profile)==="current_env"||profile.provenance?.kind==="synthetic_current_env"?"Current env (synthetic)":profile.provenance?.kind==="current_env_adopted"?"Saved from current API config":profile.provenance?.kind==="imported"?profile.provenance.sourceId==="zcf"?"Imported from zcf":profile.provenance.sourceId==="ccjk"?"Imported from ccjk":"Imported profile":"Saved profile":"Saved profile"}function getProviderSourceDescription(profile){return profile?getProviderSelectionSource(profile)==="current_env"||profile.provenance?.kind==="synthetic_current_env"?"Synthetic profile derived from the live API environment. It is available now but not stored as a reusable saved profile.":profile.provenance?.kind==="current_env_adopted"?"Reusable saved profile created from the current API environment.":profile.provenance?.kind==="imported"?profile.provenance.sourceId==="zcf"?"Reusable profile imported from the compatible zcf configuration.":profile.provenance.sourceId==="ccjk"?"Reusable profile imported from the compatible ccjk configuration.":"Reusable profile imported from a compatible external configuration.":"Reusable provider profile stored in local Clavue settings.":"Reusable provider profile stored in local Clavue settings."}function getProviderMigrationHint(profile,{hasSavedProfile=!1}={}){if(!profile)return null;if(getProviderSelectionSource(profile)==="current_env"||profile.provenance?.kind==="synthetic_current_env"){let modeLabel=getProviderExperienceLabel(profile),modeId=inferProviderExperienceFamily(profile);return hasSavedProfile?`A live ${modeLabel} API config is also present. Open /provider if you want to compare it with the saved profile or adopt the current environment as a reusable profile.`:modeId==="anthropic_native"?"Anthropic-native API config detected in the live environment. Open /provider to save it as a reusable profile.":modeId==="openai_native"?"OpenAI-native API config detected in the live environment. Open /provider to save it as a reusable profile.":"Hybrid-compatible API config detected in the live environment. Open /provider to save it as a reusable profile."}return profile.provenance?.kind==="current_env_adopted"?"This saved profile was adopted from the current API environment.":profile.provenance?.kind==="imported"?"This saved profile was imported from a compatible external source and can now be edited locally like any other saved profile.":null}function areProviderProfilesEquivalent(left,right){return!left||!right?!1:normalizeValue3(left.providerId)===normalizeValue3(right.providerId)&&inferProviderExperienceFamily(left)===inferProviderExperienceFamily(right)&&normalizeValue3(left.baseUrl)===normalizeValue3(right.baseUrl)&&normalizeValue3(left.authType)===normalizeValue3(right.authType)&&normalizeValue3(left.credential)===normalizeValue3(right.credential)&&getConfiguredStrategyId(left)===getConfiguredStrategyId(right)&&normalizeValue3(left.modelRouting?.primaryModel)===normalizeValue3(right.modelRouting?.primaryModel)&&normalizeValue3(left.modelRouting?.subagentModel)===normalizeValue3(right.modelRouting?.subagentModel)&&normalizeValue3(left.modelRouting?.smallFastModel)===normalizeValue3(right.modelRouting?.smallFastModel)&&normalizeValue3(left.modelRouting?.planModel)===normalizeValue3(right.modelRouting?.planModel)&&normalizeValue3(left.modelRouting?.guideModel)===normalizeValue3(right.modelRouting?.guideModel)}function buildProviderContinuitySnapshot(profile,{effectivePrimaryModel}={}){if(!profile)return null;let routedPrimaryModel=normalizeValue3(profile.modelRouting?.primaryModel),primaryModel=normalizeValue3(effectivePrimaryModel??routedPrimaryModel);return{profileId:normalizeValue3(profile.id)||null,primaryModel:primaryModel||null,experienceLabel:getProviderExperienceLabel(profile),routingLabel:getProviderRoutingStrategyLabel(profile),sourceLabel:getProviderSourceLabel(profile)}}function getProviderLocalValidationWarnings(profile,{language="en"}={}){if(!profile)return[];let modeId=inferProviderExperienceFamily(profile),strategyId=getConfiguredStrategyId(profile),configuredFamilies=getConfiguredFamilies2(profile.modelRouting),warnings=validateProviderModeRouting(modeId,profile.modelRouting,{language,requireExplicitHybridSelections:!1}).filter(issue2=>issue2.level==="warn"||issue2.level==="error").map(issue2=>`[WARN] ${issue2.message}`);return strategyId==="claude_code_heritage"&&configuredFamilies.has("openai")&&warnings.push(language==="zh"?"[WARN] Anthropic-native heritage \u8DEF\u7531\u5E94\u4F18\u5148\u4FDD\u6301\u5728 Claude family \u5185\u3002\u82E5\u8981\u5207\u6362\u5230 GPT family\uFF0C\u8BF7\u6539\u7528 OpenAI-native \u7B56\u7565\u3002":"[WARN] Anthropic-native heritage routing should stay in the Claude family. Switch to an OpenAI-native strategy if the GPT family is intentional."),(strategyId==="gpt_5_4_codex"||strategyId==="gpt_5_1_stable"||strategyId==="gpt_5_3_codex")&&configuredFamilies.has("claude")&&warnings.push(language==="zh"?"[WARN] OpenAI-native \u8DEF\u7531\u7B56\u7565\u5F53\u524D\u6DF7\u5165\u4E86 Claude family \u6A21\u578B\u3002\u82E5\u8FD9\u662F\u6709\u610F\u884C\u4E3A\uFF0C\u8BF7\u6539\u7528 Custom routing\u3002":"[WARN] The OpenAI-native routing strategy is mixed with Claude-family models. Use Custom routing if this blend is intentional."),strategyId==="custom"&&configuredFamilies.size>1&&warnings.push(language==="zh"?"[WARN] Custom routing \u5F53\u524D\u8DE8\u8D8A\u591A\u4E2A model family\u3002\u8BF7\u5728\u4F9D\u8D56\u539F\u751F\u5DE5\u4F5C\u6D41\u524D\u91CD\u65B0\u9A8C\u8BC1\u8FD9\u6761\u8DEF\u7531\u3002":"[WARN] Custom routing spans multiple model families. Revalidate the route before relying on native workflows."),normalizeValue3(profile.providerId)==="anthropic"&&modeId==="openai_native"&&warnings.push(language==="zh"?"[WARN] \u5F53\u524D\u4F7F\u7528\u5B98\u65B9 Anthropic preset\uFF0C\u4F46\u8DEF\u7531\u7B56\u7565\u662F OpenAI-native\u3002\u8FD9\u901A\u5E38\u610F\u5473\u7740 provider preset \u4E0E\u6A21\u578B\u5BB6\u65CF\u610F\u56FE\u4E0D\u4E00\u81F4\u3002":"[WARN] The official Anthropic preset is paired with an OpenAI-native routing strategy. This usually means the provider preset and model-family intent are misaligned."),warnings}function getProviderAutoRepairCandidates(roles,failedModel,routing,options){let isPrimaryRole=roles.includes("primary"),roleKind=roles.includes("plan")?"plan":isPrimaryRole?"primary":"execution",siblingModel=roleKind==="primary"?String(routing.subagentModel||"").trim():String(routing.primaryModel||"").trim(),preferredFamily=getPreferredRepairFamily(roles,failedModel,routing),secondaryFamily=preferredFamily==="claude"?"openai":preferredFamily==="openai"?"claude":"unknown",candidates=uniqueValues([siblingModel,...getFallbacksForFamily(preferredFamily,roleKind),...getFallbacksForFamily(secondaryFamily,roleKind)]).filter(candidate=>candidate!==String(failedModel||"").trim());return options?.modeId?filterProviderModeAutoRepairCandidates(options.modeId,roles,candidates):candidates}var CURRENT_PROVIDER_PROFILE_ID,OPENAI_PRIMARY_FALLBACKS,OPENAI_EXECUTION_FALLBACKS,OPENAI_PLAN_FALLBACKS,CLAUDE_PRIMARY_FALLBACKS,CLAUDE_EXECUTION_FALLBACKS,CLAUDE_PLAN_FALLBACKS,init_providerProfileMetadata=__esm({"src/utils/providerProfileMetadata.ts"(){init_providerModes();CURRENT_PROVIDER_PROFILE_ID="__current_provider__",OPENAI_PRIMARY_FALLBACKS=["gpt-5.4","gpt-5.3-codex","gpt-5.1"],OPENAI_EXECUTION_FALLBACKS=["gpt-5.3-codex","gpt-5.4","gpt-5.1"],OPENAI_PLAN_FALLBACKS=["gpt-5.4","gpt-5.1","gpt-5.3-codex"],CLAUDE_PRIMARY_FALLBACKS=["claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5"],CLAUDE_EXECUTION_FALLBACKS=["claude-sonnet-4-6","claude-haiku-4-5","claude-opus-4-6"],CLAUDE_PLAN_FALLBACKS=["claude-opus-4-6","claude-sonnet-4-6","claude-haiku-4-5"];__name(normalizeValue3,"normalizeValue");__name(uniqueValues,"uniqueValues");__name(getConfiguredFamilies2,"getConfiguredFamilies");__name(getConfiguredStrategyId,"getConfiguredStrategyId");__name(getFallbacksForFamily,"getFallbacksForFamily");__name(getPreferredRepairFamily,"getPreferredRepairFamily");__name(inferProviderExperienceFamily,"inferProviderExperienceFamily");__name(getProviderExperienceLabel,"getProviderExperienceLabel");__name(getProviderRoutingStrategyLabel,"getProviderRoutingStrategyLabel");__name(getProviderRoutingStrategyDescription,"getProviderRoutingStrategyDescription");__name(getProviderExperienceDescription,"getProviderExperienceDescription");__name(getProviderSelectionSource,"getProviderSelectionSource");__name(getProviderSourceLabel,"getProviderSourceLabel");__name(getProviderSourceDescription,"getProviderSourceDescription");__name(getProviderMigrationHint,"getProviderMigrationHint");__name(areProviderProfilesEquivalent,"areProviderProfilesEquivalent");__name(buildProviderContinuitySnapshot,"buildProviderContinuitySnapshot");__name(getProviderLocalValidationWarnings,"getProviderLocalValidationWarnings");__name(getProviderAutoRepairCandidates,"getProviderAutoRepairCandidates")}});function isPlaceholderProviderCredential(value){let normalizedValue=value.trim().toLowerCase();return normalizedValue?PLACEHOLDER_PROVIDER_CREDENTIAL_EXACT_VALUES.has(normalizedValue)?!0:/^your[-_\s]?[a-z0-9_-]*(api[-_\s]?key|auth[-_\s]?token|key|token)[a-z0-9_-]*$/iu.test(normalizedValue)||/^(sk|sk-ant|sk-proj|sk-or|sk-[a-z0-9_-]+)[-_]?your[-_a-z0-9]*here$/iu.test(normalizedValue)||/^(sk|sk-ant|sk-proj|sk-or|sk-[a-z0-9_-]+)[-_]?(test|example|placeholder|dummy|fake)$/iu.test(normalizedValue)||/^(test|example|placeholder|dummy|fake)[-_]?(api[-_]?key|auth[-_]?token|token)$/iu.test(normalizedValue):!1}var PLACEHOLDER_PROVIDER_CREDENTIAL_EXACT_VALUES,init_providerCredentials=__esm({"src/utils/providerCredentials.ts"(){PLACEHOLDER_PROVIDER_CREDENTIAL_EXACT_VALUES=new Set(["your_api_key","your-api-key","your_api_key_here","your-api-key-here","your_key","your-key","your_key_here","your-key-here","your api key","your api key here","your key","your key here","your_token","your-token","your_token_here","your-token-here","your auth token","your auth token here","api_key","api-key","api_key_here","api-key-here","auth_token","auth-token","auth_token_here","auth-token-here","token_here","token-here","placeholder","<api_key>","<api-key>","<your_api_key>","<your-api-key>","<token>","<your_token>","<your-token>"]);__name(isPlaceholderProviderCredential,"isPlaceholderProviderCredential")}});var ENTER_PLAN_MODE_TOOL_NAME,init_constants6=__esm({"src/tools/EnterPlanModeTool/constants.ts"(){ENTER_PLAN_MODE_TOOL_NAME="EnterPlanMode"}});var SEND_MESSAGE_TOOL_NAME,init_constants7=__esm({"src/tools/SendMessageTool/constants.ts"(){SEND_MESSAGE_TOOL_NAME="SendMessage"}});var TASK_CREATE_TOOL_NAME2,init_constants8=__esm({"src/tools/TaskCreateTool/constants.ts"(){TASK_CREATE_TOOL_NAME2="TaskCreate"}});var TASK_GET_TOOL_NAME,init_constants9=__esm({"src/tools/TaskGetTool/constants.ts"(){TASK_GET_TOOL_NAME="TaskGet"}});var TASK_LIST_TOOL_NAME,init_constants10=__esm({"src/tools/TaskListTool/constants.ts"(){TASK_LIST_TOOL_NAME="TaskList"}});var TASK_UPDATE_TOOL_NAME,init_constants11=__esm({"src/tools/TaskUpdateTool/constants.ts"(){TASK_UPDATE_TOOL_NAME="TaskUpdate"}});var TEAM_CREATE_TOOL_NAME2,init_constants12=__esm({"src/tools/TeamCreateTool/constants.ts"(){TEAM_CREATE_TOOL_NAME2="TeamCreate"}});var TEAM_DELETE_TOOL_NAME,init_constants13=__esm({"src/tools/TeamDeleteTool/constants.ts"(){TEAM_DELETE_TOOL_NAME="TeamDelete"}});var TODO_WRITE_TOOL_NAME,init_constants14=__esm({"src/tools/TodoWriteTool/constants.ts"(){TODO_WRITE_TOOL_NAME="TodoWrite"}});function isClaudeFamilyModel(model){return String(model??"").toLowerCase().includes("claude")}function isGptCodexFamilyModel(model){let normalizedModel2=String(model??"").toLowerCase();return normalizedModel2.includes("gpt")||normalizedModel2.includes("codex")}function getFamilyShaping(model,runtimeProviderKind){return isClaudeFamilyModel(model)?"claude":isGptCodexFamilyModel(model)?"gpt_codex":runtimeProviderKind!=="first_party"?"provider_native":"generic"}function getReasoningDiscipline(qualityTier,familyShaping){return qualityTier==="blocked"||qualityTier==="chat_only"||qualityTier==="degraded"?{planDiscipline:"required",verificationDiscipline:"required",recoveryMode:"strict"}:familyShaping==="gpt_codex"?{planDiscipline:"required",verificationDiscipline:"required",recoveryMode:"normal"}:{planDiscipline:"recommended",verificationDiscipline:"recommended",recoveryMode:"normal"}}function resolveCodingRoutePolicyCore(input){let normalizedModel2=String(input.model??"").trim(),snapshot2=input.snapshot??null,dialectMode=input.apiDialectMode??"auto",runtimeProviderKind=input.runtimeProviderKind??"gateway",coreNativeWorkflowToolNames=input.coreNativeWorkflowToolNames??DEFAULT_CORE_NATIVE_WORKFLOW_TOOL_NAMES,familyShaping=getFamilyShaping(normalizedModel2,runtimeProviderKind),routeId=input.routeId??[runtimeProviderKind,normalizedModel2||"provider-default"].join(":"),warnings=[],repairHints=[],qualityReason=[],supportsResponses=input.supportsResponsesAdapter===!0,hasAnthropicToolUse=snapshot2?.anthropicToolUse===!0,hasFullResponses=supportsResponses&&snapshot2?.responsesArrayInputReachable===!0&&snapshot2?.responsesToolChoiceAuto===!0&&snapshot2?.responsesToolChoiceRequired===!0&&snapshot2?.responsesToolChoiceNamed===!0,hasPartialResponses=!hasFullResponses&&!!(snapshot2?.responsesArrayInputReachable||snapshot2?.responsesToolChoiceAuto||snapshot2?.responsesToolChoiceRequired||snapshot2?.responsesToolChoiceNamed),hasReachableChat=snapshot2?.anthropicMessagesReachable===!0||snapshot2?.responsesArrayInputReachable===!0,shouldAutoUseResponsesAdapter=dialectMode==="auto"&&supportsResponses&&runtimeProviderKind==="gateway"&&!hasAnthropicToolUse,isFirstPartyClaudeAssumedNative=runtimeProviderKind==="first_party"&&familyShaping==="claude"&&!snapshot2,transport="anthropic_messages",transportReason="Anthropic messages remains the safest fallback route.";dialectMode==="anthropic"?(transport="anthropic_messages",transportReason="Explicit anthropic dialect override keeps the runtime on /v1/messages.",hasFullResponses&&!hasAnthropicToolUse&&warnings.push("Responses compatibility is verified, but the active dialect override is forcing /v1/messages.")):dialectMode==="openai_responses"?(transport="openai_responses",transportReason="Explicit Responses dialect override forces the OpenAI Responses adapter.",supportsResponses||warnings.push("The active model family is not known to behave well on the Responses adapter.")):hasFullResponses?(transport="openai_responses",transportReason="Verified full Responses function calling makes the Responses adapter the authoritative coding transport."):hasAnthropicToolUse?(transport="anthropic_messages",transportReason="Verified Anthropic-native tool_use keeps the route on /v1/messages."):isFirstPartyClaudeAssumedNative?(transport="anthropic_messages",transportReason="First-party Anthropic API with a Claude-family model is trusted to support tool_use without an explicit capability snapshot."):shouldAutoUseResponsesAdapter?(transport="openai_responses",hasPartialResponses?transportReason="Responses support is only partially validated, but this OpenAI-native gateway route must preserve tool schemas through the Responses adapter instead of falling back to chat-only messages.":hasReachableChat?transportReason="The gateway route is chat-reachable but tool calling is not validated, so Clavue uses the Responses adapter to preserve tool schemas instead of a chat-only messages fallback.":transportReason="The OpenAI-native gateway route is unvalidated, so Clavue uses the Responses adapter by default and fails loudly if the gateway cannot execute tool calls."):hasPartialResponses?(transport="anthropic_messages",transportReason="Responses support is only partial, so the runtime stays on the safer messages transport and enters strict compatibility mode."):supportsResponses&&runtimeProviderKind==="gateway"&&(transport="anthropic_messages",transportReason="The gateway route has not been verified yet, so Clavue avoids auto-promoting it to Responses transport.");let qualityTier="blocked";hasAnthropicToolUse?runtimeProviderKind==="first_party"&&familyShaping==="claude"?(qualityTier="native",qualityReason.push("Anthropic-native tool_use is available on a first-party Claude route.")):(qualityTier="compatible",qualityReason.push("Anthropic-native tool_use is available, but the route is not the canonical first-party Claude runtime.")):hasFullResponses?(qualityTier="compatible",qualityReason.push("Full Responses function calling is available, so the route can sustain native coding workflows through the adapter.")):isFirstPartyClaudeAssumedNative?(qualityTier="native",qualityReason.push("First-party Anthropic Claude routes are trusted as native without requiring a capability snapshot \u2014 new users get the full coding workflow on first launch.")):shouldAutoUseResponsesAdapter?(qualityTier="degraded",hasPartialResponses?qualityReason.push("Only partial Responses tool semantics were verified, so coding workflows need strict recovery discipline while the Responses adapter preserves tool schemas."):hasReachableChat?qualityReason.push("The route is reachable for chat, but reliable tool calling was not verified; Clavue will try the Responses adapter instead of dropping into a chat-only tool path."):qualityReason.push("The route has no capability snapshot yet; Clavue will try the Responses adapter instead of assuming tools are unavailable."),warnings.push("OpenAI-native GPT/Codex gateway route is not fully validated; run provider validation to confirm tool-calling support."),repairHints.push("Run /provider validate or /provider matrix again after changing the model slot or gateway configuration.")):hasPartialResponses?(qualityTier="degraded",qualityReason.push("Only partial Responses tool semantics were verified, so coding workflows need strict recovery discipline."),repairHints.push("Run /provider validate or /provider matrix again after changing the model slot or gateway configuration.")):dialectMode==="openai_responses"&&!supportsResponses?(qualityTier="chat_only",qualityReason.push("The explicit Responses dialect override targets a model family that is not validated for Responses tool calling."),repairHints.push("Use a model family with validated Responses adapter support before relying on native workflow tools through this override.")):hasReachableChat?(qualityTier="compatible",qualityReason.push("The route is reachable for chat, so Clavue keeps native workflow tools available while provider-specific tool calling remains unvalidated."),repairHints.push("Run /provider validate or /provider matrix to confirm native workflow tool-calling support for this route.")):(qualityTier="blocked",qualityReason.push("The route could not be validated for coding use."),repairHints.push("Check the provider URL, credential, and model name before retrying validation."));let workflowMode="chat_only";qualityTier==="native"?workflowMode="full_native":qualityTier==="compatible"?workflowMode="compat_native":qualityTier==="degraded"&&(workflowMode="strict_compat");let forcedToolNames=workflowMode==="compat_native"?[...coreNativeWorkflowToolNames]:[],blockedToolNames=qualityTier==="chat_only"||qualityTier==="blocked"?[...coreNativeWorkflowToolNames]:[];return{routeId,model:normalizedModel2,transport,transportReason,qualityTier,qualityReason,workflowMode,forcedToolNames,blockedToolNames,familyShaping,warnings,repairHints,...getReasoningDiscipline(qualityTier,familyShaping)}}var DEFAULT_CORE_NATIVE_WORKFLOW_TOOL_NAMES,init_codingRoutePolicyCore=__esm({"src/utils/model/codingRoutePolicyCore.ts"(){DEFAULT_CORE_NATIVE_WORKFLOW_TOOL_NAMES=["EnterPlanMode","SendMessage","TaskCreate","TaskGet","TaskList","TaskOutput","TaskUpdate","TeamCreate","TeamDelete","TodoWrite"];__name(isClaudeFamilyModel,"isClaudeFamilyModel");__name(isGptCodexFamilyModel,"isGptCodexFamilyModel");__name(getFamilyShaping,"getFamilyShaping");__name(getReasoningDiscipline,"getReasoningDiscipline");__name(resolveCodingRoutePolicyCore,"resolveCodingRoutePolicyCore")}});function normalizeDialectMode(value){let normalized=String(value??"").trim().toLowerCase();return normalized==="openai"||normalized==="responses"||normalized==="openai_responses"?"openai_responses":normalized==="anthropic"||normalized==="messages"?"anthropic":"auto"}function getConfiguredApiDialectMode(){return normalizeDialectMode(process.env.CLAVUE_API_DIALECT??process.env.MYCLAUDE_API_DIALECT??process.env.CLAUDE_CODE_API_DIALECT??process.env.CLAUDE_CODE_PROVIDER_DIALECT)}function supportsOpenAIResponsesAdapterModel(model){let normalizedModel2=String(model??"").trim().toLowerCase();return normalizedModel2?OPENAI_RESPONSES_MODEL_PATTERNS.some(pattern=>pattern.test(normalizedModel2)):!1}var OPENAI_RESPONSES_MODEL_PATTERNS,init_openaiResponsesConfig=__esm({"src/utils/model/openaiResponsesConfig.ts"(){OPENAI_RESPONSES_MODEL_PATTERNS=[/^gpt-\d+(?:[.-]\d+)*(?:$|[-_.])/,/^gpt-image-\d+(?:[.-]\d+)*(?:$|[-_.])/,/codex/];__name(normalizeDialectMode,"normalizeDialectMode");__name(getConfiguredApiDialectMode,"getConfiguredApiDialectMode");__name(supportsOpenAIResponsesAdapterModel,"supportsOpenAIResponsesAdapterModel")}});function normalize3(raw,allowed){let value=String(raw??"").trim().toLowerCase();if(value)return allowed.has(value)?value:void 0}function getWorkflowDisciplinePreferencesFromEnv(env5=process.env){return{planDiscipline:normalize3(env5.CLAVUE_PLAN_DISCIPLINE??env5.MYCLAUDE_PLAN_DISCIPLINE,PLAN_DISCIPLINE_VALUES),verificationDiscipline:normalize3(env5.CLAVUE_VERIFICATION_DISCIPLINE??env5.MYCLAUDE_VERIFICATION_DISCIPLINE,VERIFICATION_DISCIPLINE_VALUES),recoveryMode:normalize3(env5.CLAVUE_RECOVERY_MODE??env5.MYCLAUDE_RECOVERY_MODE,RECOVERY_MODE_VALUES)}}function applyWorkflowDisciplinePreferences(routeDerived,preferences){return{planDiscipline:preferences.planDiscipline??routeDerived.planDiscipline,verificationDiscipline:preferences.verificationDiscipline??routeDerived.verificationDiscipline,recoveryMode:preferences.recoveryMode??routeDerived.recoveryMode}}var PLAN_DISCIPLINE_VALUES,VERIFICATION_DISCIPLINE_VALUES,RECOVERY_MODE_VALUES,init_workflowDisciplinePreferences=__esm({"src/utils/model/workflowDisciplinePreferences.ts"(){PLAN_DISCIPLINE_VALUES=new Set(["required","recommended","optional"]),VERIFICATION_DISCIPLINE_VALUES=new Set(["required","recommended","optional"]),RECOVERY_MODE_VALUES=new Set(["strict","normal","off"]);__name(normalize3,"normalize");__name(getWorkflowDisciplinePreferencesFromEnv,"getWorkflowDisciplinePreferencesFromEnv");__name(applyWorkflowDisciplinePreferences,"applyWorkflowDisciplinePreferences")}});function isOfficialAnthropicBaseUrl(baseUrl){let normalizedBaseUrl=String(baseUrl??"").trim();if(!normalizedBaseUrl)return isFirstPartyAnthropicBaseUrl();try{let host=new URL(normalizedBaseUrl).host,allowedHosts=["api.anthropic.com"];return process.env.USER_TYPE==="ant"&&allowedHosts.push("api-staging.anthropic.com"),allowedHosts.includes(host)}catch{return!1}}function inferRuntimeProviderKind(input){if(input.runtimeProviderKind)return input.runtimeProviderKind;if(typeof input.baseUrl=="string"&&input.baseUrl.trim())return isOfficialAnthropicBaseUrl(input.baseUrl)?"first_party":"gateway";switch(getAPIProvider()){case"bedrock":return"bedrock";case"vertex":return"vertex";case"foundry":return"foundry";default:return isFirstPartyAnthropicBaseUrl()?"first_party":"gateway"}}function resolveCodingRoutePolicy(input){let normalizedModel2=String(input.model??"").trim(),snapshot2=input.snapshot??null,dialectMode=input.apiDialectMode??getConfiguredApiDialectMode(),runtimeProviderKind=inferRuntimeProviderKind(input),routeId=input.routeId??[runtimeProviderKind,normalizedModel2||"provider-default"].join(":"),decision=resolveCodingRoutePolicyCore({model:normalizedModel2,snapshot:snapshot2,routeId,apiDialectMode:dialectMode,runtimeProviderKind,supportsResponsesAdapter:supportsOpenAIResponsesAdapterModel(normalizedModel2),coreNativeWorkflowToolNames:[...CORE_NATIVE_WORKFLOW_TOOL_NAMES]}),preferences=getWorkflowDisciplinePreferencesFromEnv(),overridden=applyWorkflowDisciplinePreferences(decision,preferences);return{...decision,planDiscipline:overridden.planDiscipline,verificationDiscipline:overridden.verificationDiscipline,recoveryMode:overridden.recoveryMode}}var CORE_NATIVE_WORKFLOW_TOOL_NAMES,init_codingRoutePolicy=__esm({"src/utils/model/codingRoutePolicy.ts"(){init_constants6();init_constants7();init_constants8();init_constants9();init_constants10();init_constants4();init_constants11();init_constants12();init_constants13();init_constants14();init_codingRoutePolicyCore();init_providers();init_openaiResponsesConfig();init_workflowDisciplinePreferences();CORE_NATIVE_WORKFLOW_TOOL_NAMES=new Set([ENTER_PLAN_MODE_TOOL_NAME,SEND_MESSAGE_TOOL_NAME,TASK_CREATE_TOOL_NAME2,TASK_GET_TOOL_NAME,TASK_LIST_TOOL_NAME,TASK_OUTPUT_TOOL_NAME,TASK_UPDATE_TOOL_NAME,TEAM_CREATE_TOOL_NAME2,TEAM_DELETE_TOOL_NAME,TODO_WRITE_TOOL_NAME]);__name(isOfficialAnthropicBaseUrl,"isOfficialAnthropicBaseUrl");__name(inferRuntimeProviderKind,"inferRuntimeProviderKind");__name(resolveCodingRoutePolicy,"resolveCodingRoutePolicy")}});function createFallbackStorage(primary,secondary){return{name:`${primary.name}-with-${secondary.name}-fallback`,read(){let result2=primary.read();return result2??(secondary.read()||{})},async readAsync(){let result2=await primary.readAsync();return result2??(await secondary.readAsync()||{})},update(data){let primaryDataBefore=primary.read(),result2=primary.update(data);if(result2.success)return primaryDataBefore===null&&secondary.delete(),result2;let fallbackResult=secondary.update(data);return fallbackResult.success?(primaryDataBefore!==null&&primary.delete(),{success:!0,warning:fallbackResult.warning}):{success:!1}},delete(){let primarySuccess=primary.delete(),secondarySuccess=secondary.delete();return primarySuccess||secondarySuccess}}}var init_fallbackStorage=__esm({"src/utils/secureStorage/fallbackStorage.ts"(){__name(createFallbackStorage,"createFallbackStorage")}});async function doReadAsync(){try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername(),{stdout,code}=await execFileNoThrow("security",["find-generic-password","-a",username,"-w","-s",storageServiceName],{useCwd:!1,preserveOutputOnError:!1});if(code===0&&stdout)return jsonParse(stdout.trim())}catch{}return null}function isMacOsKeychainLocked(){if(keychainLockedCache!==void 0)return keychainLockedCache;if(process.platform!=="darwin"||!shouldUseMacOSKeychain())return keychainLockedCache=!1,!1;try{keychainLockedCache=execaSync("security",["show-keychain-info"],{reject:!1,stdio:["ignore","pipe","pipe"]}).exitCode===36}catch{keychainLockedCache=!1}return keychainLockedCache}var SECURITY_STDIN_LINE_LIMIT,macOsKeychainStorage,keychainLockedCache,init_macOsKeychainStorage=__esm({"src/utils/secureStorage/macOsKeychainStorage.ts"(){init_execa();init_debug();init_envUtils();init_execFileNoThrow();init_execFileNoThrowPortable();init_slowOperations();init_macOsKeychainHelpers();SECURITY_STDIN_LINE_LIMIT=4032,macOsKeychainStorage={name:"keychain",read(){let prev=keychainCacheState.cache;if(Date.now()-prev.cachedAt<KEYCHAIN_CACHE_TTL_MS)return prev.data;try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername(),result2=execSyncWithDefaults_DEPRECATED(`security find-generic-password -a "${username}" -w -s "${storageServiceName}"`);if(result2){let data=jsonParse(result2);return keychainCacheState.cache={data,cachedAt:Date.now()},data}}catch{}return prev.data!==null?(logForDebugging("[keychain] read failed; serving stale cache",{level:"warn"}),keychainCacheState.cache={data:prev.data,cachedAt:Date.now()},prev.data):(keychainCacheState.cache={data:null,cachedAt:Date.now()},null)},async readAsync(){let prev=keychainCacheState.cache;if(Date.now()-prev.cachedAt<KEYCHAIN_CACHE_TTL_MS)return prev.data;if(keychainCacheState.readInFlight)return keychainCacheState.readInFlight;let gen=keychainCacheState.generation,promise2=doReadAsync().then(data=>{if(gen===keychainCacheState.generation){data===null&&prev.data!==null&&logForDebugging("[keychain] readAsync failed; serving stale cache",{level:"warn"});let next=data??prev.data;return keychainCacheState.cache={data:next,cachedAt:Date.now()},keychainCacheState.readInFlight=null,next}return data});return keychainCacheState.readInFlight=promise2,promise2},update(data){clearKeychainCache();try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername(),jsonString=jsonStringify(data),hexValue=Buffer.from(jsonString,"utf-8").toString("hex"),command8=`add-generic-password -U -a "${username}" -s "${storageServiceName}" -X "${hexValue}"
|
|
228
|
+
`);let{connect:connect3,buffered}=await proxyResponsePromise;if(req.emit("proxyConnect",connect3),this.emit("proxyConnect",connect3,req),connect3.statusCode===200)return req.once("socket",resume),opts.secureEndpoint?(debug2("Upgrading socket connection to TLS"),tls.connect({...omit3(setServernameFromNonIpHost(opts),"host","path","port"),socket})):socket;socket.destroy();let fakeSocket=new net2.Socket({writable:!1});return fakeSocket.readable=!0,req.once("socket",s2=>{debug2("Replaying proxy buffer for failed request"),assert2(s2.listenerCount("data")>0),s2.push(buffered),s2.push(null)}),fakeSocket}};HttpsProxyAgent.protocols=["http","https"];__name(resume,"resume");__name(omit3,"omit")}});function clearCACertsCache(){getCACertificates.cache.clear?.(),logForDebugging("Cleared CA certificates cache")}var getCACertificates,init_caCerts=__esm({"src/utils/caCerts.ts"(){init_memoize();init_debug();init_envUtils();init_fsOperations();getCACertificates=memoize_default(()=>{let useSystemCA=hasNodeOption("--use-system-ca")||hasNodeOption("--use-openssl-ca"),extraCertsPath=process.env.NODE_EXTRA_CA_CERTS;if(logForDebugging(`CA certs: useSystemCA=${useSystemCA}, extraCertsPath=${extraCertsPath}`),!useSystemCA&&!extraCertsPath)return;let tls2=__require("tls"),certs=[];if(useSystemCA){let getCACerts=tls2.getCACertificates,systemCAs=getCACerts?.("system");if(systemCAs&&systemCAs.length>0)certs.push(...systemCAs),logForDebugging(`CA certs: Loaded ${certs.length} system CA certificates (--use-system-ca)`);else if(!getCACerts&&!extraCertsPath){logForDebugging("CA certs: --use-system-ca set but system CA API unavailable, deferring to runtime");return}else certs.push(...tls2.rootCertificates),logForDebugging(`CA certs: Loaded ${certs.length} bundled root certificates as base (--use-system-ca fallback)`)}else certs.push(...tls2.rootCertificates),logForDebugging(`CA certs: Loaded ${certs.length} bundled root certificates as base`);if(extraCertsPath)try{let extraCert=getFsImplementation().readFileSync(extraCertsPath,{encoding:"utf8"});certs.push(extraCert),logForDebugging(`CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${extraCertsPath})`)}catch(error40){logForDebugging(`CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${extraCertsPath}): ${error40}`,{level:"error"})}return certs.length>0?certs:void 0});__name(clearCACertsCache,"clearCACertsCache")}});import{Agent as HttpsAgent2}from"https";function getWebSocketTLSOptions(){let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates();if(!(!mtlsConfig&&!caCerts))return{...mtlsConfig,...caCerts&&{ca:caCerts}}}function getTLSFetchOptions(){let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates();if(!mtlsConfig&&!caCerts)return{};let tlsConfig={...mtlsConfig,...caCerts&&{ca:caCerts}};if(typeof Bun<"u")return{tls:tlsConfig};logForDebugging("TLS: Created undici agent with custom certificates");let undiciMod=__require("undici");return{dispatcher:new undiciMod.Agent({connect:{cert:tlsConfig.cert,key:tlsConfig.key,passphrase:tlsConfig.passphrase,...tlsConfig.ca&&{ca:tlsConfig.ca}},pipelining:1})}}function clearMTLSCache(){getMTLSConfig.cache.clear?.(),getMTLSAgent.cache.clear?.(),logForDebugging("Cleared mTLS configuration cache")}function configureGlobalMTLS(){getMTLSConfig()&&process.env.NODE_EXTRA_CA_CERTS&&logForDebugging("NODE_EXTRA_CA_CERTS detected - Node.js will automatically append to built-in CAs")}var getMTLSConfig,getMTLSAgent,init_mtls=__esm({"src/utils/mtls.ts"(){init_memoize();init_caCerts();init_debug();init_fsOperations();getMTLSConfig=memoize_default(()=>{let config3={};if(process.env.CLAUDE_CODE_CLIENT_CERT)try{config3.cert=getFsImplementation().readFileSync(process.env.CLAUDE_CODE_CLIENT_CERT,{encoding:"utf8"}),logForDebugging("mTLS: Loaded client certificate from CLAUDE_CODE_CLIENT_CERT")}catch(error40){logForDebugging(`mTLS: Failed to load client certificate: ${error40}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY)try{config3.key=getFsImplementation().readFileSync(process.env.CLAUDE_CODE_CLIENT_KEY,{encoding:"utf8"}),logForDebugging("mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY")}catch(error40){logForDebugging(`mTLS: Failed to load client key: ${error40}`,{level:"error"})}if(process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE&&(config3.passphrase=process.env.CLAUDE_CODE_CLIENT_KEY_PASSPHRASE,logForDebugging("mTLS: Using client key passphrase")),Object.keys(config3).length!==0)return config3}),getMTLSAgent=memoize_default(()=>{let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates();if(!mtlsConfig&&!caCerts)return;let agentOptions={...mtlsConfig,...caCerts&&{ca:caCerts},keepAlive:!0};return logForDebugging("mTLS: Creating HTTPS agent with custom certificates"),new HttpsAgent2(agentOptions)});__name(getWebSocketTLSOptions,"getWebSocketTLSOptions");__name(getTLSFetchOptions,"getTLSFetchOptions");__name(clearMTLSCache,"clearMTLSCache");__name(configureGlobalMTLS,"configureGlobalMTLS")}});function disableKeepAlive(){keepAliveDisabled=!0}function getAddressFamily(options){switch(options.family){case 0:case 4:case 6:return options.family;case"IPv6":return 6;case"IPv4":case void 0:return 4;default:throw new Error(`Unsupported address family: ${options.family}`)}}function getProxyUrl(env5=process.env){return env5.https_proxy||env5.HTTPS_PROXY||env5.http_proxy||env5.HTTP_PROXY}function getNoProxy(env5=process.env){return env5.no_proxy||env5.NO_PROXY}function shouldBypassProxy(urlString,noProxy=getNoProxy()){if(!noProxy)return!1;if(noProxy==="*")return!0;try{let url3=new URL(urlString),hostname4=url3.hostname.toLowerCase(),port=url3.port||(url3.protocol==="https:"?"443":"80"),hostWithPort=`${hostname4}:${port}`;return noProxy.split(/[,\s]+/).filter(Boolean).some(pattern=>{if(pattern=pattern.toLowerCase().trim(),pattern.includes(":"))return hostWithPort===pattern;if(pattern.startsWith(".")){let suffix=pattern;return hostname4===pattern.substring(1)||hostname4.endsWith(suffix)}return hostname4===pattern})}catch{return!1}}function createHttpsProxyAgent(proxyUrl,extra={}){let mtlsConfig=getMTLSConfig(),caCerts=getCACertificates(),agentOptions={...mtlsConfig&&{cert:mtlsConfig.cert,key:mtlsConfig.key,passphrase:mtlsConfig.passphrase},...caCerts&&{ca:caCerts}};return isEnvTruthy3(process.env.CLAUDE_CODE_PROXY_RESOLVES_HOSTS)&&(agentOptions.lookup=(hostname4,options,callback)=>{callback(null,hostname4,getAddressFamily(options))}),new HttpsProxyAgent(proxyUrl,{...agentOptions,...extra})}function createAxiosInstance(extra={}){let proxyUrl=getProxyUrl(),mtlsAgent=getMTLSAgent(),instance=axios_default.create({proxy:!1});if(!proxyUrl)return mtlsAgent&&(instance.defaults.httpsAgent=mtlsAgent),instance;let proxyAgent=createHttpsProxyAgent(proxyUrl,extra);return instance.interceptors.request.use(config3=>(config3.url&&shouldBypassProxy(config3.url)?(config3.httpsAgent=mtlsAgent,config3.httpAgent=mtlsAgent):(config3.httpsAgent=proxyAgent,config3.httpAgent=proxyAgent),config3)),instance}function getWebSocketProxyAgent(url3){let proxyUrl=getProxyUrl();if(proxyUrl&&!shouldBypassProxy(url3))return createHttpsProxyAgent(proxyUrl)}function getWebSocketProxyUrl(url3){let proxyUrl=getProxyUrl();if(proxyUrl&&!shouldBypassProxy(url3))return proxyUrl}function getProxyFetchOptions(opts){let base=keepAliveDisabled?{keepalive:!1}:{};if(opts?.forAnthropicAPI){let unixSocket=process.env.ANTHROPIC_UNIX_SOCKET;if(unixSocket&&typeof Bun<"u")return{...base,unix:unixSocket}}let proxyUrl=getProxyUrl();return proxyUrl?typeof Bun<"u"?{...base,proxy:proxyUrl,...getTLSFetchOptions()}:{...base,dispatcher:getProxyAgent(proxyUrl)}:{...base,...getTLSFetchOptions()}}function configureGlobalAgents(){let proxyUrl=getProxyUrl(),mtlsAgent=getMTLSAgent();if(proxyInterceptorId!==void 0&&(axios_default.interceptors.request.eject(proxyInterceptorId),proxyInterceptorId=void 0),axios_default.defaults.proxy=void 0,axios_default.defaults.httpAgent=void 0,axios_default.defaults.httpsAgent=void 0,proxyUrl){axios_default.defaults.proxy=!1;let proxyAgent=createHttpsProxyAgent(proxyUrl);proxyInterceptorId=axios_default.interceptors.request.use(config3=>(config3.url&&shouldBypassProxy(config3.url)?mtlsAgent?(config3.httpsAgent=mtlsAgent,config3.httpAgent=mtlsAgent):(delete config3.httpsAgent,delete config3.httpAgent):(config3.httpsAgent=proxyAgent,config3.httpAgent=proxyAgent),config3)),__require("undici").setGlobalDispatcher(getProxyAgent(proxyUrl))}else if(mtlsAgent){axios_default.defaults.httpsAgent=mtlsAgent;let mtlsOptions=getTLSFetchOptions();mtlsOptions.dispatcher&&__require("undici").setGlobalDispatcher(mtlsOptions.dispatcher)}}async function getAWSClientProxyConfig(){let proxyUrl=getProxyUrl();if(!proxyUrl)return{};let[{NodeHttpHandler},{defaultProvider}]=await Promise.all([import("@smithy/node-http-handler"),import("@aws-sdk/credential-provider-node")]),agent=createHttpsProxyAgent(proxyUrl),requestHandler=new NodeHttpHandler({httpAgent:agent,httpsAgent:agent});return{requestHandler,credentials:defaultProvider({clientConfig:{requestHandler}})}}function clearProxyCache(){getProxyAgent.cache.clear?.(),logForDebugging("Cleared proxy agent cache")}var keepAliveDisabled,getProxyAgent,proxyInterceptorId,init_proxy=__esm({"src/utils/proxy.ts"(){init_axios2();init_dist2();init_memoize();init_caCerts();init_debug();init_envUtils();init_mtls();keepAliveDisabled=!1;__name(disableKeepAlive,"disableKeepAlive");__name(getAddressFamily,"getAddressFamily");__name(getProxyUrl,"getProxyUrl");__name(getNoProxy,"getNoProxy");__name(shouldBypassProxy,"shouldBypassProxy");__name(createHttpsProxyAgent,"createHttpsProxyAgent");__name(createAxiosInstance,"createAxiosInstance");getProxyAgent=memoize_default(uri=>{let undiciMod=__require("undici"),mtlsConfig=getMTLSConfig(),caCerts=getCACertificates(),proxyOptions={httpProxy:uri,httpsProxy:uri,noProxy:process.env.NO_PROXY||process.env.no_proxy};if(mtlsConfig||caCerts){let tlsOpts={...mtlsConfig&&{cert:mtlsConfig.cert,key:mtlsConfig.key,passphrase:mtlsConfig.passphrase},...caCerts&&{ca:caCerts}};proxyOptions.connect=tlsOpts,proxyOptions.requestTls=tlsOpts}return new undiciMod.EnvHttpProxyAgent(proxyOptions)});__name(getWebSocketProxyAgent,"getWebSocketProxyAgent");__name(getWebSocketProxyUrl,"getWebSocketProxyUrl");__name(getProxyFetchOptions,"getProxyFetchOptions");__name(configureGlobalAgents,"configureGlobalAgents");__name(getAWSClientProxyConfig,"getAWSClientProxyConfig");__name(clearProxyCache,"clearProxyCache")}});function findFirstMatch(profiles,substring){return profiles.find(p=>p.includes(substring))??null}async function createBedrockClient(){let{BedrockClient}=await import("@aws-sdk/client-bedrock"),region=getAWSRegion(),skipAuth=isEnvTruthy3(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH),clientConfig={region,...process.env.ANTHROPIC_BEDROCK_BASE_URL&&{endpoint:process.env.ANTHROPIC_BEDROCK_BASE_URL},...await getAWSClientProxyConfig(),...skipAuth&&{requestHandler:new(await import("@smithy/node-http-handler")).NodeHttpHandler,httpAuthSchemes:[{schemeId:"smithy.api#noAuth",identityProvider:__name(()=>async()=>({}),"identityProvider"),signer:new(await import("@smithy/core")).NoAuthSigner}],httpAuthSchemeProvider:__name(()=>[{schemeId:"smithy.api#noAuth"}],"httpAuthSchemeProvider")}};if(!skipAuth&&!process.env.AWS_BEARER_TOKEN_BEDROCK){let cachedCredentials=await refreshAndGetAwsCredentials();cachedCredentials&&(clientConfig.credentials={accessKeyId:cachedCredentials.accessKeyId,secretAccessKey:cachedCredentials.secretAccessKey,sessionToken:cachedCredentials.sessionToken})}return new BedrockClient(clientConfig)}async function createBedrockRuntimeClient(){let{BedrockRuntimeClient}=await import("@aws-sdk/client-bedrock-runtime"),region=getAWSRegion(),skipAuth=isEnvTruthy3(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH),clientConfig={region,...process.env.ANTHROPIC_BEDROCK_BASE_URL&&{endpoint:process.env.ANTHROPIC_BEDROCK_BASE_URL},...await getAWSClientProxyConfig(),...skipAuth&&{requestHandler:new(await import("@smithy/node-http-handler")).NodeHttpHandler,httpAuthSchemes:[{schemeId:"smithy.api#noAuth",identityProvider:__name(()=>async()=>({}),"identityProvider"),signer:new(await import("@smithy/core")).NoAuthSigner}],httpAuthSchemeProvider:__name(()=>[{schemeId:"smithy.api#noAuth"}],"httpAuthSchemeProvider")}};if(!skipAuth&&!process.env.AWS_BEARER_TOKEN_BEDROCK){let cachedCredentials=await refreshAndGetAwsCredentials();cachedCredentials&&(clientConfig.credentials={accessKeyId:cachedCredentials.accessKeyId,secretAccessKey:cachedCredentials.secretAccessKey,sessionToken:cachedCredentials.sessionToken})}return new BedrockRuntimeClient(clientConfig)}function isFoundationModel(modelId){return modelId.startsWith("anthropic.")}function extractModelIdFromArn(modelId){if(!modelId.startsWith("arn:"))return modelId;let lastSlashIndex=modelId.lastIndexOf("/");return lastSlashIndex===-1?modelId:modelId.substring(lastSlashIndex+1)}function getBedrockRegionPrefix(modelId){let effectiveModelId=extractModelIdFromArn(modelId);for(let prefix of BEDROCK_REGION_PREFIXES)if(effectiveModelId.startsWith(`${prefix}.anthropic.`))return prefix}function applyBedrockRegionPrefix(modelId,prefix){let existingPrefix=getBedrockRegionPrefix(modelId);return existingPrefix?modelId.replace(`${existingPrefix}.`,`${prefix}.`):isFoundationModel(modelId)?`${prefix}.${modelId}`:modelId}var getBedrockInferenceProfiles,getInferenceProfileBackingModel,BEDROCK_REGION_PREFIXES,init_bedrock=__esm({"src/utils/model/bedrock.ts"(){init_memoize();init_auth();init_envUtils();init_log3();init_proxy();getBedrockInferenceProfiles=memoize_default(async function(){let[client2,{ListInferenceProfilesCommand}]=await Promise.all([createBedrockClient(),import("@aws-sdk/client-bedrock")]),allProfiles=[],nextToken;try{do{let command8=new ListInferenceProfilesCommand({...nextToken&&{nextToken},typeEquals:"SYSTEM_DEFINED"}),response=await client2.send(command8);response.inferenceProfileSummaries&&allProfiles.push(...response.inferenceProfileSummaries),nextToken=response.nextToken}while(nextToken);return allProfiles.filter(profile=>profile.inferenceProfileId?.includes("anthropic")).map(profile=>profile.inferenceProfileId).filter(Boolean)}catch(error40){throw logError2(error40),error40}});__name(findFirstMatch,"findFirstMatch");__name(createBedrockClient,"createBedrockClient");__name(createBedrockRuntimeClient,"createBedrockRuntimeClient");getInferenceProfileBackingModel=memoize_default(async function(profileId){try{let[client2,{GetInferenceProfileCommand}]=await Promise.all([createBedrockClient(),import("@aws-sdk/client-bedrock")]),command8=new GetInferenceProfileCommand({inferenceProfileIdentifier:profileId}),response=await client2.send(command8);if(!response.models||response.models.length===0)return null;let primaryModel=response.models[0];if(!primaryModel?.modelArn)return null;let lastSlashIndex=primaryModel.modelArn.lastIndexOf("/");return lastSlashIndex>=0?primaryModel.modelArn.substring(lastSlashIndex+1):primaryModel.modelArn}catch(error40){return logError2(error40),null}});__name(isFoundationModel,"isFoundationModel");BEDROCK_REGION_PREFIXES=["us","eu","apac","global"];__name(extractModelIdFromArn,"extractModelIdFromArn");__name(getBedrockRegionPrefix,"getBedrockRegionPrefix");__name(applyBedrockRegionPrefix,"applyBedrockRegionPrefix")}});var CLAUDE_3_7_SONNET_CONFIG,CLAUDE_3_5_V2_SONNET_CONFIG,CLAUDE_3_5_HAIKU_CONFIG,CLAUDE_HAIKU_4_5_CONFIG,CLAUDE_SONNET_4_CONFIG,CLAUDE_SONNET_4_5_CONFIG,CLAUDE_OPUS_4_CONFIG,CLAUDE_OPUS_4_1_CONFIG,CLAUDE_OPUS_4_5_CONFIG,CLAUDE_OPUS_4_6_CONFIG,CLAUDE_SONNET_4_6_CONFIG,ALL_MODEL_CONFIGS,CANONICAL_MODEL_IDS,CANONICAL_ID_TO_KEY,init_configs=__esm({"src/utils/model/configs.ts"(){CLAUDE_3_7_SONNET_CONFIG={firstParty:"claude-3-7-sonnet-20250219",bedrock:"us.anthropic.\u0063laude-3-7-sonnet-20250219-v1:0",vertex:"claude-3-7-sonnet@20250219",foundry:"claude-3-7-sonnet"},CLAUDE_3_5_V2_SONNET_CONFIG={firstParty:"claude-3-5-sonnet-20241022",bedrock:"anthropic.\u0063laude-3-5-sonnet-20241022-v2:0",vertex:"claude-3-5-sonnet-v2@20241022",foundry:"claude-3-5-sonnet"},CLAUDE_3_5_HAIKU_CONFIG={firstParty:"claude-3-5-haiku-20241022",bedrock:"us.anthropic.\u0063laude-3-5-haiku-20241022-v1:0",vertex:"claude-3-5-haiku@20241022",foundry:"claude-3-5-haiku"},CLAUDE_HAIKU_4_5_CONFIG={firstParty:"claude-haiku-4-5-20251001",bedrock:"us.anthropic.\u0063laude-haiku-4-5-20251001-v1:0",vertex:"claude-haiku-4-5@20251001",foundry:"claude-haiku-4-5"},CLAUDE_SONNET_4_CONFIG={firstParty:"claude-sonnet-4-20250514",bedrock:"us.anthropic.\u0063laude-sonnet-4-20250514-v1:0",vertex:"claude-sonnet-4@20250514",foundry:"claude-sonnet-4"},CLAUDE_SONNET_4_5_CONFIG={firstParty:"claude-sonnet-4-5-20250929",bedrock:"us.anthropic.\u0063laude-sonnet-4-5-20250929-v1:0",vertex:"claude-sonnet-4-5@20250929",foundry:"claude-sonnet-4-5"},CLAUDE_OPUS_4_CONFIG={firstParty:"claude-opus-4-20250514",bedrock:"us.anthropic.\u0063laude-opus-4-20250514-v1:0",vertex:"claude-opus-4@20250514",foundry:"claude-opus-4"},CLAUDE_OPUS_4_1_CONFIG={firstParty:"claude-opus-4-1-20250805",bedrock:"us.anthropic.\u0063laude-opus-4-1-20250805-v1:0",vertex:"claude-opus-4-1@20250805",foundry:"claude-opus-4-1"},CLAUDE_OPUS_4_5_CONFIG={firstParty:"claude-opus-4-5-20251101",bedrock:"us.anthropic.\u0063laude-opus-4-5-20251101-v1:0",vertex:"claude-opus-4-5@20251101",foundry:"claude-opus-4-5"},CLAUDE_OPUS_4_6_CONFIG={firstParty:"claude-opus-4-6",bedrock:"us.anthropic.\u0063laude-opus-4-6-v1",vertex:"claude-opus-4-6",foundry:"claude-opus-4-6"},CLAUDE_SONNET_4_6_CONFIG={firstParty:"claude-sonnet-4-6",bedrock:"us.anthropic.\u0063laude-sonnet-4-6",vertex:"claude-sonnet-4-6",foundry:"claude-sonnet-4-6"},ALL_MODEL_CONFIGS={haiku35:CLAUDE_3_5_HAIKU_CONFIG,haiku45:CLAUDE_HAIKU_4_5_CONFIG,sonnet35:CLAUDE_3_5_V2_SONNET_CONFIG,sonnet37:CLAUDE_3_7_SONNET_CONFIG,sonnet40:CLAUDE_SONNET_4_CONFIG,sonnet45:CLAUDE_SONNET_4_5_CONFIG,sonnet46:CLAUDE_SONNET_4_6_CONFIG,opus40:CLAUDE_OPUS_4_CONFIG,opus41:CLAUDE_OPUS_4_1_CONFIG,opus45:CLAUDE_OPUS_4_5_CONFIG,opus46:CLAUDE_OPUS_4_6_CONFIG},CANONICAL_MODEL_IDS=Object.values(ALL_MODEL_CONFIGS).map(c4=>c4.firstParty),CANONICAL_ID_TO_KEY=Object.fromEntries(Object.entries(ALL_MODEL_CONFIGS).map(([key,cfg])=>[cfg.firstParty,key]))}});function getAPIProvider(){return isEnvTruthy3(process.env.CLAUDE_CODE_USE_BEDROCK)?"bedrock":isEnvTruthy3(process.env.CLAUDE_CODE_USE_VERTEX)?"vertex":isEnvTruthy3(process.env.CLAUDE_CODE_USE_FOUNDRY)?"foundry":"firstParty"}function getAPIProviderForStatsig(){return getAPIProvider()}function isFirstPartyAnthropicBaseUrl(){let baseUrl=process.env.ANTHROPIC_BASE_URL;if(!baseUrl)return!0;try{let host=new URL(baseUrl).host,allowedHosts=["api.anthropic.com"];return process.env.USER_TYPE==="ant"&&allowedHosts.push("api-staging.anthropic.com"),allowedHosts.includes(host)}catch{return!1}}var init_providers=__esm({"src/utils/model/providers.ts"(){init_envUtils();__name(getAPIProvider,"getAPIProvider");__name(getAPIProviderForStatsig,"getAPIProviderForStatsig");__name(isFirstPartyAnthropicBaseUrl,"isFirstPartyAnthropicBaseUrl")}});function getBuiltinModelStrings(provider){let out={};for(let key of MODEL_KEYS)out[key]=ALL_MODEL_CONFIGS[key][provider];return out}async function getBedrockModelStrings(){let fallback=getBuiltinModelStrings("bedrock"),profiles;try{profiles=await getBedrockInferenceProfiles()}catch(error40){return logError2(error40),fallback}if(!profiles?.length)return fallback;let out={};for(let key of MODEL_KEYS){let needle=ALL_MODEL_CONFIGS[key].firstParty;out[key]=findFirstMatch(profiles,needle)||fallback[key]}return out}function applyModelOverrides(ms){let overrides=getInitialSettings().modelOverrides;if(!overrides)return ms;let out={...ms};for(let[canonicalId,override]of Object.entries(overrides)){let key=CANONICAL_ID_TO_KEY[canonicalId];key&&override&&(out[key]=override)}return out}function resolveOverriddenModel(modelId){let overrides;try{overrides=getInitialSettings().modelOverrides}catch{return modelId}if(!overrides)return modelId;for(let[canonicalId,override]of Object.entries(overrides))if(override===modelId)return canonicalId;return modelId}function initModelStrings(){if(getModelStrings()===null){if(getAPIProvider()!=="bedrock"){setModelStrings(getBuiltinModelStrings(getAPIProvider()));return}updateBedrockModelStrings()}}function getModelStrings2(){let ms=getModelStrings();return ms===null?(initModelStrings(),applyModelOverrides(getBuiltinModelStrings(getAPIProvider()))):applyModelOverrides(ms)}async function ensureModelStringsInitialized(){if(getModelStrings()===null){if(getAPIProvider()!=="bedrock"){setModelStrings(getBuiltinModelStrings(getAPIProvider()));return}await updateBedrockModelStrings()}}var MODEL_KEYS,updateBedrockModelStrings,init_modelStrings=__esm({"src/utils/model/modelStrings.ts"(){init_state();init_log3();init_sequential();init_settings2();init_bedrock();init_configs();init_providers();MODEL_KEYS=Object.keys(ALL_MODEL_CONFIGS);__name(getBuiltinModelStrings,"getBuiltinModelStrings");__name(getBedrockModelStrings,"getBedrockModelStrings");__name(applyModelOverrides,"applyModelOverrides");__name(resolveOverriddenModel,"resolveOverriddenModel");updateBedrockModelStrings=sequential(async()=>{if(getModelStrings()===null)try{let ms=await getBedrockModelStrings();setModelStrings(ms)}catch(error40){logError2(error40)}});__name(initModelStrings,"initModelStrings");__name(getModelStrings2,"getModelStrings");__name(ensureModelStringsInitialized,"ensureModelStringsInitialized")}});function hasConsoleBillingAccess(){if(isEnvTruthy3(process.env.DISABLE_COST_WARNINGS)||isClaudeAISubscriber())return!1;let authSource=getAuthTokenSource(),hasApiKey=getAnthropicApiKey()!==null;if(!authSource.hasToken&&!hasApiKey)return!1;let config3=getGlobalConfig(),orgRole=config3.oauthAccount?.organizationRole,workspaceRole=config3.oauthAccount?.workspaceRole;return!orgRole||!workspaceRole?!1:["admin","billing"].includes(orgRole)||["workspace_admin","workspace_billing"].includes(workspaceRole)}function setMockBillingAccessOverride(value){mockBillingAccessOverride=value}function hasClaudeAiBillingAccess(){if(mockBillingAccessOverride!==null)return mockBillingAccessOverride;if(!isClaudeAISubscriber())return!1;let subscriptionType=getSubscriptionType();if(subscriptionType==="max"||subscriptionType==="pro")return!0;let orgRole=getGlobalConfig().oauthAccount?.organizationRole;return!!orgRole&&["admin","billing","owner","primary_owner"].includes(orgRole)}var mockBillingAccessOverride,init_billing=__esm({"src/utils/billing.ts"(){init_auth();init_config2();init_envUtils();__name(hasConsoleBillingAccess,"hasConsoleBillingAccess");mockBillingAccessOverride=null;__name(setMockBillingAccessOverride,"setMockBillingAccessOverride");__name(hasClaudeAiBillingAccess,"hasClaudeAiBillingAccess")}});function getMockHeaderless429Message(){return process.env.USER_TYPE!=="ant"?null:process.env.CLAUDE_MOCK_HEADERLESS_429?process.env.CLAUDE_MOCK_HEADERLESS_429:mockEnabled?mockHeaderless429Message:null}function getMockHeaders(){return!mockEnabled||process.env.USER_TYPE!=="ant"||Object.keys(mockHeaders).length===0?null:mockHeaders}function clearMockHeaders(){mockHeaders={},exceededLimits=[],mockSubscriptionType=null,mockFastModeRateLimitDurationMs=null,mockFastModeRateLimitExpiresAt=null,mockHeaderless429Message=null,setMockBillingAccessOverride(null),mockEnabled=!1}function applyMockHeaders(headers){let mock=getMockHeaders();if(!mock)return headers;let newHeaders=new globalThis.Headers(headers);return Object.entries(mock).forEach(([key,value])=>{value!==void 0&&newHeaders.set(key,value)}),newHeaders}function shouldProcessMockLimits(){return process.env.USER_TYPE!=="ant"?!1:mockEnabled||!!process.env.CLAUDE_MOCK_HEADERLESS_429}function getMockSubscriptionType(){return!mockEnabled||process.env.USER_TYPE!=="ant"?null:mockSubscriptionType||DEFAULT_MOCK_SUBSCRIPTION}function shouldUseMockSubscription(){return mockEnabled&&mockSubscriptionType!==null&&process.env.USER_TYPE==="ant"}function isMockFastModeRateLimitScenario(){return mockFastModeRateLimitDurationMs!==null}function checkMockFastModeRateLimit(isFastModeActive){if(mockFastModeRateLimitDurationMs===null||!isFastModeActive)return null;if(mockFastModeRateLimitExpiresAt!==null&&Date.now()>=mockFastModeRateLimitExpiresAt)return clearMockHeaders(),null;mockFastModeRateLimitExpiresAt===null&&(mockFastModeRateLimitExpiresAt=Date.now()+mockFastModeRateLimitDurationMs);let remainingMs=mockFastModeRateLimitExpiresAt-Date.now(),headersToSend={...mockHeaders};return headersToSend["retry-after"]=String(Math.max(1,Math.ceil(remainingMs/1e3))),headersToSend}var mockHeaders,mockEnabled,mockHeaderless429Message,mockSubscriptionType,mockFastModeRateLimitDurationMs,mockFastModeRateLimitExpiresAt,DEFAULT_MOCK_SUBSCRIPTION,exceededLimits,init_mockRateLimits=__esm({"src/services/mockRateLimits.ts"(){init_billing();mockHeaders={},mockEnabled=!1,mockHeaderless429Message=null,mockSubscriptionType=null,mockFastModeRateLimitDurationMs=null,mockFastModeRateLimitExpiresAt=null,DEFAULT_MOCK_SUBSCRIPTION="max",exceededLimits=[];__name(getMockHeaderless429Message,"getMockHeaderless429Message");__name(getMockHeaders,"getMockHeaders");__name(clearMockHeaders,"clearMockHeaders");__name(applyMockHeaders,"applyMockHeaders");__name(shouldProcessMockLimits,"shouldProcessMockLimits");__name(getMockSubscriptionType,"getMockSubscriptionType");__name(shouldUseMockSubscription,"shouldUseMockSubscription");__name(isMockFastModeRateLimitScenario,"isMockFastModeRateLimitScenario");__name(checkMockFastModeRateLimit,"checkMockFastModeRateLimit")}});async function getOauthProfileFromApiKey(){let accountUuid=getGlobalConfig().oauthAccount?.accountUuid,apiKey=getAnthropicApiKey();if(!accountUuid||!apiKey)return;let endpoint=`${getOauthConfig().BASE_API_URL}/api/claude_cli_profile`;try{return(await axios_default.get(endpoint,{headers:{"x-api-key":apiKey,"anthropic-beta":OAUTH_BETA_HEADER},params:{account_uuid:accountUuid},timeout:1e4})).data}catch(error40){logError2(error40)}}async function getOauthProfileFromOauthToken(accessToken){let endpoint=`${getOauthConfig().BASE_API_URL}/api/oauth/profile`;try{return(await axios_default.get(endpoint,{headers:{Authorization:`Bearer ${accessToken}`,"Content-Type":"application/json"},timeout:1e4})).data}catch(error40){logError2(error40)}}var init_getOauthProfile=__esm({"src/services/oauth/getOauthProfile.ts"(){init_axios2();init_oauth();init_auth();init_config2();init_log3();__name(getOauthProfileFromApiKey,"getOauthProfileFromApiKey");__name(getOauthProfileFromOauthToken,"getOauthProfileFromOauthToken")}});var client_exports={};__export(client_exports,{buildAuthUrl:()=>buildAuthUrl,createAndStoreApiKey:()=>createAndStoreApiKey,exchangeCodeForTokens:()=>exchangeCodeForTokens,fetchAndStoreUserRoles:()=>fetchAndStoreUserRoles,fetchProfileInfo:()=>fetchProfileInfo,getOrganizationUUID:()=>getOrganizationUUID,isOAuthTokenExpired:()=>isOAuthTokenExpired,parseScopes:()=>parseScopes,populateOAuthAccountInfoIfNeeded:()=>populateOAuthAccountInfoIfNeeded,refreshOAuthToken:()=>refreshOAuthToken,shouldUseClaudeAIAuth:()=>shouldUseClaudeAIAuth,storeOAuthAccountInfo:()=>storeOAuthAccountInfo});function shouldUseClaudeAIAuth(scopes){return!!scopes?.includes(CLAUDE_AI_INFERENCE_SCOPE)}function parseScopes(scopeString){return scopeString?.split(" ").filter(Boolean)??[]}function buildAuthUrl({codeChallenge,state:state2,port,isManual,loginWithClaudeAi,inferenceOnly,orgUUID,loginHint,loginMethod}){let authUrlBase=loginWithClaudeAi?getOauthConfig().CLAUDE_AI_AUTHORIZE_URL:getOauthConfig().CONSOLE_AUTHORIZE_URL,authUrl=new URL(authUrlBase);authUrl.searchParams.append("code","true"),authUrl.searchParams.append("client_id",getOauthConfig().CLIENT_ID),authUrl.searchParams.append("response_type","code"),authUrl.searchParams.append("redirect_uri",isManual?getOauthConfig().MANUAL_REDIRECT_URL:`http://localhost:${port}/callback`);let scopesToUse=inferenceOnly?[CLAUDE_AI_INFERENCE_SCOPE]:ALL_OAUTH_SCOPES;return authUrl.searchParams.append("scope",scopesToUse.join(" ")),authUrl.searchParams.append("code_challenge",codeChallenge),authUrl.searchParams.append("code_challenge_method","S256"),authUrl.searchParams.append("state",state2),orgUUID&&authUrl.searchParams.append("orgUUID",orgUUID),loginHint&&authUrl.searchParams.append("login_hint",loginHint),loginMethod&&authUrl.searchParams.append("login_method",loginMethod),authUrl.toString()}async function exchangeCodeForTokens(authorizationCode,state2,codeVerifier,port,useManualRedirect=!1,expiresIn){let requestBody={grant_type:"authorization_code",code:authorizationCode,redirect_uri:useManualRedirect?getOauthConfig().MANUAL_REDIRECT_URL:`http://localhost:${port}/callback`,client_id:getOauthConfig().CLIENT_ID,code_verifier:codeVerifier,state:state2};expiresIn!==void 0&&(requestBody.expires_in=expiresIn);let response=await axios_default.post(getOauthConfig().TOKEN_URL,requestBody,{headers:{"Content-Type":"application/json"},timeout:15e3});if(response.status!==200)throw new Error(response.status===401?"Authentication failed: Invalid authorization code":`Token exchange failed (${response.status}): ${response.statusText}`);return logEvent("tengu_oauth_token_exchange_success",{}),response.data}async function refreshOAuthToken(refreshToken,{scopes:requestedScopes}={}){let requestBody={grant_type:"refresh_token",refresh_token:refreshToken,client_id:getOauthConfig().CLIENT_ID,scope:(requestedScopes?.length?requestedScopes:CLAUDE_AI_OAUTH_SCOPES).join(" ")};try{let response=await axios_default.post(getOauthConfig().TOKEN_URL,requestBody,{headers:{"Content-Type":"application/json"},timeout:15e3});if(response.status!==200)throw new Error(`Token refresh failed: ${response.statusText}`);let data=response.data,{access_token:accessToken,refresh_token:newRefreshToken=refreshToken,expires_in:expiresIn}=data,expiresAt=Date.now()+expiresIn*1e3,scopes=parseScopes(data.scope);logEvent("tengu_oauth_token_refresh_success",{});let config3=getGlobalConfig(),existing=getClaudeAIOAuthTokens2(),profileInfo=config3.oauthAccount?.billingType!==void 0&&config3.oauthAccount?.accountCreatedAt!==void 0&&config3.oauthAccount?.subscriptionCreatedAt!==void 0&&existing?.subscriptionType!=null&&existing?.rateLimitTier!=null?null:await fetchProfileInfo(accessToken);if(profileInfo&&config3.oauthAccount){let updates={};profileInfo.displayName!==void 0&&(updates.displayName=profileInfo.displayName),typeof profileInfo.hasExtraUsageEnabled=="boolean"&&(updates.hasExtraUsageEnabled=profileInfo.hasExtraUsageEnabled),profileInfo.billingType!==null&&(updates.billingType=profileInfo.billingType),profileInfo.accountCreatedAt!==void 0&&(updates.accountCreatedAt=profileInfo.accountCreatedAt),profileInfo.subscriptionCreatedAt!==void 0&&(updates.subscriptionCreatedAt=profileInfo.subscriptionCreatedAt),Object.keys(updates).length>0&&saveGlobalConfig(current=>({...current,oauthAccount:current.oauthAccount?{...current.oauthAccount,...updates}:current.oauthAccount}))}return{accessToken,refreshToken:newRefreshToken,expiresAt,scopes,subscriptionType:profileInfo?.subscriptionType??existing?.subscriptionType??null,rateLimitTier:profileInfo?.rateLimitTier??existing?.rateLimitTier??null,profile:profileInfo?.rawProfile,tokenAccount:data.account?{uuid:data.account.uuid,emailAddress:data.account.email_address,organizationUuid:data.organization?.uuid}:void 0}}catch(error40){let responseBody=axios_default.isAxiosError(error40)&&error40.response?.data?JSON.stringify(error40.response.data):void 0;throw logEvent("tengu_oauth_token_refresh_failure",{error:error40.message,...responseBody&&{responseBody}}),error40}}async function fetchAndStoreUserRoles(accessToken){let response=await axios_default.get(getOauthConfig().ROLES_URL,{headers:{Authorization:`Bearer ${accessToken}`}});if(response.status!==200)throw new Error(`Failed to fetch user roles: ${response.statusText}`);let data=response.data;if(!getGlobalConfig().oauthAccount)throw new Error("OAuth account information not found in config");saveGlobalConfig(current=>({...current,oauthAccount:current.oauthAccount?{...current.oauthAccount,organizationRole:data.organization_role,workspaceRole:data.workspace_role,organizationName:data.organization_name}:current.oauthAccount})),logEvent("tengu_oauth_roles_stored",{org_role:data.organization_role})}async function createAndStoreApiKey(accessToken){try{let response=await axios_default.post(getOauthConfig().API_KEY_URL,null,{headers:{Authorization:`Bearer ${accessToken}`}}),apiKey=response.data?.raw_key;return apiKey?(await saveApiKey(apiKey),logEvent("tengu_oauth_api_key",{status:"success",statusCode:response.status}),apiKey):null}catch(error40){throw logEvent("tengu_oauth_api_key",{status:"failure",error:error40 instanceof Error?error40.message:String(error40)}),error40}}function isOAuthTokenExpired(expiresAt){if(expiresAt===null)return!1;let bufferTime=300*1e3;return Date.now()+bufferTime>=expiresAt}async function fetchProfileInfo(accessToken){let profile=await getOauthProfileFromOauthToken(accessToken),orgType=profile?.organization?.organization_type,subscriptionType=null;switch(orgType){case"claude_max":subscriptionType="max";break;case"claude_pro":subscriptionType="pro";break;case"claude_enterprise":subscriptionType="enterprise";break;case"claude_team":subscriptionType="team";break;default:subscriptionType=null;break}let result2={subscriptionType,rateLimitTier:profile?.organization?.rate_limit_tier??null,hasExtraUsageEnabled:profile?.organization?.has_extra_usage_enabled??null,billingType:profile?.organization?.billing_type??null};return profile?.account?.display_name&&(result2.displayName=profile.account.display_name),profile?.account?.created_at&&(result2.accountCreatedAt=profile.account.created_at),profile?.organization?.subscription_created_at&&(result2.subscriptionCreatedAt=profile.organization.subscription_created_at),logEvent("tengu_oauth_profile_fetch_success",{}),{...result2,rawProfile:profile}}async function getOrganizationUUID(){let orgUUID=getGlobalConfig().oauthAccount?.organizationUuid;if(orgUUID)return orgUUID;let accessToken=getClaudeAIOAuthTokens2()?.accessToken;if(accessToken===void 0||!hasProfileScope())return null;let profileOrgUUID=(await getOauthProfileFromOauthToken(accessToken))?.organization?.uuid;return profileOrgUUID||null}async function populateOAuthAccountInfoIfNeeded(){let envAccountUuid=process.env.CLAUDE_CODE_ACCOUNT_UUID,envUserEmail=process.env.CLAUDE_CODE_USER_EMAIL,envOrganizationUuid=process.env.CLAUDE_CODE_ORGANIZATION_UUID,hasEnvVars=!!(envAccountUuid&&envUserEmail&&envOrganizationUuid);envAccountUuid&&envUserEmail&&envOrganizationUuid&&(getGlobalConfig().oauthAccount||storeOAuthAccountInfo({accountUuid:envAccountUuid,emailAddress:envUserEmail,organizationUuid:envOrganizationUuid})),await checkAndRefreshOAuthTokenIfNeeded();let config3=getGlobalConfig();if(config3.oauthAccount&&config3.oauthAccount.billingType!==void 0&&config3.oauthAccount.accountCreatedAt!==void 0&&config3.oauthAccount.subscriptionCreatedAt!==void 0||!isClaudeAISubscriber()||!hasProfileScope())return!1;let tokens=getClaudeAIOAuthTokens2();if(tokens?.accessToken){let profile=await getOauthProfileFromOauthToken(tokens.accessToken);if(profile)return hasEnvVars&&logForDebugging("OAuth profile fetch succeeded, overriding env var account info",{level:"info"}),storeOAuthAccountInfo({accountUuid:profile.account.uuid,emailAddress:profile.account.email,organizationUuid:profile.organization.uuid,displayName:profile.account.display_name||void 0,hasExtraUsageEnabled:profile.organization.has_extra_usage_enabled??!1,billingType:profile.organization.billing_type??void 0,accountCreatedAt:profile.account.created_at,subscriptionCreatedAt:profile.organization.subscription_created_at??void 0}),!0}return!1}function storeOAuthAccountInfo({accountUuid,emailAddress,organizationUuid,displayName,hasExtraUsageEnabled,billingType,accountCreatedAt,subscriptionCreatedAt}){let accountInfo={accountUuid,emailAddress,organizationUuid,hasExtraUsageEnabled,billingType,accountCreatedAt,subscriptionCreatedAt};displayName&&(accountInfo.displayName=displayName),saveGlobalConfig(current=>current.oauthAccount?.accountUuid===accountInfo.accountUuid&¤t.oauthAccount?.emailAddress===accountInfo.emailAddress&¤t.oauthAccount?.organizationUuid===accountInfo.organizationUuid&¤t.oauthAccount?.displayName===accountInfo.displayName&¤t.oauthAccount?.hasExtraUsageEnabled===accountInfo.hasExtraUsageEnabled&¤t.oauthAccount?.billingType===accountInfo.billingType&¤t.oauthAccount?.accountCreatedAt===accountInfo.accountCreatedAt&¤t.oauthAccount?.subscriptionCreatedAt===accountInfo.subscriptionCreatedAt?current:{...current,oauthAccount:accountInfo})}var init_client2=__esm({"src/services/oauth/client.ts"(){init_axios2();init_analytics();init_oauth();init_auth();init_config2();init_debug();init_getOauthProfile();__name(shouldUseClaudeAIAuth,"shouldUseClaudeAIAuth");__name(parseScopes,"parseScopes");__name(buildAuthUrl,"buildAuthUrl");__name(exchangeCodeForTokens,"exchangeCodeForTokens");__name(refreshOAuthToken,"refreshOAuthToken");__name(fetchAndStoreUserRoles,"fetchAndStoreUserRoles");__name(createAndStoreApiKey,"createAndStoreApiKey");__name(isOAuthTokenExpired,"isOAuthTokenExpired");__name(fetchProfileInfo,"fetchProfileInfo");__name(getOrganizationUUID,"getOrganizationUUID");__name(populateOAuthAccountInfoIfNeeded,"populateOAuthAccountInfoIfNeeded");__name(storeOAuthAccountInfo,"storeOAuthAccountInfo")}});import{mkdirSync as mkdirSync2,writeFileSync as writeFileSync2}from"fs";function maybePersistTokenForSubprocesses(path25,token,tokenName){if(isEnvTruthy3(process.env.CLAUDE_CODE_REMOTE))try{mkdirSync2(CCR_TOKEN_DIR,{recursive:!0,mode:448}),writeFileSync2(path25,token,{encoding:"utf8",mode:384}),logForDebugging(`Persisted ${tokenName} to ${path25} for subprocess access`)}catch(error40){logForDebugging(`Failed to persist ${tokenName} to disk (non-fatal): ${errorMessage(error40)}`,{level:"error"})}}function readTokenFromWellKnownFile(path25,tokenName){try{let token=getFsImplementation().readFileSync(path25,{encoding:"utf8"}).trim();return token?(logForDebugging(`Read ${tokenName} from well-known file ${path25}`),token):null}catch(error40){return isENOENT(error40)||logForDebugging(`Failed to read ${tokenName} from ${path25}: ${errorMessage(error40)}`,{level:"debug"}),null}}function getCredentialFromFd({envVar,wellKnownPath,label,getCached,setCached}){let cached3=getCached();if(cached3!==void 0)return cached3;let fdEnv=process.env[envVar];if(!fdEnv){let fromFile2=readTokenFromWellKnownFile(wellKnownPath,label);return setCached(fromFile2),fromFile2}let fd2=parseInt(fdEnv,10);if(Number.isNaN(fd2))return logForDebugging(`${envVar} must be a valid file descriptor number, got: ${fdEnv}`,{level:"error"}),setCached(null),null;try{let fsOps=getFsImplementation(),fdPath=process.platform==="darwin"||process.platform==="freebsd"?`/dev/fd/${fd2}`:`/proc/self/fd/${fd2}`,token=fsOps.readFileSync(fdPath,{encoding:"utf8"}).trim();return token?(logForDebugging(`Successfully read ${label} from file descriptor ${fd2}`),setCached(token),maybePersistTokenForSubprocesses(wellKnownPath,token,label),token):(logForDebugging(`File descriptor contained empty ${label}`,{level:"error"}),setCached(null),null)}catch(error40){logForDebugging(`Failed to read ${label} from file descriptor ${fd2}: ${errorMessage(error40)}`,{level:"error"});let fromFile2=readTokenFromWellKnownFile(wellKnownPath,label);return setCached(fromFile2),fromFile2}}function getOAuthTokenFromFileDescriptor(){return getCredentialFromFd({envVar:"CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR",wellKnownPath:CCR_OAUTH_TOKEN_PATH,label:"OAuth token",getCached:getOauthTokenFromFd,setCached:setOauthTokenFromFd})}function getApiKeyFromFileDescriptor(){return getCredentialFromFd({envVar:"CLAUDE_CODE_API_KEY_FILE_DESCRIPTOR",wellKnownPath:CCR_API_KEY_PATH,label:"API key",getCached:getApiKeyFromFd,setCached:setApiKeyFromFd})}var CCR_TOKEN_DIR,CCR_OAUTH_TOKEN_PATH,CCR_API_KEY_PATH,CCR_SESSION_INGRESS_TOKEN_PATH,init_authFileDescriptor=__esm({"src/utils/authFileDescriptor.ts"(){init_state();init_debug();init_envUtils();init_errors2();init_fsOperations();CCR_TOKEN_DIR="/home/claude/.\u0063laude/remote",CCR_OAUTH_TOKEN_PATH=`${CCR_TOKEN_DIR}/.oauth_token`,CCR_API_KEY_PATH=`${CCR_TOKEN_DIR}/.api_key`,CCR_SESSION_INGRESS_TOKEN_PATH=`${CCR_TOKEN_DIR}/.session_ingress_token`;__name(maybePersistTokenForSubprocesses,"maybePersistTokenForSubprocesses");__name(readTokenFromWellKnownFile,"readTokenFromWellKnownFile");__name(getCredentialFromFd,"getCredentialFromFd");__name(getOAuthTokenFromFileDescriptor,"getOAuthTokenFromFileDescriptor");__name(getApiKeyFromFileDescriptor,"getApiKeyFromFileDescriptor")}});import{createHash as createHash2}from"crypto";import{userInfo as userInfo2}from"os";function getMacOsKeychainStorageServiceName(serviceSuffix=""){let configDir=getClaudeConfigHomeDir(),dirHash=!process.env.CLAVUE_CONFIG_DIR?"":`-${createHash2("sha256").update(configDir).digest("hex").substring(0,8)}`;return`Claude Code${getOauthConfig().OAUTH_FILE_SUFFIX}${serviceSuffix}${dirHash}`}function getUsername(){try{return process.env.USER||userInfo2().username}catch{return"claude-code-user"}}function clearKeychainCache(){keychainCacheState.cache={data:null,cachedAt:0},keychainCacheState.generation++,keychainCacheState.readInFlight=null}function primeKeychainCacheFromPrefetch(stdout){if(keychainCacheState.cache.cachedAt!==0)return;let data=null;if(stdout)try{data=JSON.parse(stdout)}catch{return}keychainCacheState.cache={data,cachedAt:Date.now()}}var CREDENTIALS_SERVICE_SUFFIX,KEYCHAIN_CACHE_TTL_MS,keychainCacheState,init_macOsKeychainHelpers=__esm({"src/utils/secureStorage/macOsKeychainHelpers.ts"(){init_oauth();init_envUtils();CREDENTIALS_SERVICE_SUFFIX="-credentials";__name(getMacOsKeychainStorageServiceName,"getMacOsKeychainStorageServiceName");__name(getUsername,"getUsername");KEYCHAIN_CACHE_TTL_MS=3e4,keychainCacheState={cache:{data:null,cachedAt:0},generation:0,readInFlight:null};__name(clearKeychainCache,"clearKeychainCache");__name(primeKeychainCacheFromPrefetch,"primeKeychainCacheFromPrefetch")}});async function maybeRemoveApiKeyFromMacOSKeychainThrows(){if(process.platform==="darwin"&&shouldUseMacOSKeychain()){let storageServiceName=getMacOsKeychainStorageServiceName();if((await execa(`security delete-generic-password -a $USER -s "${storageServiceName}"`,{shell:!0,reject:!1})).exitCode!==0)throw new Error("Failed to delete keychain entry")}}function normalizeApiKeyForConfig(apiKey){return apiKey.slice(-20)}var init_authPortable=__esm({"src/utils/authPortable.ts"(){init_execa();init_envUtils();init_macOsKeychainHelpers();__name(maybeRemoveApiKeyFromMacOSKeychainThrows,"maybeRemoveApiKeyFromMacOSKeychainThrows");__name(normalizeApiKeyForConfig,"normalizeApiKeyForConfig")}});function isAwsCredentialsProviderError(err2){return err2?.name==="CredentialsProviderError"}function isValidAwsStsOutput(obj){if(!obj||typeof obj!="object")return!1;let output=obj;if(!output.Credentials||typeof output.Credentials!="object")return!1;let credentials=output.Credentials;return typeof credentials.AccessKeyId=="string"&&typeof credentials.SecretAccessKey=="string"&&typeof credentials.SessionToken=="string"&&credentials.AccessKeyId.length>0&&credentials.SecretAccessKey.length>0&&credentials.SessionToken.length>0}async function checkStsCallerIdentity(){let{STSClient,GetCallerIdentityCommand}=await import("@aws-sdk/client-sts");await new STSClient().send(new GetCallerIdentityCommand({}))}async function clearAwsIniCache(){try{logForDebugging("Clearing AWS credential provider cache");let{fromIni}=await import("@aws-sdk/credential-providers");await fromIni({ignoreCache:!0})(),logForDebugging("AWS credential provider cache refreshed")}catch{logForDebugging("Failed to clear AWS credential cache (this is expected if no credentials are configured)")}}var init_aws=__esm({"src/utils/aws.ts"(){init_debug();__name(isAwsCredentialsProviderError,"isAwsCredentialsProviderError");__name(isValidAwsStsOutput,"isValidAwsStsOutput");__name(checkStsCallerIdentity,"checkStsCallerIdentity");__name(clearAwsIniCache,"clearAwsIniCache")}});var AwsAuthStatusManager,init_awsAuthStatusManager=__esm({"src/utils/awsAuthStatusManager.ts"(){init_signal();AwsAuthStatusManager=class _AwsAuthStatusManager{static{__name(this,"AwsAuthStatusManager")}static instance=null;status={isAuthenticating:!1,output:[]};changed=createSignal();static getInstance(){return _AwsAuthStatusManager.instance||(_AwsAuthStatusManager.instance=new _AwsAuthStatusManager),_AwsAuthStatusManager.instance}getStatus(){return{...this.status,output:[...this.status.output]}}startAuthentication(){this.status={isAuthenticating:!0,output:[]},this.changed.emit(this.getStatus())}addOutput(line){this.status.output.push(line),this.changed.emit(this.getStatus())}setError(error40){this.status.error=error40,this.changed.emit(this.getStatus())}endAuthentication(success2){success2?this.status={isAuthenticating:!1,output:[]}:this.status.isAuthenticating=!1,this.changed.emit(this.getStatus())}subscribe=this.changed.subscribe;static reset(){_AwsAuthStatusManager.instance&&(_AwsAuthStatusManager.instance.changed.clear(),_AwsAuthStatusManager.instance=null)}}}});var CLAUDE_CODE_20250219_BETA_HEADER,INTERLEAVED_THINKING_BETA_HEADER,CONTEXT_1M_BETA_HEADER,CONTEXT_MANAGEMENT_BETA_HEADER,STRUCTURED_OUTPUTS_BETA_HEADER,WEB_SEARCH_BETA_HEADER,TOOL_SEARCH_BETA_HEADER_1P,TOOL_SEARCH_BETA_HEADER_3P,EFFORT_BETA_HEADER,TASK_BUDGETS_BETA_HEADER,PROMPT_CACHING_SCOPE_BETA_HEADER,FAST_MODE_BETA_HEADER,REDACT_THINKING_BETA_HEADER,TOKEN_EFFICIENT_TOOLS_BETA_HEADER,SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER,AFK_MODE_BETA_HEADER,CLI_INTERNAL_BETA_HEADER,ADVISOR_BETA_HEADER,BEDROCK_EXTRA_PARAMS_HEADERS,VERTEX_COUNT_TOKENS_ALLOWED_BETAS,init_betas=__esm({"src/constants/betas.ts"(){CLAUDE_CODE_20250219_BETA_HEADER="claude-code-20250219",INTERLEAVED_THINKING_BETA_HEADER="interleaved-thinking-2025-05-14",CONTEXT_1M_BETA_HEADER="context-1m-2025-08-07",CONTEXT_MANAGEMENT_BETA_HEADER="context-management-2025-06-27",STRUCTURED_OUTPUTS_BETA_HEADER="structured-outputs-2025-12-15",WEB_SEARCH_BETA_HEADER="web-search-2025-03-05",TOOL_SEARCH_BETA_HEADER_1P="advanced-tool-use-2025-11-20",TOOL_SEARCH_BETA_HEADER_3P="tool-search-tool-2025-10-19",EFFORT_BETA_HEADER="effort-2025-11-24",TASK_BUDGETS_BETA_HEADER="task-budgets-2026-03-13",PROMPT_CACHING_SCOPE_BETA_HEADER="prompt-caching-scope-2026-01-05",FAST_MODE_BETA_HEADER="fast-mode-2026-02-01",REDACT_THINKING_BETA_HEADER="redact-thinking-2026-02-12",TOKEN_EFFICIENT_TOOLS_BETA_HEADER="token-efficient-tools-2026-03-28",SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER="",AFK_MODE_BETA_HEADER="afk-mode-2026-01-31",CLI_INTERNAL_BETA_HEADER=process.env.USER_TYPE==="ant"?"cli-internal-2026-02-09":"",ADVISOR_BETA_HEADER="advisor-tool-2026-03-01",BEDROCK_EXTRA_PARAMS_HEADERS=new Set([INTERLEAVED_THINKING_BETA_HEADER,CONTEXT_1M_BETA_HEADER,TOOL_SEARCH_BETA_HEADER_3P]),VERTEX_COUNT_TOKENS_ALLOWED_BETAS=new Set([CLAUDE_CODE_20250219_BETA_HEADER,INTERLEAVED_THINKING_BETA_HEADER,CONTEXT_MANAGEMENT_BETA_HEADER])}});function isFastModeEnabled(){return!isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_FAST_MODE)}function isFastModeAvailable(){return isFastModeEnabled()?getFastModeUnavailableReason()===null:!1}function getDisabledReasonMessage(disabledReason,authType){switch(disabledReason){case"free":return authType==="oauth"?"Fast mode requires a paid subscription":"Fast mode unavailable during evaluation. Please purchase credits.";case"preference":return"Fast mode has been disabled by your organization";case"extra_usage_disabled":return"Fast mode requires extra usage billing \xB7 /extra-usage to enable";case"network_error":return"Fast mode unavailable due to network connectivity issues";case"unknown":return"Fast mode is currently unavailable"}}function getFastModeUnavailableReason(){if(!isFastModeEnabled())return"Fast mode is not available";let statigReason=getFeatureValue_CACHED_MAY_BE_STALE("tengu_penguins_off",null);if(statigReason!==null)return logForDebugging(`Fast mode unavailable: ${statigReason}`),statigReason;if(!isInBundledMode()&&getFeatureValue_CACHED_MAY_BE_STALE("tengu_marble_sandcastle",!1))return"Fast mode requires the native binary \xB7 Install from: https://claude.com/product/claude-code";if(getIsNonInteractiveSession()&&preferThirdPartyAuthentication()&&!getKairosActive()&&!getSettingsForSource("flagSettings")?.fastMode){let reason="Fast mode is not available in the Agent SDK";return logForDebugging(`Fast mode unavailable: ${reason}`),reason}if(getAPIProvider()!=="firstParty"){let reason="Fast mode is not available on Bedrock, Vertex, or Foundry";return logForDebugging(`Fast mode unavailable: ${reason}`),reason}if(orgStatus.status==="disabled"){if((orgStatus.reason==="network_error"||orgStatus.reason==="unknown")&&isEnvTruthy3(process.env.CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS))return null;let authType=getClaudeAIOAuthTokens2()!==null?"oauth":"api-key",reason=getDisabledReasonMessage(orgStatus.reason,authType);return logForDebugging(`Fast mode unavailable: ${reason}`),reason}return null}function getFastModeModel(){return"opus"+(isOpus1mMergeEnabled()?"[1m]":"")}function getInitialFastModeSetting(model){if(!isFastModeEnabled()||!isFastModeAvailable()||!isFastModeSupportedByModel(model))return!1;let settings=getInitialSettings();return settings.fastModePerSessionOptIn?!1:settings.fastMode===!0}function isFastModeSupportedByModel(modelSetting){if(!isFastModeEnabled())return!1;let model=modelSetting??getDefaultMainLoopModelSetting();return parseUserSpecifiedModel(model).toLowerCase().includes("opus-4-6")}function getFastModeRuntimeState(){return runtimeState.status==="cooldown"&&Date.now()>=runtimeState.resetAt&&(isFastModeEnabled()&&!hasLoggedCooldownExpiry&&(logForDebugging("Fast mode cooldown expired, re-enabling fast mode"),hasLoggedCooldownExpiry=!0,cooldownExpired.emit()),runtimeState={status:"active"}),runtimeState}function triggerFastModeCooldown(resetTimestamp,reason){if(!isFastModeEnabled())return;runtimeState={status:"cooldown",resetAt:resetTimestamp,reason},hasLoggedCooldownExpiry=!1;let cooldownDurationMs=resetTimestamp-Date.now();logForDebugging(`Fast mode cooldown triggered (${reason}), duration ${Math.round(cooldownDurationMs/1e3)}s`),logEvent("tengu_fast_mode_fallback_triggered",{cooldown_duration_ms:cooldownDurationMs,cooldown_reason:reason}),cooldownTriggered.emit(resetTimestamp,reason)}function clearFastModeCooldown(){runtimeState={status:"active"}}function handleFastModeRejectedByAPI(){orgStatus.status!=="disabled"&&(orgStatus={status:"disabled",reason:"preference"},updateSettingsForSource("userSettings",{fastMode:void 0}),saveGlobalConfig(current=>({...current,penguinModeOrgEnabled:!1})),orgFastModeChange.emit(!1))}function getOverageDisabledMessage(reason){switch(reason){case"out_of_credits":return"Fast mode disabled \xB7 extra usage credits exhausted";case"org_level_disabled":case"org_service_level_disabled":return"Fast mode disabled \xB7 extra usage disabled by your organization";case"org_level_disabled_until":return"Fast mode disabled \xB7 extra usage spending cap reached";case"member_level_disabled":return"Fast mode disabled \xB7 extra usage disabled for your account";case"seat_tier_level_disabled":case"seat_tier_zero_credit_limit":case"member_zero_credit_limit":return"Fast mode disabled \xB7 extra usage not available for your plan";case"overage_not_provisioned":case"no_limits_configured":return"Fast mode requires extra usage billing \xB7 /extra-usage to enable";default:return"Fast mode disabled \xB7 extra usage not available"}}function isOutOfCreditsReason(reason){return reason==="org_level_disabled_until"||reason==="out_of_credits"}function handleFastModeOverageRejection(reason){let message=getOverageDisabledMessage(reason);logForDebugging(`Fast mode overage rejection: ${reason??"unknown"} \u2014 ${message}`),logEvent("tengu_fast_mode_overage_rejected",{overage_disabled_reason:reason??"unknown"}),isOutOfCreditsReason(reason)||(updateSettingsForSource("userSettings",{fastMode:void 0}),saveGlobalConfig(current=>({...current,penguinModeOrgEnabled:!1}))),overageRejection.emit(message)}function isFastModeCooldown(){return getFastModeRuntimeState().status==="cooldown"}function getFastModeState(model,fastModeUserEnabled){let enabled=isFastModeEnabled()&&isFastModeAvailable()&&!!fastModeUserEnabled&&isFastModeSupportedByModel(model);return enabled&&isFastModeCooldown()?"cooldown":enabled?"on":"off"}async function fetchFastModeStatus(auth2){let endpoint=`${getOauthConfig().BASE_API_URL}/api/claude_code_penguin_mode`,headers="accessToken"in auth2?{Authorization:`Bearer ${auth2.accessToken}`,"anthropic-beta":OAUTH_BETA_HEADER}:{"x-api-key":auth2.apiKey};return(await axios_default.get(endpoint,{headers})).data}function resolveFastModeStatusFromCache(){if(!isFastModeEnabled()||orgStatus.status!=="pending")return;let isAnt=process.env.USER_TYPE==="ant",cachedEnabled=getGlobalConfig().penguinModeOrgEnabled===!0;orgStatus=isAnt||cachedEnabled?{status:"enabled"}:{status:"disabled",reason:"unknown"}}async function prefetchFastModeStatus(){if(isEssentialTrafficOnly()||!isFastModeEnabled())return;if(inflightPrefetch)return logForDebugging("Fast mode prefetch in progress, returning in-flight promise"),inflightPrefetch;let apiKey=getAnthropicApiKey();if(!(getClaudeAIOAuthTokens2()?.accessToken&&hasProfileScope())&&!apiKey){let isAnt=process.env.USER_TYPE==="ant",cachedEnabled=getGlobalConfig().penguinModeOrgEnabled===!0;orgStatus=isAnt||cachedEnabled?{status:"enabled"}:{status:"disabled",reason:"preference"};return}let now2=Date.now();if(now2-lastPrefetchAt<PREFETCH_MIN_INTERVAL_MS){logForDebugging("Skipping fast mode prefetch, fetched recently");return}lastPrefetchAt=now2;let fetchWithCurrentAuth=__name(async()=>{let currentTokens=getClaudeAIOAuthTokens2(),auth2=currentTokens?.accessToken&&hasProfileScope()?{accessToken:currentTokens.accessToken}:apiKey?{apiKey}:null;if(!auth2)throw new Error("No auth available");return fetchFastModeStatus(auth2)},"fetchWithCurrentAuth");async function doFetch(){try{let status2;try{status2=await fetchWithCurrentAuth()}catch(err2){if(axios_default.isAxiosError(err2)&&(err2.response?.status===401||err2.response?.status===403&&typeof err2.response?.data=="string"&&err2.response.data.includes("OAuth token has been revoked"))){let failedAccessToken=getClaudeAIOAuthTokens2()?.accessToken;if(failedAccessToken)await handleOAuth401Error(failedAccessToken),status2=await fetchWithCurrentAuth();else throw err2}else throw err2}let previousEnabled=orgStatus.status!=="pending"?orgStatus.status==="enabled":getGlobalConfig().penguinModeOrgEnabled;orgStatus=status2.enabled?{status:"enabled"}:{status:"disabled",reason:status2.disabled_reason??"preference"},previousEnabled!==status2.enabled&&(status2.enabled||updateSettingsForSource("userSettings",{fastMode:void 0}),saveGlobalConfig(current=>({...current,penguinModeOrgEnabled:status2.enabled})),orgFastModeChange.emit(status2.enabled)),logForDebugging(`Org fast mode: ${status2.enabled?"enabled":`disabled (${status2.disabled_reason??"preference"})`}`)}catch(err2){let isAnt=process.env.USER_TYPE==="ant",cachedEnabled=getGlobalConfig().penguinModeOrgEnabled===!0;orgStatus=isAnt||cachedEnabled?{status:"enabled"}:{status:"disabled",reason:"network_error"},logForDebugging(`Failed to fetch org fast mode status, defaulting to ${orgStatus.status==="enabled"?"enabled (cached)":"disabled (network_error)"}: ${err2}`,{level:"error"}),logEvent("tengu_org_penguin_mode_fetch_failed",{})}finally{inflightPrefetch=null}}return __name(doFetch,"doFetch"),inflightPrefetch=doFetch(),inflightPrefetch}var FAST_MODE_MODEL_DISPLAY,runtimeState,hasLoggedCooldownExpiry,cooldownTriggered,cooldownExpired,onCooldownTriggered,onCooldownExpired,overageRejection,onFastModeOverageRejection,orgStatus,orgFastModeChange,onOrgFastModeChanged,PREFETCH_MIN_INTERVAL_MS,lastPrefetchAt,inflightPrefetch,init_fastMode=__esm({"src/utils/fastMode.ts"(){init_axios2();init_oauth();init_growthbook();init_state();init_analytics();init_auth();init_bundledMode();init_config2();init_debug();init_envUtils();init_model();init_providers();init_privacyLevel();init_settings2();init_signal();__name(isFastModeEnabled,"isFastModeEnabled");__name(isFastModeAvailable,"isFastModeAvailable");__name(getDisabledReasonMessage,"getDisabledReasonMessage");__name(getFastModeUnavailableReason,"getFastModeUnavailableReason");FAST_MODE_MODEL_DISPLAY="Opus 4.6";__name(getFastModeModel,"getFastModeModel");__name(getInitialFastModeSetting,"getInitialFastModeSetting");__name(isFastModeSupportedByModel,"isFastModeSupportedByModel");runtimeState={status:"active"},hasLoggedCooldownExpiry=!1,cooldownTriggered=createSignal(),cooldownExpired=createSignal(),onCooldownTriggered=cooldownTriggered.subscribe,onCooldownExpired=cooldownExpired.subscribe;__name(getFastModeRuntimeState,"getFastModeRuntimeState");__name(triggerFastModeCooldown,"triggerFastModeCooldown");__name(clearFastModeCooldown,"clearFastModeCooldown");__name(handleFastModeRejectedByAPI,"handleFastModeRejectedByAPI");overageRejection=createSignal(),onFastModeOverageRejection=overageRejection.subscribe;__name(getOverageDisabledMessage,"getOverageDisabledMessage");__name(isOutOfCreditsReason,"isOutOfCreditsReason");__name(handleFastModeOverageRejection,"handleFastModeOverageRejection");__name(isFastModeCooldown,"isFastModeCooldown");__name(getFastModeState,"getFastModeState");orgStatus={status:"pending"},orgFastModeChange=createSignal(),onOrgFastModeChanged=orgFastModeChange.subscribe;__name(fetchFastModeStatus,"fetchFastModeStatus");PREFETCH_MIN_INTERVAL_MS=3e4,lastPrefetchAt=0,inflightPrefetch=null;__name(resolveFastModeStatusFromCache,"resolveFastModeStatusFromCache");__name(prefetchFastModeStatus,"prefetchFastModeStatus")}});function getOpus46CostTier(fastMode){return isFastModeEnabled()&&fastMode?COST_TIER_30_150:COST_TIER_5_25}function tokensToUSDCost(modelCosts,usage){return usage.input_tokens/1e6*modelCosts.inputTokens+usage.output_tokens/1e6*modelCosts.outputTokens+(usage.cache_read_input_tokens??0)/1e6*modelCosts.promptCacheReadTokens+(usage.cache_creation_input_tokens??0)/1e6*modelCosts.promptCacheWriteTokens+(usage.server_tool_use?.web_search_requests??0)*modelCosts.webSearchRequests}function getModelCosts(model,usage){let shortName=getCanonicalName(model);if(shortName===firstPartyNameToCanonical(CLAUDE_OPUS_4_6_CONFIG.firstParty)){let isFastMode=usage.speed==="fast";return getOpus46CostTier(isFastMode)}let costs=MODEL_COSTS[shortName];return costs||(trackUnknownModelCost(model,shortName),MODEL_COSTS[getCanonicalName(getDefaultMainLoopModelSetting())]??DEFAULT_UNKNOWN_MODEL_COST)}function trackUnknownModelCost(model,shortName){logEvent("tengu_unknown_model_cost",{model,shortName}),setHasUnknownModelCost()}function calculateUSDCost(resolvedModel,usage){let modelCosts=getModelCosts(resolvedModel,usage);return tokensToUSDCost(modelCosts,usage)}function calculateCostFromTokens(model,tokens){let usage={input_tokens:tokens.inputTokens,output_tokens:tokens.outputTokens,cache_read_input_tokens:tokens.cacheReadInputTokens,cache_creation_input_tokens:tokens.cacheCreationInputTokens};return calculateUSDCost(model,usage)}function formatPrice(price){return Number.isInteger(price)?`$${price}`:`$${price.toFixed(2)}`}function formatModelPricing(costs){return`${formatPrice(costs.inputTokens)}/${formatPrice(costs.outputTokens)} per Mtok`}var COST_TIER_3_15,COST_TIER_15_75,COST_TIER_5_25,COST_TIER_30_150,COST_HAIKU_35,COST_HAIKU_45,DEFAULT_UNKNOWN_MODEL_COST,MODEL_COSTS,init_modelCost=__esm({"src/utils/modelCost.ts"(){init_analytics();init_state();init_fastMode();init_configs();init_model();COST_TIER_3_15={inputTokens:3,outputTokens:15,promptCacheWriteTokens:3.75,promptCacheReadTokens:.3,webSearchRequests:.01},COST_TIER_15_75={inputTokens:15,outputTokens:75,promptCacheWriteTokens:18.75,promptCacheReadTokens:1.5,webSearchRequests:.01},COST_TIER_5_25={inputTokens:5,outputTokens:25,promptCacheWriteTokens:6.25,promptCacheReadTokens:.5,webSearchRequests:.01},COST_TIER_30_150={inputTokens:30,outputTokens:150,promptCacheWriteTokens:37.5,promptCacheReadTokens:3,webSearchRequests:.01},COST_HAIKU_35={inputTokens:.8,outputTokens:4,promptCacheWriteTokens:1,promptCacheReadTokens:.08,webSearchRequests:.01},COST_HAIKU_45={inputTokens:1,outputTokens:5,promptCacheWriteTokens:1.25,promptCacheReadTokens:.1,webSearchRequests:.01},DEFAULT_UNKNOWN_MODEL_COST=COST_TIER_5_25;__name(getOpus46CostTier,"getOpus46CostTier");MODEL_COSTS={[firstPartyNameToCanonical(CLAUDE_3_5_HAIKU_CONFIG.firstParty)]:COST_HAIKU_35,[firstPartyNameToCanonical(CLAUDE_HAIKU_4_5_CONFIG.firstParty)]:COST_HAIKU_45,[firstPartyNameToCanonical(CLAUDE_3_5_V2_SONNET_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_3_7_SONNET_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_SONNET_4_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_SONNET_4_5_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_SONNET_4_6_CONFIG.firstParty)]:COST_TIER_3_15,[firstPartyNameToCanonical(CLAUDE_OPUS_4_CONFIG.firstParty)]:COST_TIER_15_75,[firstPartyNameToCanonical(CLAUDE_OPUS_4_1_CONFIG.firstParty)]:COST_TIER_15_75,[firstPartyNameToCanonical(CLAUDE_OPUS_4_5_CONFIG.firstParty)]:COST_TIER_5_25,[firstPartyNameToCanonical(CLAUDE_OPUS_4_6_CONFIG.firstParty)]:COST_TIER_5_25};__name(tokensToUSDCost,"tokensToUSDCost");__name(getModelCosts,"getModelCosts");__name(trackUnknownModelCost,"trackUnknownModelCost");__name(calculateUSDCost,"calculateUSDCost");__name(calculateCostFromTokens,"calculateCostFromTokens");__name(formatPrice,"formatPrice");__name(formatModelPricing,"formatModelPricing")}});function isModelAlias(modelInput){return MODEL_ALIASES.includes(modelInput)}function isModelFamilyAlias(model){return MODEL_FAMILY_ALIASES.includes(model)}var MODEL_ALIASES,MODEL_FAMILY_ALIASES,init_aliases=__esm({"src/utils/model/aliases.ts"(){MODEL_ALIASES=["sonnet","opus","haiku","best","sonnet[1m]","opus[1m]","opusplan"];__name(isModelAlias,"isModelAlias");MODEL_FAMILY_ALIASES=["sonnet","opus","haiku"];__name(isModelFamilyAlias,"isModelFamilyAlias")}});function modelBelongsToFamily(model,family){return model.includes(family)?!0:isModelAlias(model)?parseUserSpecifiedModel(model).toLowerCase().includes(family):!1}function prefixMatchesModel(modelName,prefix){return modelName.startsWith(prefix)?modelName.length===prefix.length||modelName[prefix.length]==="-":!1}function modelMatchesVersionPrefix(model,entry){let resolvedModel=isModelAlias(model)?parseUserSpecifiedModel(model).toLowerCase():model;return!!(prefixMatchesModel(resolvedModel,entry)||!entry.startsWith("claude-")&&prefixMatchesModel(resolvedModel,`claude-${entry}`))}function familyHasSpecificEntries(family,allowlist){for(let entry of allowlist){if(isModelFamilyAlias(entry))continue;let idx=entry.indexOf(family);if(idx===-1)continue;let afterFamily=idx+family.length;if(afterFamily===entry.length||entry[afterFamily]==="-")return!0}return!1}function isModelAllowed(model){let settings=getSettings_DEPRECATED()||{},{availableModels}=settings;if(!availableModels)return!0;if(availableModels.length===0)return!1;let normalizedModel2=resolveOverriddenModel(model).trim().toLowerCase(),normalizedAllowlist=availableModels.map(m3=>m3.trim().toLowerCase());if(normalizedAllowlist.includes(normalizedModel2)&&(!isModelFamilyAlias(normalizedModel2)||!familyHasSpecificEntries(normalizedModel2,normalizedAllowlist)))return!0;for(let entry of normalizedAllowlist)if(isModelFamilyAlias(entry)&&!familyHasSpecificEntries(entry,normalizedAllowlist)&&modelBelongsToFamily(normalizedModel2,entry))return!0;if(isModelAlias(normalizedModel2)){let resolved=parseUserSpecifiedModel(normalizedModel2).toLowerCase();if(normalizedAllowlist.includes(resolved))return!0}for(let entry of normalizedAllowlist)if(!isModelFamilyAlias(entry)&&isModelAlias(entry)&&parseUserSpecifiedModel(entry).toLowerCase()===normalizedModel2)return!0;for(let entry of normalizedAllowlist)if(!isModelFamilyAlias(entry)&&!isModelAlias(entry)&&modelMatchesVersionPrefix(normalizedModel2,entry))return!0;return!1}var init_modelAllowlist=__esm({"src/utils/model/modelAllowlist.ts"(){init_settings2();init_aliases();init_model();init_modelStrings();__name(modelBelongsToFamily,"modelBelongsToFamily");__name(prefixMatchesModel,"prefixMatchesModel");__name(modelMatchesVersionPrefix,"modelMatchesVersionPrefix");__name(familyHasSpecificEntries,"familyHasSpecificEntries");__name(isModelAllowed,"isModelAllowed")}});var model_exports={};__export(model_exports,{firstPartyNameToCanonical:()=>firstPartyNameToCanonical,getBestModel:()=>getBestModel,getCanonicalName:()=>getCanonicalName,getClaudeAiUserDefaultModelDescription:()=>getClaudeAiUserDefaultModelDescription,getDefaultHaikuModel:()=>getDefaultHaikuModel,getDefaultMainLoopModel:()=>getDefaultMainLoopModel,getDefaultMainLoopModelSetting:()=>getDefaultMainLoopModelSetting,getDefaultOpusModel:()=>getDefaultOpusModel,getDefaultSonnetModel:()=>getDefaultSonnetModel,getMainLoopModel:()=>getMainLoopModel,getMarketingNameForModel:()=>getMarketingNameForModel,getOpus46PricingSuffix:()=>getOpus46PricingSuffix,getPublicModelDisplayName:()=>getPublicModelDisplayName,getPublicModelName:()=>getPublicModelName,getRuntimeMainLoopModel:()=>getRuntimeMainLoopModel,getSmallFastModel:()=>getSmallFastModel,getUserSpecifiedModelSetting:()=>getUserSpecifiedModelSetting,isLegacyModelRemapEnabled:()=>isLegacyModelRemapEnabled,isNonCustomOpusModel:()=>isNonCustomOpusModel,isOpus1mMergeEnabled:()=>isOpus1mMergeEnabled,modelDisplayString:()=>modelDisplayString,normalizeModelStringForAPI:()=>normalizeModelStringForAPI,parseUserSpecifiedModel:()=>parseUserSpecifiedModel,renderDefaultModelSetting:()=>renderDefaultModelSetting,renderModelName:()=>renderModelName,renderModelSetting:()=>renderModelSetting,resolveSkillModelOverride:()=>resolveSkillModelOverride});function getSmallFastModel(){return process.env.ANTHROPIC_SMALL_FAST_MODEL||getDefaultHaikuModel()}function isNonCustomOpusModel(model){return model===getModelStrings2().opus40||model===getModelStrings2().opus41||model===getModelStrings2().opus45||model===getModelStrings2().opus46}function getUserSpecifiedModelSetting(){let specifiedModel,modelOverride=getMainLoopModelOverride();if(modelOverride!==void 0)specifiedModel=modelOverride;else{let settings=getSettings_DEPRECATED()||{};specifiedModel=process.env.ANTHROPIC_MODEL||settings.model||void 0}if(!(specifiedModel&&!isModelAllowed(specifiedModel)))return specifiedModel}function getMainLoopModel(){let model=getUserSpecifiedModelSetting();return model!=null?parseUserSpecifiedModel(model):getDefaultMainLoopModel()}function getBestModel(){return getDefaultOpusModel()}function getDefaultOpusModel(){return process.env.ANTHROPIC_DEFAULT_OPUS_MODEL?process.env.ANTHROPIC_DEFAULT_OPUS_MODEL:getAPIProvider()!=="firstParty"?getModelStrings2().opus46:getModelStrings2().opus46}function getDefaultSonnetModel(){return process.env.ANTHROPIC_DEFAULT_SONNET_MODEL?process.env.ANTHROPIC_DEFAULT_SONNET_MODEL:getAPIProvider()!=="firstParty"?getModelStrings2().sonnet45:getModelStrings2().sonnet46}function getDefaultHaikuModel(){return process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL?process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL:getModelStrings2().haiku45}function getRuntimeMainLoopModel(params){let{permissionMode,mainLoopModel,exceeds200kTokens=!1}=params;return getUserSpecifiedModelSetting()==="opusplan"&&permissionMode==="plan"&&!exceeds200kTokens?getDefaultOpusModel():getUserSpecifiedModelSetting()==="haiku"&&permissionMode==="plan"?getDefaultSonnetModel():mainLoopModel}function getDefaultMainLoopModelSetting(){return process.env.USER_TYPE==="ant"?getAntModelOverrideConfig()?.defaultModel??getDefaultOpusModel()+"[1m]":isMaxSubscriber()||isTeamPremiumSubscriber()?getDefaultOpusModel()+(isOpus1mMergeEnabled()?"[1m]":""):getDefaultSonnetModel()}function getDefaultMainLoopModel(){return parseUserSpecifiedModel(getDefaultMainLoopModelSetting())}function firstPartyNameToCanonical(name){if(name=name.toLowerCase(),name.includes("claude-opus-4-6"))return"claude-opus-4-6";if(name.includes("claude-opus-4-5"))return"claude-opus-4-5";if(name.includes("claude-opus-4-1"))return"claude-opus-4-1";if(name.includes("claude-opus-4"))return"claude-opus-4";if(name.includes("claude-sonnet-4-6"))return"claude-sonnet-4-6";if(name.includes("claude-sonnet-4-5"))return"claude-sonnet-4-5";if(name.includes("claude-sonnet-4"))return"claude-sonnet-4";if(name.includes("claude-haiku-4-5"))return"claude-haiku-4-5";if(name.includes("claude-3-7-sonnet"))return"claude-3-7-sonnet";if(name.includes("claude-3-5-sonnet"))return"claude-3-5-sonnet";if(name.includes("claude-3-5-haiku"))return"claude-3-5-haiku";if(name.includes("claude-3-opus"))return"claude-3-opus";if(name.includes("claude-3-sonnet"))return"claude-3-sonnet";if(name.includes("claude-3-haiku"))return"claude-3-haiku";let match=name.match(/(claude-(\d+-\d+-)?\w+)/);return match&&match[1]?match[1]:name}function getCanonicalName(fullModelName){return firstPartyNameToCanonical(resolveOverriddenModel(fullModelName))}function getClaudeAiUserDefaultModelDescription(fastMode=!1){return isMaxSubscriber()||isTeamPremiumSubscriber()?isOpus1mMergeEnabled()?`Opus 4.6 with 1M context \xB7 Most capable for complex work${fastMode?getOpus46PricingSuffix(!0):""}`:`Opus 4.6 \xB7 Most capable for complex work${fastMode?getOpus46PricingSuffix(!0):""}`:"Sonnet 4.6 \xB7 Best for everyday tasks"}function renderDefaultModelSetting(setting){return setting==="opusplan"?"Opus 4.6 in plan mode, else Sonnet 4.6":renderModelName(parseUserSpecifiedModel(setting))}function getOpus46PricingSuffix(fastMode){if(getAPIProvider()!=="firstParty")return"";let pricing=formatModelPricing(getOpus46CostTier(fastMode));return` \xB7${fastMode?` (${LIGHTNING_BOLT})`:""} ${pricing}`}function isOpus1mMergeEnabled(){return!(is1mContextDisabled()||isProSubscriber()||getAPIProvider()!=="firstParty"||isClaudeAISubscriber()&&getSubscriptionType()===null)}function renderModelSetting(setting){return setting==="opusplan"?"Opus Plan":isModelAlias(setting)?capitalize2(setting):renderModelName(setting)}function getPublicModelDisplayName(model){switch(model){case getModelStrings2().opus46:return"Opus 4.6";case getModelStrings2().opus46+"[1m]":return"Opus 4.6 (1M context)";case getModelStrings2().opus45:return"Opus 4.5";case getModelStrings2().opus41:return"Opus 4.1";case getModelStrings2().opus40:return"Opus 4";case getModelStrings2().sonnet46+"[1m]":return"Sonnet 4.6 (1M context)";case getModelStrings2().sonnet46:return"Sonnet 4.6";case getModelStrings2().sonnet45+"[1m]":return"Sonnet 4.5 (1M context)";case getModelStrings2().sonnet45:return"Sonnet 4.5";case getModelStrings2().sonnet40:return"Sonnet 4";case getModelStrings2().sonnet40+"[1m]":return"Sonnet 4 (1M context)";case getModelStrings2().sonnet37:return"Sonnet 3.7";case getModelStrings2().sonnet35:return"Sonnet 3.5";case getModelStrings2().haiku45:return"Haiku 4.5";case getModelStrings2().haiku35:return"Haiku 3.5";default:return null}}function maskModelCodename(baseName){let[codename="",...rest2]=baseName.split("-");return[codename.slice(0,3)+"*".repeat(Math.max(0,codename.length-3)),...rest2].join("-")}function renderModelName(model){let publicName=getPublicModelDisplayName(model);if(publicName)return publicName;if(process.env.USER_TYPE==="ant"){let resolved=parseUserSpecifiedModel(model),antModel=resolveAntModel(model);if(antModel){let baseName=antModel.model.replace(/\[1m\]$/i,""),masked=maskModelCodename(baseName),suffix=has1mContext(resolved)?"[1m]":"";return masked+suffix}return resolved!==model?`${model} (${resolved})`:resolved}return model}function getPublicModelName(model){let publicName=getPublicModelDisplayName(model);return publicName?`Claude ${publicName}`:`Claude (${model})`}function parseUserSpecifiedModel(modelInput){let modelInputTrimmed=modelInput.trim(),normalizedModel2=modelInputTrimmed.toLowerCase(),has1mTag=has1mContext(normalizedModel2),modelString=has1mTag?normalizedModel2.replace(/\[1m]$/i,"").trim():normalizedModel2;if(isModelAlias(modelString))switch(modelString){case"opusplan":return getDefaultSonnetModel()+(has1mTag?"[1m]":"");case"sonnet":return getDefaultSonnetModel()+(has1mTag?"[1m]":"");case"haiku":return getDefaultHaikuModel()+(has1mTag?"[1m]":"");case"opus":return getDefaultOpusModel()+(has1mTag?"[1m]":"");case"best":return getBestModel();default:}if(getAPIProvider()==="firstParty"&&isLegacyOpusFirstParty(modelString)&&isLegacyModelRemapEnabled())return getDefaultOpusModel()+(has1mTag?"[1m]":"");if(process.env.USER_TYPE==="ant"){let has1mAntTag=has1mContext(normalizedModel2),baseAntModel=normalizedModel2.replace(/\[1m]$/i,"").trim(),antModel=resolveAntModel(baseAntModel);if(antModel){let suffix=has1mAntTag?"[1m]":"";return antModel.model+suffix}}return has1mTag?modelInputTrimmed.replace(/\[1m\]$/i,"").trim()+"[1m]":modelInputTrimmed}function resolveSkillModelOverride(skillModel,currentModel){return has1mContext(skillModel)||!has1mContext(currentModel)?skillModel:modelSupports1M(parseUserSpecifiedModel(skillModel))?skillModel+"[1m]":skillModel}function isLegacyOpusFirstParty(model){return LEGACY_OPUS_FIRSTPARTY.includes(model)}function isLegacyModelRemapEnabled(){return!isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP)}function modelDisplayString(model){if(model===null)return process.env.USER_TYPE==="ant"?`Default for Ants (${renderDefaultModelSetting(getDefaultMainLoopModelSetting())})`:isClaudeAISubscriber()?`Default (${getClaudeAiUserDefaultModelDescription()})`:`Default (${getDefaultMainLoopModel()})`;let resolvedModel=parseUserSpecifiedModel(model);return model===resolvedModel?resolvedModel:`${model} (${resolvedModel})`}function getMarketingNameForModel(modelId){if(getAPIProvider()==="foundry")return;let has1m=modelId.toLowerCase().includes("[1m]"),canonical=getCanonicalName(modelId);if(canonical.includes("claude-opus-4-6"))return has1m?"Opus 4.6 (with 1M context)":"Opus 4.6";if(canonical.includes("claude-opus-4-5"))return"Opus 4.5";if(canonical.includes("claude-opus-4-1"))return"Opus 4.1";if(canonical.includes("claude-opus-4"))return"Opus 4";if(canonical.includes("claude-sonnet-4-6"))return has1m?"Sonnet 4.6 (with 1M context)":"Sonnet 4.6";if(canonical.includes("claude-sonnet-4-5"))return has1m?"Sonnet 4.5 (with 1M context)":"Sonnet 4.5";if(canonical.includes("claude-sonnet-4"))return has1m?"Sonnet 4 (with 1M context)":"Sonnet 4";if(canonical.includes("claude-3-7-sonnet"))return"Claude 3.7 Sonnet";if(canonical.includes("claude-3-5-sonnet"))return"Claude 3.5 Sonnet";if(canonical.includes("claude-haiku-4-5"))return"Haiku 4.5";if(canonical.includes("claude-3-5-haiku"))return"Claude 3.5 Haiku"}function normalizeModelStringForAPI(model){return model.replace(/\[(1|2)m\]/gi,"")}var LEGACY_OPUS_FIRSTPARTY,init_model=__esm({"src/utils/model/model.ts"(){init_state();init_auth();init_context();init_envUtils();init_modelStrings();init_modelCost();init_settings2();init_providers();init_figures2();init_modelAllowlist();init_aliases();init_stringUtils();__name(getSmallFastModel,"getSmallFastModel");__name(isNonCustomOpusModel,"isNonCustomOpusModel");__name(getUserSpecifiedModelSetting,"getUserSpecifiedModelSetting");__name(getMainLoopModel,"getMainLoopModel");__name(getBestModel,"getBestModel");__name(getDefaultOpusModel,"getDefaultOpusModel");__name(getDefaultSonnetModel,"getDefaultSonnetModel");__name(getDefaultHaikuModel,"getDefaultHaikuModel");__name(getRuntimeMainLoopModel,"getRuntimeMainLoopModel");__name(getDefaultMainLoopModelSetting,"getDefaultMainLoopModelSetting");__name(getDefaultMainLoopModel,"getDefaultMainLoopModel");__name(firstPartyNameToCanonical,"firstPartyNameToCanonical");__name(getCanonicalName,"getCanonicalName");__name(getClaudeAiUserDefaultModelDescription,"getClaudeAiUserDefaultModelDescription");__name(renderDefaultModelSetting,"renderDefaultModelSetting");__name(getOpus46PricingSuffix,"getOpus46PricingSuffix");__name(isOpus1mMergeEnabled,"isOpus1mMergeEnabled");__name(renderModelSetting,"renderModelSetting");__name(getPublicModelDisplayName,"getPublicModelDisplayName");__name(maskModelCodename,"maskModelCodename");__name(renderModelName,"renderModelName");__name(getPublicModelName,"getPublicModelName");__name(parseUserSpecifiedModel,"parseUserSpecifiedModel");__name(resolveSkillModelOverride,"resolveSkillModelOverride");LEGACY_OPUS_FIRSTPARTY=["claude-opus-4-20250514","claude-opus-4-1-20250805","claude-opus-4-0","claude-opus-4-1"];__name(isLegacyOpusFirstParty,"isLegacyOpusFirstParty");__name(isLegacyModelRemapEnabled,"isLegacyModelRemapEnabled");__name(modelDisplayString,"modelDisplayString");__name(getMarketingNameForModel,"getMarketingNameForModel");__name(normalizeModelStringForAPI,"normalizeModelStringForAPI")}});var APP_NAME,CLI_COMMAND_NAME,APP_VERSION_FALLBACK,APP_VERSION,APP_WORDMARK,APP_BRAND_SUBTITLE,init_branding=__esm({"src/constants/branding.ts"(){APP_NAME="Clavue",CLI_COMMAND_NAME="clavue",APP_VERSION_FALLBACK="1.0.0",APP_VERSION=typeof MACRO<"u"?"1.0.0":APP_VERSION_FALLBACK,APP_WORDMARK=`/${APP_NAME.toLowerCase()}`,APP_BRAND_SUBTITLE="AI coding CLI"}});function clear3PModelCapabilityOverrideCache(){get3PModelCapabilityOverride.cache?.clear?.()}var TIERS,get3PModelCapabilityOverride,init_modelSupportOverrides=__esm({"src/utils/model/modelSupportOverrides.ts"(){init_memoize();init_providers();TIERS=[{modelEnvVar:"ANTHROPIC_DEFAULT_OPUS_MODEL",capabilitiesEnvVar:"ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES"},{modelEnvVar:"ANTHROPIC_DEFAULT_SONNET_MODEL",capabilitiesEnvVar:"ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES"},{modelEnvVar:"ANTHROPIC_DEFAULT_HAIKU_MODEL",capabilitiesEnvVar:"ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES"}],get3PModelCapabilityOverride=memoize_default((model,capability)=>{if(getAPIProvider()==="firstParty")return;let m3=model.toLowerCase();for(let tier of TIERS){let pinned=process.env[tier.modelEnvVar],capabilities=process.env[tier.capabilitiesEnvVar];if(!(!pinned||capabilities===void 0)&&m3===pinned.toLowerCase())return capabilities.toLowerCase().split(",").map(s2=>s2.trim()).includes(capability)}},(model,capability)=>`${model.toLowerCase()}:${capability}`);__name(clear3PModelCapabilityOverrideCache,"clear3PModelCapabilityOverrideCache")}});function normalizeValue2(value){return String(value??"").trim()}function getOpenAINativeRecommendedModels(slot){let slotDefinition=PROVIDER_MODEL_MODE_DEFINITIONS.openai_native.slotDefinitions[slot];return slotDefinition.recommendedModels??slotDefinition.allowedModels??[]}function inferProviderModelFamily(model){let normalizedModel2=normalizeValue2(model).toLowerCase();return normalizedModel2?normalizedModel2.startsWith("claude-")?"claude":normalizedModel2.startsWith("gpt-")||normalizedModel2.startsWith("o1")||normalizedModel2.startsWith("o3")||normalizedModel2.startsWith("o4")||normalizedModel2.includes("codex")?"openai":"unknown":"unknown"}function getProviderModeSlotValues(routing){let primaryModel=normalizeValue2(routing?.primaryModel),executionModel=normalizeValue2(routing?.generalModel)||normalizeValue2(routing?.subagentModel)||primaryModel,fastModel=normalizeValue2(routing?.smallFastModel)||executionModel||primaryModel,planModel=normalizeValue2(routing?.planModel)||normalizeValue2(routing?.guideModel)||primaryModel;return{primaryModel,haikuModel:fastModel||executionModel||primaryModel,sonnetModel:executionModel||primaryModel,opusModel:planModel||primaryModel}}function getProviderModeRawSlotValues(routing){return{primary:normalizeValue2(routing?.primaryModel),haiku:normalizeValue2(routing?.smallFastModel),sonnet:normalizeValue2(routing?.generalModel)||normalizeValue2(routing?.subagentModel),opus:normalizeValue2(routing?.planModel)||normalizeValue2(routing?.guideModel)}}function getConfiguredFamilies(routing){let slotValues=getProviderModeSlotValues(routing);return new Set(Object.values(slotValues).map(model=>inferProviderModelFamily(model)).filter(family=>family!=="unknown"))}function localize(language,english,chinese){return language==="zh"?chinese:english}function isProviderModelModeId(value){return VALID_PROVIDER_MODEL_MODES.has(value)}function getProviderModelModeDefinition(modeId){return PROVIDER_MODEL_MODE_DEFINITIONS[modeId]}function getProviderModelModeLabel(modeId){return getProviderModelModeDefinition(modeId).label}function getProviderModelModeDescription(modeId){return getProviderModelModeDefinition(modeId).description}function getDefaultProviderModelModeForProviderPreset(providerId){return providerId==="anthropic"||providerId==="glm"||providerId==="minimax"?"anthropic_native":providerId==="kimi"?"openai_native":"hybrid_compatible"}function getProviderModelModeForProfile(profile){let explicitMode=normalizeValue2(profile?.modelMode);if(isProviderModelModeId(explicitMode))return explicitMode;let presetId=normalizeValue2(profile?.modelRouting?.presetId);if(presetId==="claude_code_heritage")return"anthropic_native";if(presetId==="gpt_5_4_codex"||presetId==="gpt_5_1_stable"||presetId==="gpt_5_3_codex")return"openai_native";let configuredFamilies=getConfiguredFamilies(profile?.modelRouting);return configuredFamilies.size===1?configuredFamilies.has("claude")?"anthropic_native":"openai_native":configuredFamilies.size>1?"hybrid_compatible":getDefaultProviderModelModeForProviderPreset(profile?.providerId)}function getProviderModeSlotDefinition(modeId,slot){return getProviderModelModeDefinition(modeId).slotDefinitions[slot]}function getProviderModeAllowedModels(modeId,slot){return[...getProviderModeSlotDefinition(modeId,slot).allowedModels??[]]}function isProviderModelCompatibleWithMode(modeId,model){let normalizedModel2=normalizeValue2(model);if(!normalizedModel2)return!1;let definition=getProviderModelModeDefinition(modeId),family=inferProviderModelFamily(normalizedModel2);return definition.enforcedFamily?family===definition.enforcedFamily:family!=="unknown"||normalizedModel2.length>0}function getProviderModeAllowedModelsForRole(modeId,role){switch(role){case"primary":return getProviderModeAllowedModels(modeId,"primary");case"subagent":return getProviderModeAllowedModels(modeId,"sonnet");case"fast":return getProviderModeAllowedModels(modeId,"haiku");case"plan":return getProviderModeAllowedModels(modeId,"opus")}}function createDefaultProviderModeSlotValues(modeId){let definition=getProviderModelModeDefinition(modeId);return{primaryModel:definition.slotDefinitions.primary.defaultModel,haikuModel:definition.slotDefinitions.haiku.defaultModel,sonnetModel:definition.slotDefinitions.sonnet.defaultModel,opusModel:definition.slotDefinitions.opus.defaultModel}}function validateProviderModeRouting(modeId,routing,{language="en",requireExplicitHybridSelections=!1}={}){let definition=getProviderModelModeDefinition(modeId),rawSlotValues=getProviderModeRawSlotValues(routing),issues=[];if(definition.enforcedFamily){for(let slot of PROVIDER_MODE_SLOT_ORDER){let model=rawSlotValues[slot];if(!model)continue;let family=inferProviderModelFamily(model);if(family!=="unknown"&&family!==definition.enforcedFamily&&issues.push({level:"error",slot,message:localize(language,`${getProviderModelModeLabel(modeId)} mode only supports ${definition.enforcedFamily==="claude"?"Claude-family":"GPT/Codex-family"} models in the ${definition.slotDefinitions[slot].label.toLowerCase()} slot.`,`${getProviderModelModeLabel(modeId)} \u6A21\u5F0F\u4EC5\u652F\u6301\u5728 ${definition.slotDefinitions[slot].label} \u4E2D\u4F7F\u7528${definition.enforcedFamily==="claude"?" Claude family":" GPT/Codex family"}\u6A21\u578B\u3002`)}),definition.enforcedFamily==="openai"&&family==="openai"&&!getOpenAINativeRecommendedModels(slot).includes(model)){let recommendedModels=getOpenAINativeRecommendedModels(slot);issues.push({level:"warn",slot,message:localize(language,`${definition.slotDefinitions[slot].label} is not in the recommended OpenAI-native set (${recommendedModels.join(", ")}). Keep it if this provider validates tool calling for ${model}.`,`${definition.slotDefinitions[slot].label} \u4E0D\u5728 OpenAI-native \u63A8\u8350\u6A21\u578B\u5217\u8868\uFF08${recommendedModels.join("\u3001")}\uFF09\u4E2D\u3002\u5982\u679C\u8BE5 provider \u5DF2\u9A8C\u8BC1 ${model} \u7684\u5DE5\u5177\u8C03\u7528\u80FD\u529B\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u4F7F\u7528\u3002`)})}}return issues}for(let slot of PROVIDER_MODE_SLOT_ORDER){let model=rawSlotValues[slot],slotDefinition=definition.slotDefinitions[slot],normalizedModel2=normalizeValue2(model),allowedModels=slotDefinition.allowedModels??[];if(!normalizedModel2){requireExplicitHybridSelections&&slotDefinition.requireExplicitSelection===!0&&issues.push({level:"error",slot,message:localize(language,`${slotDefinition.label} is required for ${definition.label} mode.`,`${definition.label} \u6A21\u5F0F\u4E0B\u5FC5\u987B\u8BBE\u7F6E${slotDefinition.label}\u3002`)});continue}allowedModels.length>0&&!allowedModels.includes(normalizedModel2)&&issues.push({level:"warn",slot,message:localize(language,`${slotDefinition.label} is not in the recommended set (${allowedModels.join(", ")}). Keep it if your provider validates tool calling for ${normalizedModel2}.`,`${slotDefinition.label} \u4E0D\u5728\u63A8\u8350\u6A21\u578B\u5217\u8868\u4E2D\uFF08${allowedModels.join("\u3001")}\uFF09\u3002\u5982\u679C\u8BE5 provider \u5DF2\u9A8C\u8BC1 ${normalizedModel2} \u7684\u5DE5\u5177\u8C03\u7528\u80FD\u529B\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u4F7F\u7528\u3002`)})}return issues}function filterProviderModeAutoRepairCandidates(modeId,roles,candidates){let definition=getProviderModelModeDefinition(modeId),uniqueCandidates=[...new Set(candidates.map(candidate=>candidate.trim()))].filter(Boolean);if(definition.enforcedFamily)return uniqueCandidates.filter(candidate=>inferProviderModelFamily(candidate)===definition.enforcedFamily);let allowedSets=roles.map(role=>getProviderModeAllowedModelsForRole(modeId,role)).filter(models=>models.length>0).map(models=>new Set(models));return allowedSets.length===0?uniqueCandidates:uniqueCandidates.filter(candidate=>allowedSets.every(allowedModels=>allowedModels.has(candidate)))}var PROVIDER_MODE_SLOT_ORDER,PROVIDER_MODEL_MODE_DEFINITIONS,VALID_PROVIDER_MODEL_MODES,init_providerModes=__esm({"src/utils/providerModes.ts"(){__name(normalizeValue2,"normalizeValue");__name(getOpenAINativeRecommendedModels,"getOpenAINativeRecommendedModels");PROVIDER_MODE_SLOT_ORDER=["primary","haiku","sonnet","opus"];__name(inferProviderModelFamily,"inferProviderModelFamily");__name(getProviderModeSlotValues,"getProviderModeSlotValues");__name(getProviderModeRawSlotValues,"getProviderModeRawSlotValues");__name(getConfiguredFamilies,"getConfiguredFamilies");PROVIDER_MODEL_MODE_DEFINITIONS={anthropic_native:{id:"anthropic_native",label:"Anthropic-native",description:"Claude-family mode. Keep routing on Anthropic-compatible Claude models and validate native tool calling on that family.",providerPresetIds:["anthropic","openrouter","glm","minimax","custom"],routingPresetIds:["claude_code_heritage"],defaultRoutingPresetId:"claude_code_heritage",enforcedFamily:"claude",slotDefinitions:{primary:{label:"Primary model",description:"Main session workhorse model for Anthropic-native mode.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6"},haiku:{label:"Fast model",description:"Fast-response helper slot for Anthropic-native mode.",placeholder:"claude-haiku-4-5",defaultModel:"claude-haiku-4-5"},sonnet:{label:"Workhorse model",description:"Execution slot for day-to-day coding and subagent work in Anthropic-native mode.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6"},opus:{label:"Planner model",description:"Planning and guidance slot for Anthropic-native mode.",placeholder:"claude-opus-4-6",defaultModel:"claude-opus-4-6"}}},openai_native:{id:"openai_native",label:"OpenAI-native",description:"GPT/Codex-family mode. Keep routing on GPT/Codex models and validate the Responses compatibility route on that family.",providerPresetIds:["kimi","openrouter","custom"],routingPresetIds:["gpt_5_5_max","gpt_5_4_codex","gpt_5_1_stable","gpt_5_3_codex"],defaultRoutingPresetId:"gpt_5_5_max",enforcedFamily:"openai",slotDefinitions:{primary:{label:"Primary model",description:"Main session workhorse model for OpenAI-native mode.",placeholder:"gpt-5.5",defaultModel:"gpt-5.5",recommendedModels:["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.1"]},haiku:{label:"Fast model",description:"Fast-response helper slot for OpenAI-native mode.",placeholder:"gpt-5.3-codex",defaultModel:"gpt-5.3-codex",recommendedModels:["gpt-5.3-codex","gpt-5.4","gpt-5.1"]},sonnet:{label:"Workhorse model",description:"Execution slot for day-to-day coding and subagent work in OpenAI-native mode.",placeholder:"gpt-5.5",defaultModel:"gpt-5.5",recommendedModels:["gpt-5.5","gpt-5.3-codex","gpt-5.4","gpt-5.1"]},opus:{label:"Planner model",description:"Planning and guidance slot for OpenAI-native mode.",placeholder:"gpt-5.5",defaultModel:"gpt-5.5",recommendedModels:["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.1"]}}},hybrid_compatible:{id:"hybrid_compatible",label:"Hybrid-compatible",description:"Mixed-family mode. Each slot chooses from a curated compatibility set so Clavue can keep model matching explicit and predictable.",providerPresetIds:["custom","openrouter"],routingPresetIds:["custom"],defaultRoutingPresetId:"custom",slotDefinitions:{primary:{label:"Primary model",description:"Main session slot. Choose either the GPT workhorse or Claude Sonnet.",placeholder:"gpt-5.4",defaultModel:"gpt-5.4",allowedModels:["gpt-5.4","claude-sonnet-4-6"],requireExplicitSelection:!0},haiku:{label:"Fast model",description:"Fast helper slot. Choose either GPT Codex speed or Claude Haiku speed.",placeholder:"gpt-5.3-codex",defaultModel:"gpt-5.3-codex",allowedModels:["gpt-5.3-codex","claude-haiku-4-5"],requireExplicitSelection:!0},sonnet:{label:"Workhorse model",description:"Execution slot for subagents and coding work. Choose GPT-5.4 or Claude Sonnet.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6",allowedModels:["claude-sonnet-4-6","gpt-5.4"],requireExplicitSelection:!0},opus:{label:"Planner model",description:"Planning slot. Choose Claude Opus or GPT-5.4 for compatibility.",placeholder:"claude-opus-4-6",defaultModel:"claude-opus-4-6",allowedModels:["claude-opus-4-6","gpt-5.4"],requireExplicitSelection:!0}}}},VALID_PROVIDER_MODEL_MODES=new Set(Object.keys(PROVIDER_MODEL_MODE_DEFINITIONS));__name(localize,"localize");__name(isProviderModelModeId,"isProviderModelModeId");__name(getProviderModelModeDefinition,"getProviderModelModeDefinition");__name(getProviderModelModeLabel,"getProviderModelModeLabel");__name(getProviderModelModeDescription,"getProviderModelModeDescription");__name(getDefaultProviderModelModeForProviderPreset,"getDefaultProviderModelModeForProviderPreset");__name(getProviderModelModeForProfile,"getProviderModelModeForProfile");__name(getProviderModeSlotDefinition,"getProviderModeSlotDefinition");__name(getProviderModeAllowedModels,"getProviderModeAllowedModels");__name(isProviderModelCompatibleWithMode,"isProviderModelCompatibleWithMode");__name(getProviderModeAllowedModelsForRole,"getProviderModeAllowedModelsForRole");__name(createDefaultProviderModeSlotValues,"createDefaultProviderModeSlotValues");__name(validateProviderModeRouting,"validateProviderModeRouting");__name(filterProviderModeAutoRepairCandidates,"filterProviderModeAutoRepairCandidates")}});function normalizeValue3(value){return String(value||"").trim()}function uniqueValues(values2){return[...new Set(values2.map(value=>value.trim()).filter(Boolean))]}function getConfiguredFamilies2(routing){let models=[routing?.primaryModel,routing?.subagentModel,routing?.smallFastModel,routing?.planModel,routing?.exploreModel,routing?.generalModel,routing?.teamModel,routing?.guideModel];return new Set(models.map(model=>inferProviderModelFamily(model)).filter(family=>family!=="unknown"))}function getConfiguredStrategyId(profile){let strategyId=normalizeValue3(profile?.modelRouting?.presetId);return strategyId==="provider_default"||strategyId==="claude_code_heritage"||strategyId==="gpt_5_4_codex"||strategyId==="gpt_5_1_stable"||strategyId==="gpt_5_3_codex"||strategyId==="custom"?strategyId:"unknown"}function getFallbacksForFamily(family,roleKind){return family==="claude"?roleKind==="plan"?CLAUDE_PLAN_FALLBACKS:roleKind==="primary"?CLAUDE_PRIMARY_FALLBACKS:CLAUDE_EXECUTION_FALLBACKS:family==="openai"?roleKind==="plan"?OPENAI_PLAN_FALLBACKS:roleKind==="primary"?OPENAI_PRIMARY_FALLBACKS:OPENAI_EXECUTION_FALLBACKS:roleKind==="plan"?[...OPENAI_PLAN_FALLBACKS,...CLAUDE_PLAN_FALLBACKS]:roleKind==="primary"?[...OPENAI_PRIMARY_FALLBACKS,...CLAUDE_PRIMARY_FALLBACKS]:[...OPENAI_EXECUTION_FALLBACKS,...CLAUDE_EXECUTION_FALLBACKS]}function getPreferredRepairFamily(roles,failedModel,routing){let failedFamily=inferProviderModelFamily(failedModel);if(failedFamily!=="unknown")return failedFamily;if(roles.includes("primary")){let executionFamily=inferProviderModelFamily(routing.subagentModel);if(executionFamily!=="unknown")return executionFamily}else if(roles.includes("plan")){let primaryFamily=inferProviderModelFamily(routing.primaryModel);if(primaryFamily!=="unknown")return primaryFamily}else{let primaryFamily=inferProviderModelFamily(routing.primaryModel);if(primaryFamily!=="unknown")return primaryFamily}let routeFamily=inferProviderExperienceFamily({id:CURRENT_PROVIDER_PROFILE_ID,modelRouting:routing});return routeFamily==="anthropic_native"?"claude":routeFamily==="openai_native"?"openai":"unknown"}function inferProviderExperienceFamily(profile){return getProviderModelModeForProfile(profile)}function getProviderExperienceLabel(profile){return getProviderModelModeLabel(inferProviderExperienceFamily(profile))}function getProviderRoutingStrategyLabel(profile){switch(getConfiguredStrategyId(profile)){case"provider_default":return"Provider defaults";case"claude_code_heritage":return"Anthropic-native heritage";case"gpt_5_4_codex":return"GPT-5.4 + GPT-5.3 Codex";case"gpt_5_1_stable":return"GPT-5.1 stable";case"gpt_5_3_codex":return"GPT-5.3 Codex everywhere";case"custom":return"Custom routing";default:return"Unknown strategy"}}function getProviderRoutingStrategyDescription(profile){switch(getConfiguredStrategyId(profile)){case"provider_default":return"Use provider defaults and keep mode-specific family selection implicit.";case"claude_code_heritage":return"Anthropic-native routing with Sonnet for execution, Haiku for fast work, and Opus for planning.";case"gpt_5_4_codex":return"OpenAI-native routing with GPT-5.4 primary and GPT-5.3 Codex execution slots.";case"gpt_5_1_stable":return"OpenAI-native routing that keeps all slots on GPT-5.1.";case"gpt_5_3_codex":return"OpenAI-native routing that keeps all slots on GPT-5.3 Codex.";case"custom":return"Advanced routing. Validate carefully when mixing model families or compatibility slots.";default:return"No explicit routing strategy is set."}}function getProviderExperienceDescription(profile){let modeId=inferProviderExperienceFamily(profile),modeDescription=getProviderModelModeDescription(modeId);return modeId==="anthropic_native"?profile?.providerId==="anthropic"?`${modeDescription} Official Anthropic path is active.`:`${modeDescription} Running through a compatible gateway path.`:modeId==="openai_native"?profile?.providerId==="anthropic"?`${modeDescription} OpenAI-family routing is being adapted over Anthropic transport.`:`${modeDescription} Running through a compatible gateway path.`:`${modeDescription} Use compatible providers that can serve every selected slot on one route.`}function getProviderSelectionSource(profile){return profile?.id===CURRENT_PROVIDER_PROFILE_ID?"current_env":"saved_profile"}function getProviderSourceLabel(profile){return profile?getProviderSelectionSource(profile)==="current_env"||profile.provenance?.kind==="synthetic_current_env"?"Current env (synthetic)":profile.provenance?.kind==="current_env_adopted"?"Saved from current API config":profile.provenance?.kind==="imported"?profile.provenance.sourceId==="zcf"?"Imported from zcf":profile.provenance.sourceId==="ccjk"?"Imported from ccjk":"Imported profile":"Saved profile":"Saved profile"}function getProviderSourceDescription(profile){return profile?getProviderSelectionSource(profile)==="current_env"||profile.provenance?.kind==="synthetic_current_env"?"Synthetic profile derived from the live API environment. It is available now but not stored as a reusable saved profile.":profile.provenance?.kind==="current_env_adopted"?"Reusable saved profile created from the current API environment.":profile.provenance?.kind==="imported"?profile.provenance.sourceId==="zcf"?"Reusable profile imported from the compatible zcf configuration.":profile.provenance.sourceId==="ccjk"?"Reusable profile imported from the compatible ccjk configuration.":"Reusable profile imported from a compatible external configuration.":"Reusable provider profile stored in local Clavue settings.":"Reusable provider profile stored in local Clavue settings."}function getProviderMigrationHint(profile,{hasSavedProfile=!1}={}){if(!profile)return null;if(getProviderSelectionSource(profile)==="current_env"||profile.provenance?.kind==="synthetic_current_env"){let modeLabel=getProviderExperienceLabel(profile),modeId=inferProviderExperienceFamily(profile);return hasSavedProfile?`A live ${modeLabel} API config is also present. Open /provider if you want to compare it with the saved profile or adopt the current environment as a reusable profile.`:modeId==="anthropic_native"?"Anthropic-native API config detected in the live environment. Open /provider to save it as a reusable profile.":modeId==="openai_native"?"OpenAI-native API config detected in the live environment. Open /provider to save it as a reusable profile.":"Hybrid-compatible API config detected in the live environment. Open /provider to save it as a reusable profile."}return profile.provenance?.kind==="current_env_adopted"?"This saved profile was adopted from the current API environment.":profile.provenance?.kind==="imported"?"This saved profile was imported from a compatible external source and can now be edited locally like any other saved profile.":null}function areProviderProfilesEquivalent(left,right){return!left||!right?!1:normalizeValue3(left.providerId)===normalizeValue3(right.providerId)&&inferProviderExperienceFamily(left)===inferProviderExperienceFamily(right)&&normalizeValue3(left.baseUrl)===normalizeValue3(right.baseUrl)&&normalizeValue3(left.authType)===normalizeValue3(right.authType)&&normalizeValue3(left.credential)===normalizeValue3(right.credential)&&getConfiguredStrategyId(left)===getConfiguredStrategyId(right)&&normalizeValue3(left.modelRouting?.primaryModel)===normalizeValue3(right.modelRouting?.primaryModel)&&normalizeValue3(left.modelRouting?.subagentModel)===normalizeValue3(right.modelRouting?.subagentModel)&&normalizeValue3(left.modelRouting?.smallFastModel)===normalizeValue3(right.modelRouting?.smallFastModel)&&normalizeValue3(left.modelRouting?.planModel)===normalizeValue3(right.modelRouting?.planModel)&&normalizeValue3(left.modelRouting?.guideModel)===normalizeValue3(right.modelRouting?.guideModel)}function buildProviderContinuitySnapshot(profile,{effectivePrimaryModel}={}){if(!profile)return null;let routedPrimaryModel=normalizeValue3(profile.modelRouting?.primaryModel),primaryModel=normalizeValue3(effectivePrimaryModel??routedPrimaryModel);return{profileId:normalizeValue3(profile.id)||null,primaryModel:primaryModel||null,experienceLabel:getProviderExperienceLabel(profile),routingLabel:getProviderRoutingStrategyLabel(profile),sourceLabel:getProviderSourceLabel(profile)}}function getProviderLocalValidationWarnings(profile,{language="en"}={}){if(!profile)return[];let modeId=inferProviderExperienceFamily(profile),strategyId=getConfiguredStrategyId(profile),configuredFamilies=getConfiguredFamilies2(profile.modelRouting),warnings=validateProviderModeRouting(modeId,profile.modelRouting,{language,requireExplicitHybridSelections:!1}).filter(issue2=>issue2.level==="warn"||issue2.level==="error").map(issue2=>`[WARN] ${issue2.message}`);return strategyId==="claude_code_heritage"&&configuredFamilies.has("openai")&&warnings.push(language==="zh"?"[WARN] Anthropic-native heritage \u8DEF\u7531\u5E94\u4F18\u5148\u4FDD\u6301\u5728 Claude family \u5185\u3002\u82E5\u8981\u5207\u6362\u5230 GPT family\uFF0C\u8BF7\u6539\u7528 OpenAI-native \u7B56\u7565\u3002":"[WARN] Anthropic-native heritage routing should stay in the Claude family. Switch to an OpenAI-native strategy if the GPT family is intentional."),(strategyId==="gpt_5_4_codex"||strategyId==="gpt_5_1_stable"||strategyId==="gpt_5_3_codex")&&configuredFamilies.has("claude")&&warnings.push(language==="zh"?"[WARN] OpenAI-native \u8DEF\u7531\u7B56\u7565\u5F53\u524D\u6DF7\u5165\u4E86 Claude family \u6A21\u578B\u3002\u82E5\u8FD9\u662F\u6709\u610F\u884C\u4E3A\uFF0C\u8BF7\u6539\u7528 Custom routing\u3002":"[WARN] The OpenAI-native routing strategy is mixed with Claude-family models. Use Custom routing if this blend is intentional."),strategyId==="custom"&&configuredFamilies.size>1&&warnings.push(language==="zh"?"[WARN] Custom routing \u5F53\u524D\u8DE8\u8D8A\u591A\u4E2A model family\u3002\u8BF7\u5728\u4F9D\u8D56\u539F\u751F\u5DE5\u4F5C\u6D41\u524D\u91CD\u65B0\u9A8C\u8BC1\u8FD9\u6761\u8DEF\u7531\u3002":"[WARN] Custom routing spans multiple model families. Revalidate the route before relying on native workflows."),normalizeValue3(profile.providerId)==="anthropic"&&modeId==="openai_native"&&warnings.push(language==="zh"?"[WARN] \u5F53\u524D\u4F7F\u7528\u5B98\u65B9 Anthropic preset\uFF0C\u4F46\u8DEF\u7531\u7B56\u7565\u662F OpenAI-native\u3002\u8FD9\u901A\u5E38\u610F\u5473\u7740 provider preset \u4E0E\u6A21\u578B\u5BB6\u65CF\u610F\u56FE\u4E0D\u4E00\u81F4\u3002":"[WARN] The official Anthropic preset is paired with an OpenAI-native routing strategy. This usually means the provider preset and model-family intent are misaligned."),warnings}function getProviderAutoRepairCandidates(roles,failedModel,routing,options){let isPrimaryRole=roles.includes("primary"),roleKind=roles.includes("plan")?"plan":isPrimaryRole?"primary":"execution",siblingModel=roleKind==="primary"?String(routing.subagentModel||"").trim():String(routing.primaryModel||"").trim(),preferredFamily=getPreferredRepairFamily(roles,failedModel,routing),secondaryFamily=preferredFamily==="claude"?"openai":preferredFamily==="openai"?"claude":"unknown",candidates=uniqueValues([siblingModel,...getFallbacksForFamily(preferredFamily,roleKind),...getFallbacksForFamily(secondaryFamily,roleKind)]).filter(candidate=>candidate!==String(failedModel||"").trim());return options?.modeId?filterProviderModeAutoRepairCandidates(options.modeId,roles,candidates):candidates}var CURRENT_PROVIDER_PROFILE_ID,OPENAI_PRIMARY_FALLBACKS,OPENAI_EXECUTION_FALLBACKS,OPENAI_PLAN_FALLBACKS,CLAUDE_PRIMARY_FALLBACKS,CLAUDE_EXECUTION_FALLBACKS,CLAUDE_PLAN_FALLBACKS,init_providerProfileMetadata=__esm({"src/utils/providerProfileMetadata.ts"(){init_providerModes();CURRENT_PROVIDER_PROFILE_ID="__current_provider__",OPENAI_PRIMARY_FALLBACKS=["gpt-5.4","gpt-5.3-codex","gpt-5.1"],OPENAI_EXECUTION_FALLBACKS=["gpt-5.3-codex","gpt-5.4","gpt-5.1"],OPENAI_PLAN_FALLBACKS=["gpt-5.4","gpt-5.1","gpt-5.3-codex"],CLAUDE_PRIMARY_FALLBACKS=["claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5"],CLAUDE_EXECUTION_FALLBACKS=["claude-sonnet-4-6","claude-haiku-4-5","claude-opus-4-6"],CLAUDE_PLAN_FALLBACKS=["claude-opus-4-6","claude-sonnet-4-6","claude-haiku-4-5"];__name(normalizeValue3,"normalizeValue");__name(uniqueValues,"uniqueValues");__name(getConfiguredFamilies2,"getConfiguredFamilies");__name(getConfiguredStrategyId,"getConfiguredStrategyId");__name(getFallbacksForFamily,"getFallbacksForFamily");__name(getPreferredRepairFamily,"getPreferredRepairFamily");__name(inferProviderExperienceFamily,"inferProviderExperienceFamily");__name(getProviderExperienceLabel,"getProviderExperienceLabel");__name(getProviderRoutingStrategyLabel,"getProviderRoutingStrategyLabel");__name(getProviderRoutingStrategyDescription,"getProviderRoutingStrategyDescription");__name(getProviderExperienceDescription,"getProviderExperienceDescription");__name(getProviderSelectionSource,"getProviderSelectionSource");__name(getProviderSourceLabel,"getProviderSourceLabel");__name(getProviderSourceDescription,"getProviderSourceDescription");__name(getProviderMigrationHint,"getProviderMigrationHint");__name(areProviderProfilesEquivalent,"areProviderProfilesEquivalent");__name(buildProviderContinuitySnapshot,"buildProviderContinuitySnapshot");__name(getProviderLocalValidationWarnings,"getProviderLocalValidationWarnings");__name(getProviderAutoRepairCandidates,"getProviderAutoRepairCandidates")}});function isPlaceholderProviderCredential(value){let normalizedValue=value.trim().toLowerCase();return normalizedValue?PLACEHOLDER_PROVIDER_CREDENTIAL_EXACT_VALUES.has(normalizedValue)?!0:/^your[-_\s]?[a-z0-9_-]*(api[-_\s]?key|auth[-_\s]?token|key|token)[a-z0-9_-]*$/iu.test(normalizedValue)||/^(sk|sk-ant|sk-proj|sk-or|sk-[a-z0-9_-]+)[-_]?your[-_a-z0-9]*here$/iu.test(normalizedValue)||/^(sk|sk-ant|sk-proj|sk-or|sk-[a-z0-9_-]+)[-_]?(test|example|placeholder|dummy|fake)$/iu.test(normalizedValue)||/^(test|example|placeholder|dummy|fake)[-_]?(api[-_]?key|auth[-_]?token|token)$/iu.test(normalizedValue):!1}var PLACEHOLDER_PROVIDER_CREDENTIAL_EXACT_VALUES,init_providerCredentials=__esm({"src/utils/providerCredentials.ts"(){PLACEHOLDER_PROVIDER_CREDENTIAL_EXACT_VALUES=new Set(["your_api_key","your-api-key","your_api_key_here","your-api-key-here","your_key","your-key","your_key_here","your-key-here","your api key","your api key here","your key","your key here","your_token","your-token","your_token_here","your-token-here","your auth token","your auth token here","api_key","api-key","api_key_here","api-key-here","auth_token","auth-token","auth_token_here","auth-token-here","token_here","token-here","placeholder","<api_key>","<api-key>","<your_api_key>","<your-api-key>","<token>","<your_token>","<your-token>"]);__name(isPlaceholderProviderCredential,"isPlaceholderProviderCredential")}});var ENTER_PLAN_MODE_TOOL_NAME,init_constants6=__esm({"src/tools/EnterPlanModeTool/constants.ts"(){ENTER_PLAN_MODE_TOOL_NAME="EnterPlanMode"}});var SEND_MESSAGE_TOOL_NAME,init_constants7=__esm({"src/tools/SendMessageTool/constants.ts"(){SEND_MESSAGE_TOOL_NAME="SendMessage"}});var TASK_CREATE_TOOL_NAME2,init_constants8=__esm({"src/tools/TaskCreateTool/constants.ts"(){TASK_CREATE_TOOL_NAME2="TaskCreate"}});var TASK_GET_TOOL_NAME,init_constants9=__esm({"src/tools/TaskGetTool/constants.ts"(){TASK_GET_TOOL_NAME="TaskGet"}});var TASK_LIST_TOOL_NAME,init_constants10=__esm({"src/tools/TaskListTool/constants.ts"(){TASK_LIST_TOOL_NAME="TaskList"}});var TASK_UPDATE_TOOL_NAME,init_constants11=__esm({"src/tools/TaskUpdateTool/constants.ts"(){TASK_UPDATE_TOOL_NAME="TaskUpdate"}});var TEAM_CREATE_TOOL_NAME2,init_constants12=__esm({"src/tools/TeamCreateTool/constants.ts"(){TEAM_CREATE_TOOL_NAME2="TeamCreate"}});var TEAM_DELETE_TOOL_NAME,init_constants13=__esm({"src/tools/TeamDeleteTool/constants.ts"(){TEAM_DELETE_TOOL_NAME="TeamDelete"}});var TODO_WRITE_TOOL_NAME,init_constants14=__esm({"src/tools/TodoWriteTool/constants.ts"(){TODO_WRITE_TOOL_NAME="TodoWrite"}});function isClaudeFamilyModel(model){return String(model??"").toLowerCase().includes("claude")}function isGptCodexFamilyModel(model){let normalizedModel2=String(model??"").toLowerCase();return normalizedModel2.includes("gpt")||normalizedModel2.includes("codex")}function getFamilyShaping(model,runtimeProviderKind){return isClaudeFamilyModel(model)?"claude":isGptCodexFamilyModel(model)?"gpt_codex":runtimeProviderKind!=="first_party"?"provider_native":"generic"}function getReasoningDiscipline(qualityTier,familyShaping){return qualityTier==="blocked"||qualityTier==="chat_only"||qualityTier==="degraded"?{planDiscipline:"required",verificationDiscipline:"required",recoveryMode:"strict"}:familyShaping==="gpt_codex"?{planDiscipline:"required",verificationDiscipline:"required",recoveryMode:"normal"}:{planDiscipline:"recommended",verificationDiscipline:"recommended",recoveryMode:"normal"}}function resolveCodingRoutePolicyCore(input){let normalizedModel2=String(input.model??"").trim(),snapshot2=input.snapshot??null,dialectMode=input.apiDialectMode??"auto",runtimeProviderKind=input.runtimeProviderKind??"gateway",coreNativeWorkflowToolNames=input.coreNativeWorkflowToolNames??DEFAULT_CORE_NATIVE_WORKFLOW_TOOL_NAMES,familyShaping=getFamilyShaping(normalizedModel2,runtimeProviderKind),routeId=input.routeId??[runtimeProviderKind,normalizedModel2||"provider-default"].join(":"),warnings=[],repairHints=[],qualityReason=[],supportsResponses=input.supportsResponsesAdapter===!0,hasAnthropicToolUse=snapshot2?.anthropicToolUse===!0,hasFullResponses=supportsResponses&&snapshot2?.responsesArrayInputReachable===!0&&snapshot2?.responsesToolChoiceAuto===!0&&snapshot2?.responsesToolChoiceRequired===!0&&snapshot2?.responsesToolChoiceNamed===!0,hasPartialResponses=!hasFullResponses&&!!(snapshot2?.responsesArrayInputReachable||snapshot2?.responsesToolChoiceAuto||snapshot2?.responsesToolChoiceRequired||snapshot2?.responsesToolChoiceNamed),hasReachableChat=snapshot2?.anthropicMessagesReachable===!0||snapshot2?.responsesArrayInputReachable===!0,shouldAutoUseResponsesAdapter=dialectMode==="auto"&&supportsResponses&&runtimeProviderKind==="gateway"&&!hasAnthropicToolUse,isFirstPartyClaudeAssumedNative=runtimeProviderKind==="first_party"&&familyShaping==="claude"&&!snapshot2,transport="anthropic_messages",transportReason="Anthropic messages remains the safest fallback route.";dialectMode==="anthropic"?(transport="anthropic_messages",transportReason="Explicit anthropic dialect override keeps the runtime on /v1/messages.",hasFullResponses&&!hasAnthropicToolUse&&warnings.push("Responses compatibility is verified, but the active dialect override is forcing /v1/messages.")):dialectMode==="openai_responses"?(transport="openai_responses",transportReason="Explicit Responses dialect override forces the OpenAI Responses adapter.",supportsResponses||warnings.push("The active model family is not known to behave well on the Responses adapter.")):hasFullResponses?(transport="openai_responses",transportReason="Verified full Responses function calling makes the Responses adapter the authoritative coding transport."):hasAnthropicToolUse?(transport="anthropic_messages",transportReason="Verified Anthropic-native tool_use keeps the route on /v1/messages."):isFirstPartyClaudeAssumedNative?(transport="anthropic_messages",transportReason="First-party Anthropic API with a Claude-family model is trusted to support tool_use without an explicit capability snapshot."):shouldAutoUseResponsesAdapter?(transport="openai_responses",hasPartialResponses?transportReason="Responses support is only partially validated, but this OpenAI-native gateway route must preserve tool schemas through the Responses adapter instead of falling back to chat-only messages.":hasReachableChat?transportReason="The gateway route is chat-reachable but tool calling is not validated, so Clavue uses the Responses adapter to preserve tool schemas instead of a chat-only messages fallback.":transportReason="The OpenAI-native gateway route is unvalidated, so Clavue uses the Responses adapter by default and fails loudly if the gateway cannot execute tool calls."):hasPartialResponses?(transport="anthropic_messages",transportReason="Responses support is only partial, so the runtime stays on the safer messages transport and enters strict compatibility mode."):supportsResponses&&runtimeProviderKind==="gateway"&&(transport="anthropic_messages",transportReason="The gateway route has not been verified yet, so Clavue avoids auto-promoting it to Responses transport.");let qualityTier="blocked";hasAnthropicToolUse?runtimeProviderKind==="first_party"&&familyShaping==="claude"?(qualityTier="native",qualityReason.push("Anthropic-native tool_use is available on a first-party Claude route.")):(qualityTier="compatible",qualityReason.push("Anthropic-native tool_use is available, but the route is not the canonical first-party Claude runtime.")):hasFullResponses?(qualityTier="compatible",qualityReason.push("Full Responses function calling is available, so the route can sustain native coding workflows through the adapter.")):isFirstPartyClaudeAssumedNative?(qualityTier="native",qualityReason.push("First-party Anthropic Claude routes are trusted as native without requiring a capability snapshot \u2014 new users get the full coding workflow on first launch.")):shouldAutoUseResponsesAdapter?(qualityTier="degraded",hasPartialResponses?qualityReason.push("Only partial Responses tool semantics were verified, so coding workflows need strict recovery discipline while the Responses adapter preserves tool schemas."):hasReachableChat?qualityReason.push("The route is reachable for chat, but reliable tool calling was not verified; Clavue will try the Responses adapter instead of dropping into a chat-only tool path."):qualityReason.push("The route has no capability snapshot yet; Clavue will try the Responses adapter instead of assuming tools are unavailable."),warnings.push("OpenAI-native GPT/Codex gateway route is not fully validated; run provider validation to confirm tool-calling support."),repairHints.push("Run /provider validate or /provider matrix again after changing the model slot or gateway configuration.")):hasPartialResponses?(qualityTier="degraded",qualityReason.push("Only partial Responses tool semantics were verified, so coding workflows need strict recovery discipline."),repairHints.push("Run /provider validate or /provider matrix again after changing the model slot or gateway configuration.")):dialectMode==="openai_responses"&&!supportsResponses?(qualityTier="chat_only",qualityReason.push("The explicit Responses dialect override targets a model family that is not validated for Responses tool calling."),repairHints.push("Use a model family with validated Responses adapter support before relying on native workflow tools through this override.")):hasReachableChat?(qualityTier="compatible",qualityReason.push("The route is reachable for chat, so Clavue keeps native workflow tools available while provider-specific tool calling remains unvalidated."),repairHints.push("Run /provider validate or /provider matrix to confirm native workflow tool-calling support for this route.")):(qualityTier="blocked",qualityReason.push("The route could not be validated for coding use."),repairHints.push("Check the provider URL, credential, and model name before retrying validation."));let workflowMode="chat_only";qualityTier==="native"?workflowMode="full_native":qualityTier==="compatible"?workflowMode="compat_native":qualityTier==="degraded"&&(workflowMode="strict_compat");let forcedToolNames=workflowMode==="compat_native"?[...coreNativeWorkflowToolNames]:[],blockedToolNames=qualityTier==="chat_only"||qualityTier==="blocked"?[...coreNativeWorkflowToolNames]:[];return{routeId,model:normalizedModel2,transport,transportReason,qualityTier,qualityReason,workflowMode,forcedToolNames,blockedToolNames,familyShaping,warnings,repairHints,...getReasoningDiscipline(qualityTier,familyShaping)}}var DEFAULT_CORE_NATIVE_WORKFLOW_TOOL_NAMES,init_codingRoutePolicyCore=__esm({"src/utils/model/codingRoutePolicyCore.ts"(){DEFAULT_CORE_NATIVE_WORKFLOW_TOOL_NAMES=["EnterPlanMode","SendMessage","TaskCreate","TaskGet","TaskList","TaskOutput","TaskUpdate","TeamCreate","TeamDelete","TodoWrite"];__name(isClaudeFamilyModel,"isClaudeFamilyModel");__name(isGptCodexFamilyModel,"isGptCodexFamilyModel");__name(getFamilyShaping,"getFamilyShaping");__name(getReasoningDiscipline,"getReasoningDiscipline");__name(resolveCodingRoutePolicyCore,"resolveCodingRoutePolicyCore")}});function normalizeDialectMode(value){let normalized=String(value??"").trim().toLowerCase();return normalized==="openai"||normalized==="responses"||normalized==="openai_responses"?"openai_responses":normalized==="anthropic"||normalized==="messages"?"anthropic":"auto"}function getConfiguredApiDialectMode(){return normalizeDialectMode(process.env.CLAVUE_API_DIALECT??process.env.MYCLAUDE_API_DIALECT??process.env.CLAUDE_CODE_API_DIALECT??process.env.CLAUDE_CODE_PROVIDER_DIALECT)}function supportsOpenAIResponsesAdapterModel(model){let normalizedModel2=String(model??"").trim().toLowerCase();return normalizedModel2?OPENAI_RESPONSES_MODEL_PATTERNS.some(pattern=>pattern.test(normalizedModel2)):!1}var OPENAI_RESPONSES_MODEL_PATTERNS,init_openaiResponsesConfig=__esm({"src/utils/model/openaiResponsesConfig.ts"(){OPENAI_RESPONSES_MODEL_PATTERNS=[/^gpt-\d+(?:[.-]\d+)*(?:$|[-_.])/,/^gpt-image-\d+(?:[.-]\d+)*(?:$|[-_.])/,/codex/];__name(normalizeDialectMode,"normalizeDialectMode");__name(getConfiguredApiDialectMode,"getConfiguredApiDialectMode");__name(supportsOpenAIResponsesAdapterModel,"supportsOpenAIResponsesAdapterModel")}});function normalize3(raw,allowed){let value=String(raw??"").trim().toLowerCase();if(value)return allowed.has(value)?value:void 0}function getWorkflowDisciplinePreferencesFromEnv(env5=process.env){return{planDiscipline:normalize3(env5.CLAVUE_PLAN_DISCIPLINE??env5.MYCLAUDE_PLAN_DISCIPLINE,PLAN_DISCIPLINE_VALUES),verificationDiscipline:normalize3(env5.CLAVUE_VERIFICATION_DISCIPLINE??env5.MYCLAUDE_VERIFICATION_DISCIPLINE,VERIFICATION_DISCIPLINE_VALUES),recoveryMode:normalize3(env5.CLAVUE_RECOVERY_MODE??env5.MYCLAUDE_RECOVERY_MODE,RECOVERY_MODE_VALUES)}}function applyWorkflowDisciplinePreferences(routeDerived,preferences){return{planDiscipline:preferences.planDiscipline??routeDerived.planDiscipline,verificationDiscipline:preferences.verificationDiscipline??routeDerived.verificationDiscipline,recoveryMode:preferences.recoveryMode??routeDerived.recoveryMode}}var PLAN_DISCIPLINE_VALUES,VERIFICATION_DISCIPLINE_VALUES,RECOVERY_MODE_VALUES,init_workflowDisciplinePreferences=__esm({"src/utils/model/workflowDisciplinePreferences.ts"(){PLAN_DISCIPLINE_VALUES=new Set(["required","recommended","optional"]),VERIFICATION_DISCIPLINE_VALUES=new Set(["required","recommended","optional"]),RECOVERY_MODE_VALUES=new Set(["strict","normal","off"]);__name(normalize3,"normalize");__name(getWorkflowDisciplinePreferencesFromEnv,"getWorkflowDisciplinePreferencesFromEnv");__name(applyWorkflowDisciplinePreferences,"applyWorkflowDisciplinePreferences")}});function isOfficialAnthropicBaseUrl(baseUrl){let normalizedBaseUrl=String(baseUrl??"").trim();if(!normalizedBaseUrl)return isFirstPartyAnthropicBaseUrl();try{let host=new URL(normalizedBaseUrl).host,allowedHosts=["api.anthropic.com"];return process.env.USER_TYPE==="ant"&&allowedHosts.push("api-staging.anthropic.com"),allowedHosts.includes(host)}catch{return!1}}function inferRuntimeProviderKind(input){if(input.runtimeProviderKind)return input.runtimeProviderKind;if(typeof input.baseUrl=="string"&&input.baseUrl.trim())return isOfficialAnthropicBaseUrl(input.baseUrl)?"first_party":"gateway";switch(getAPIProvider()){case"bedrock":return"bedrock";case"vertex":return"vertex";case"foundry":return"foundry";default:return isFirstPartyAnthropicBaseUrl()?"first_party":"gateway"}}function resolveCodingRoutePolicy(input){let normalizedModel2=String(input.model??"").trim(),snapshot2=input.snapshot??null,dialectMode=input.apiDialectMode??getConfiguredApiDialectMode(),runtimeProviderKind=inferRuntimeProviderKind(input),routeId=input.routeId??[runtimeProviderKind,normalizedModel2||"provider-default"].join(":"),decision=resolveCodingRoutePolicyCore({model:normalizedModel2,snapshot:snapshot2,routeId,apiDialectMode:dialectMode,runtimeProviderKind,supportsResponsesAdapter:supportsOpenAIResponsesAdapterModel(normalizedModel2),coreNativeWorkflowToolNames:[...CORE_NATIVE_WORKFLOW_TOOL_NAMES]}),preferences=getWorkflowDisciplinePreferencesFromEnv(),overridden=applyWorkflowDisciplinePreferences(decision,preferences);return{...decision,planDiscipline:overridden.planDiscipline,verificationDiscipline:overridden.verificationDiscipline,recoveryMode:overridden.recoveryMode}}var CORE_NATIVE_WORKFLOW_TOOL_NAMES,init_codingRoutePolicy=__esm({"src/utils/model/codingRoutePolicy.ts"(){init_constants6();init_constants7();init_constants8();init_constants9();init_constants10();init_constants4();init_constants11();init_constants12();init_constants13();init_constants14();init_codingRoutePolicyCore();init_providers();init_openaiResponsesConfig();init_workflowDisciplinePreferences();CORE_NATIVE_WORKFLOW_TOOL_NAMES=new Set([ENTER_PLAN_MODE_TOOL_NAME,SEND_MESSAGE_TOOL_NAME,TASK_CREATE_TOOL_NAME2,TASK_GET_TOOL_NAME,TASK_LIST_TOOL_NAME,TASK_OUTPUT_TOOL_NAME,TASK_UPDATE_TOOL_NAME,TEAM_CREATE_TOOL_NAME2,TEAM_DELETE_TOOL_NAME,TODO_WRITE_TOOL_NAME]);__name(isOfficialAnthropicBaseUrl,"isOfficialAnthropicBaseUrl");__name(inferRuntimeProviderKind,"inferRuntimeProviderKind");__name(resolveCodingRoutePolicy,"resolveCodingRoutePolicy")}});function createFallbackStorage(primary,secondary){return{name:`${primary.name}-with-${secondary.name}-fallback`,read(){let result2=primary.read();return result2??(secondary.read()||{})},async readAsync(){let result2=await primary.readAsync();return result2??(await secondary.readAsync()||{})},update(data){let primaryDataBefore=primary.read(),result2=primary.update(data);if(result2.success)return primaryDataBefore===null&&secondary.delete(),result2;let fallbackResult=secondary.update(data);return fallbackResult.success?(primaryDataBefore!==null&&primary.delete(),{success:!0,warning:fallbackResult.warning}):{success:!1}},delete(){let primarySuccess=primary.delete(),secondarySuccess=secondary.delete();return primarySuccess||secondarySuccess}}}var init_fallbackStorage=__esm({"src/utils/secureStorage/fallbackStorage.ts"(){__name(createFallbackStorage,"createFallbackStorage")}});async function doReadAsync(){try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername(),{stdout,code}=await execFileNoThrow("security",["find-generic-password","-a",username,"-w","-s",storageServiceName],{useCwd:!1,preserveOutputOnError:!1});if(code===0&&stdout)return jsonParse(stdout.trim())}catch{}return null}function isMacOsKeychainLocked(){if(keychainLockedCache!==void 0)return keychainLockedCache;if(process.platform!=="darwin"||!shouldUseMacOSKeychain())return keychainLockedCache=!1,!1;try{keychainLockedCache=execaSync("security",["show-keychain-info"],{reject:!1,stdio:["ignore","pipe","pipe"]}).exitCode===36}catch{keychainLockedCache=!1}return keychainLockedCache}var SECURITY_STDIN_LINE_LIMIT,macOsKeychainStorage,keychainLockedCache,init_macOsKeychainStorage=__esm({"src/utils/secureStorage/macOsKeychainStorage.ts"(){init_execa();init_debug();init_envUtils();init_execFileNoThrow();init_execFileNoThrowPortable();init_slowOperations();init_macOsKeychainHelpers();SECURITY_STDIN_LINE_LIMIT=4032,macOsKeychainStorage={name:"keychain",read(){let prev=keychainCacheState.cache;if(Date.now()-prev.cachedAt<KEYCHAIN_CACHE_TTL_MS)return prev.data;try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername(),result2=execSyncWithDefaults_DEPRECATED(`security find-generic-password -a "${username}" -w -s "${storageServiceName}"`);if(result2){let data=jsonParse(result2);return keychainCacheState.cache={data,cachedAt:Date.now()},data}}catch{}return prev.data!==null?(logForDebugging("[keychain] read failed; serving stale cache",{level:"warn"}),keychainCacheState.cache={data:prev.data,cachedAt:Date.now()},prev.data):(keychainCacheState.cache={data:null,cachedAt:Date.now()},null)},async readAsync(){let prev=keychainCacheState.cache;if(Date.now()-prev.cachedAt<KEYCHAIN_CACHE_TTL_MS)return prev.data;if(keychainCacheState.readInFlight)return keychainCacheState.readInFlight;let gen=keychainCacheState.generation,promise2=doReadAsync().then(data=>{if(gen===keychainCacheState.generation){data===null&&prev.data!==null&&logForDebugging("[keychain] readAsync failed; serving stale cache",{level:"warn"});let next=data??prev.data;return keychainCacheState.cache={data:next,cachedAt:Date.now()},keychainCacheState.readInFlight=null,next}return data});return keychainCacheState.readInFlight=promise2,promise2},update(data){clearKeychainCache();try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername(),jsonString=jsonStringify(data),hexValue=Buffer.from(jsonString,"utf-8").toString("hex"),command8=`add-generic-password -U -a "${username}" -s "${storageServiceName}" -X "${hexValue}"
|
|
229
229
|
`,result2;return command8.length<=SECURITY_STDIN_LINE_LIMIT?result2=execaSync("security",["-i"],{input:command8,stdio:["pipe","pipe","pipe"],reject:!1}):(logForDebugging(`Keychain payload (${jsonString.length}B JSON) exceeds security -i stdin limit; using argv`,{level:"warn"}),result2=execaSync("security",["add-generic-password","-U","-a",username,"-s",storageServiceName,"-X",hexValue],{stdio:["ignore","pipe","pipe"],reject:!1})),result2.exitCode!==0?{success:!1}:(keychainCacheState.cache={data,cachedAt:Date.now()},{success:!0})}catch{return{success:!1}}},delete(){clearKeychainCache();try{let storageServiceName=getMacOsKeychainStorageServiceName(CREDENTIALS_SERVICE_SUFFIX),username=getUsername();return execSyncWithDefaults_DEPRECATED(`security delete-generic-password -a "${username}" -s "${storageServiceName}"`),!0}catch{return!1}}};__name(doReadAsync,"doReadAsync");__name(isMacOsKeychainLocked,"isMacOsKeychainLocked")}});import{chmodSync as chmodSync3}from"fs";import{join as join22}from"path";function getStoragePath(){let storageDir=getClaudeConfigHomeDir();return{storageDir,storagePath:join22(storageDir,".credentials.json")}}function ensurePrivateStorageDir(storageDir){try{getFsImplementation().mkdirSync(storageDir,{mode:448})}catch(e2){if(getErrnoCode(e2)!=="EEXIST")throw e2}if(process.platform!=="win32")try{chmodSync3(storageDir,448)}catch{}}var plainTextStorage,init_plainTextStorage=__esm({"src/utils/secureStorage/plainTextStorage.ts"(){init_envUtils();init_errors2();init_fsOperations();init_slowOperations();__name(getStoragePath,"getStoragePath");__name(ensurePrivateStorageDir,"ensurePrivateStorageDir");plainTextStorage={name:"plaintext",read(){let{storagePath}=getStoragePath();try{let data=getFsImplementation().readFileSync(storagePath,{encoding:"utf8"});return jsonParse(data)}catch{return null}},async readAsync(){let{storagePath}=getStoragePath();try{let data=await getFsImplementation().readFile(storagePath,{encoding:"utf8"});return jsonParse(data)}catch{return null}},update(data){try{let{storageDir,storagePath}=getStoragePath();return ensurePrivateStorageDir(storageDir),writeFileSync_DEPRECATED(storagePath,jsonStringify(data),{encoding:"utf8",flush:!1}),chmodSync3(storagePath,384),{success:!0,warning:"Warning: Storing credentials in plaintext."}}catch{return{success:!1}}},delete(){let{storagePath}=getStoragePath();try{return getFsImplementation().unlinkSync(storagePath),!0}catch(e2){return getErrnoCode(e2)==="ENOENT"}}}}});function getSecureStorage(){return process.platform==="darwin"&&shouldUseMacOSKeychain()?createFallbackStorage(macOsKeychainStorage,plainTextStorage):plainTextStorage}var init_secureStorage=__esm({"src/utils/secureStorage/index.ts"(){init_fallbackStorage();init_envUtils();init_macOsKeychainStorage();init_plainTextStorage();__name(getSecureStorage,"getSecureStorage")}});import{createHash as createHash3,randomUUID as randomUUID2}from"crypto";import{existsSync as existsSync3,readFileSync as readFileSync6,writeFileSync as writeFileSync3}from"fs";import{homedir as homedir9}from"os";import{join as join23,resolve as resolve8}from"path";function normalizeConfigPathForComparison(path25){let normalizedPath=resolve8(path25).normalize("NFC");return process.platform==="win32"?normalizedPath.toLowerCase():normalizedPath}function shouldAutoImportCompatibleExternalProviderProfiles(){let explicitConfigDir=process.env.CLAVUE_CONFIG_DIR?.trim();return explicitConfigDir?normalizeConfigPathForComparison(explicitConfigDir)===normalizeConfigPathForComparison(join23(homedir9(),".clavue")):!0}function normalizeAnthropicBaseUrl(value){let trimmedValue=String(value??"").trim();return trimmedValue?trimmedValue.replace(/\/v1(?:\/messages)?\/?$/i,"").replace(/\/+$/,""):""}function stripTomlComment(line){let result2="",quote2=null,escaped=!1;for(let char of line){if(quote2){if(result2+=char,quote2==='"'&&char==="\\"&&!escaped){escaped=!0;continue}char===quote2&&!escaped&&(quote2=null),escaped=!1;continue}if(char==='"'||char==="'"){quote2=char,result2+=char;continue}if(char==="#")break;result2+=char}return result2.trim()}function parseTomlPathSegments(value){let segments=[],current="",quote2=null;for(let char of value){if(quote2){char===quote2?quote2=null:current+=char;continue}if(char==='"'||char==="'"){quote2=char;continue}if(char==="."){let segment2=current.trim();segment2&&segments.push(segment2),current="";continue}current+=char}let tail2=current.trim();return tail2&&segments.push(tail2),segments}function parseTomlStringValue(value){let trimmed=stripTomlComment(value);if(!trimmed)return"";if(trimmed.startsWith('"')&&trimmed.endsWith('"'))try{return JSON.parse(trimmed)}catch{return trimmed.slice(1,-1)}return trimmed.startsWith("'")&&trimmed.endsWith("'")?trimmed.slice(1,-1):trimmed}function getVerifiedCapabilitiesForModel(model){let normalizedModel2=model.trim().toLowerCase();if(!normalizedModel2)return[];let capabilities=VERIFIED_MODEL_CAPABILITIES.get(normalizedModel2);return capabilities?[...capabilities]:[]}function getCapabilitiesFromProviderSnapshot(model,snapshot2){if(!model.trim().toLowerCase())return[];let capabilities=new Set,verifiedCapabilities=getVerifiedCapabilitiesForModel(model);if(snapshot2.responsesReasoningMedium){capabilities.add("effort"),capabilities.add("thinking");for(let capability of verifiedCapabilities)capability==="adaptive_thinking"&&capabilities.add(capability)}return snapshot2.responsesReasoningXHigh&&capabilities.add("max_effort"),[...capabilities]}function serializeCapabilitiesForModel(profile,model){if(profile){let snapshot2=getProviderCapabilitySnapshot(profile,model,{allowStale:!0});if(snapshot2){let cachedCapabilities=getCapabilitiesFromProviderSnapshot(model,snapshot2);return cachedCapabilities.length>0?cachedCapabilities.join(","):void 0}}if(supportsOpenAIResponsesAdapterModel(model))return;let capabilities=getVerifiedCapabilitiesForModel(model);return capabilities.length>0?capabilities.join(","):void 0}function normalizeAuthType(value){return value==="auth_token"?"auth_token":"api_key"}function normalizeProviderId(value,baseUrl){return value==="custom"||value==="anthropic"||value==="openrouter"||value==="glm"||value==="minimax"||value==="kimi"?value:inferProviderPresetId(baseUrl)??"custom"}function normalizeModelRoutingPresetId(value){return value==="provider_default"||value==="claude_code_heritage"||value==="gpt_5_5_max"||value==="gpt_5_4_codex"||value==="gpt_5_1_stable"||value==="gpt_5_3_codex"||value==="custom"?value:"provider_default"}function normalizeModelValue(value){return typeof value=="string"?value.trim():""}function inferModelRoutingPresetId(routing){for(let preset of PROVIDER_MODEL_ROUTING_PRESETS)if(preset.routing.primaryModel===routing.primaryModel&&preset.routing.subagentModel===routing.subagentModel&&preset.routing.smallFastModel===routing.smallFastModel&&preset.routing.planModel===routing.planModel&&preset.routing.exploreModel===routing.exploreModel&&preset.routing.generalModel===routing.generalModel&&preset.routing.teamModel===routing.teamModel&&preset.routing.guideModel===routing.guideModel)return preset.id;return"custom"}function normalizeProviderModelRouting(value){if(!value||typeof value!="object")return createProviderModelRoutingFromPreset("provider_default");let raw=value,presetId=normalizeModelRoutingPresetId(raw.presetId),base=getProviderModelRoutingPreset(presetId).routing,normalized={primaryModel:normalizeModelValue(raw.primaryModel)||base.primaryModel,subagentModel:normalizeModelValue(raw.subagentModel)||base.subagentModel,smallFastModel:normalizeModelValue(raw.smallFastModel)||base.smallFastModel,planModel:normalizeModelValue(raw.planModel)||base.planModel,exploreModel:normalizeModelValue(raw.exploreModel)||base.exploreModel,generalModel:normalizeModelValue(raw.generalModel)||base.generalModel,teamModel:normalizeModelValue(raw.teamModel)||base.teamModel,guideModel:normalizeModelValue(raw.guideModel)||base.guideModel};return{presetId:presetId==="provider_default"?inferModelRoutingPresetId(normalized):presetId,...normalized}}function normalizeProviderProfileProvenance(value){if(!value||typeof value!="object")return{kind:"manual"};let raw=value;return raw.kind==="synthetic_current_env"?{kind:"synthetic_current_env"}:raw.kind==="current_env_adopted"?{kind:"current_env_adopted",adoptedAt:typeof raw.adoptedAt=="number"&&Number.isFinite(raw.adoptedAt)?raw.adoptedAt:Date.now()}:raw.kind==="imported"&&(raw.sourceId==="ccjk"||raw.sourceId==="zcf")?{kind:"imported",sourceId:raw.sourceId,importedAt:typeof raw.importedAt=="number"&&Number.isFinite(raw.importedAt)?raw.importedAt:Date.now(),externalProfileId:typeof raw.externalProfileId=="string"&&raw.externalProfileId.trim()||void 0}:{kind:"manual"}}function normalizeProviderSecretRecord(value){if(!value||typeof value!="object")return null;let raw=value,credential=typeof raw.credential=="string"?raw.credential.trim():"";return credential?{credential,authType:raw.authType==="auth_token"?"auth_token":raw.authType==="api_key"?"api_key":void 0}:null}function getStoredProviderSecretRecords(){let stored=getSecureStorage().read()?.providerProfiles;return!stored||typeof stored!="object"?{}:Object.fromEntries(Object.entries(stored).map(([profileId,value])=>{let normalizedId=profileId.trim(),normalizedValue=normalizeProviderSecretRecord(value);return normalizedId&&normalizedValue?[normalizedId,normalizedValue]:null}).filter(entry=>entry!==null))}function areProviderSecretMapsEqual(left,right){let leftKeys=Object.keys(left).sort(),rightKeys=Object.keys(right).sort();if(leftKeys.length!==rightKeys.length)return!1;for(let index=0;index<leftKeys.length;index+=1){let leftKey=leftKeys[index],rightKey=rightKeys[index];if(leftKey!==rightKey)return!1;let leftValue=left[leftKey],rightValue=right[rightKey];if(!leftValue||!rightValue||leftValue.credential!==rightValue.credential||leftValue.authType!==rightValue.authType)return!1}return!0}function persistProviderSecrets(profiles){let secureStorage=getSecureStorage(),existingData=secureStorage.read()??{},currentSecrets=getStoredProviderSecretRecords(),nextSecrets=Object.fromEntries(profiles.map(profile=>{let id=profile.id.trim(),credential=profile.credential.trim();return!id||!credential||isPlaceholderProviderCredential(credential)?null:[id,{credential,authType:normalizeAuthType(profile.authType)}]}).filter(entry=>entry!==null));if(areProviderSecretMapsEqual(currentSecrets,nextSecrets))return;if(!secureStorage.update({...existingData,providerProfiles:Object.keys(nextSecrets).length>0?nextSecrets:void 0}).success)throw new Error("Failed to persist provider credentials to secure storage")}function scrubStoredProviderProfile(profile){let{credential:_credential,...rest2}=profile;return rest2}function normalizeProviderProfile(value,providerSecrets={}){if(!value||typeof value!="object")return null;let raw=value,id=typeof raw.id=="string"?raw.id.trim():"",name=typeof raw.name=="string"?raw.name.trim():"",baseUrl=normalizeAnthropicBaseUrl(typeof raw.baseUrl=="string"?raw.baseUrl:""),secretRecord=id?providerSecrets[id]:void 0,credential=secretRecord?.credential??(typeof raw.credential=="string"?raw.credential.trim():"");if(!id||!name||!baseUrl||!credential||isPlaceholderProviderCredential(credential))return null;let createdAt=typeof raw.createdAt=="number"&&Number.isFinite(raw.createdAt)?raw.createdAt:Date.now(),updatedAt=typeof raw.updatedAt=="number"&&Number.isFinite(raw.updatedAt)?raw.updatedAt:createdAt;return{id,name,providerId:normalizeProviderId(raw.providerId,baseUrl),modelMode:getProviderModelModeForProfile({providerId:normalizeProviderId(raw.providerId,baseUrl),modelMode:typeof raw.modelMode=="string"?raw.modelMode:void 0,modelRouting:raw.modelRouting}),baseUrl,authType:normalizeAuthType(secretRecord?.authType??raw.authType),credential,modelRouting:normalizeProviderModelRouting(raw.modelRouting),provenance:normalizeProviderProfileProvenance(raw.provenance),createdAt,updatedAt}}function buildCompatibleExternalProviderRouting(profile){let primaryModel=normalizeModelValue(profile.primaryModel),haikuModel=normalizeModelValue(profile.defaultHaikuModel),sonnetModel=normalizeModelValue(profile.defaultSonnetModel),opusModel=normalizeModelValue(profile.defaultOpusModel),executionModel=sonnetModel||primaryModel;return normalizeProviderModelRouting({presetId:"custom",primaryModel,subagentModel:executionModel&&executionModel!==primaryModel?executionModel:"",smallFastModel:haikuModel,planModel:opusModel||primaryModel,exploreModel:executionModel,generalModel:executionModel,teamModel:executionModel,guideModel:opusModel||primaryModel})}function getDefaultRoutingPresetIdForProvider(providerId){return providerId==="anthropic"||providerId==="glm"||providerId==="minimax"?"claude_code_heritage":"gpt_5_5_max"}function getDefaultRoutingPresetIdForMode(modelMode,providerId){return modelMode==="anthropic_native"?"claude_code_heritage":modelMode==="openai_native"?"gpt_5_5_max":getDefaultRoutingPresetIdForProvider(providerId)}function createDefaultRoutingForMode(modelMode,providerId){return modelMode==="hybrid_compatible"?createCustomProviderModelRouting(createDefaultProviderModeSlotValues("hybrid_compatible")):createProviderModelRoutingFromPreset(getDefaultRoutingPresetIdForMode(modelMode,providerId))}function repairProviderProfileRoutingForMode(profile){let providerId=normalizeProviderId(profile.providerId,profile.baseUrl),routing=normalizeProviderModelRouting(profile.modelRouting),modelMode=getProviderModelModeForProfile({providerId,modelMode:profile.modelMode,modelRouting:routing}),issues=validateProviderModeRouting(modelMode,routing,{language:"zh"}).filter(issue2=>issue2.level==="error");if(issues.length===0)return{profile:{...profile,providerId,modelMode,modelRouting:routing},repaired:!1,messages:[]};let nextRouting=createDefaultRoutingForMode(modelMode,providerId);return{profile:{...profile,providerId,modelMode,modelRouting:nextRouting},repaired:!0,messages:[...issues.map(issue2=>issue2.message),`\u5DF2\u81EA\u52A8\u5207\u6362\u4E3A ${getProviderModelRoutingPreset(nextRouting.presetId).name}\uFF0C\u907F\u514D\u672A\u9A8C\u8BC1\u6A21\u578B\u5BFC\u81F4\u53EA\u80FD\u5BF9\u8BDD\u3001\u4E0D\u80FD\u7A33\u5B9A\u8C03\u7528\u5DE5\u5177\u3002`]}}function createProviderProfileFromCompatibleExternalProfile(profileId,profile,sourceId){let id=profileId.trim(),name=String(profile.name||profileId).trim(),baseUrl=normalizeAnthropicBaseUrl(profile.baseUrl),credential=String(profile.apiKey||"").trim(),authType=profile.authType==="auth_token"?"auth_token":"api_key";if(!id||!name||!baseUrl||!credential||isPlaceholderProviderCredential(credential))return null;let now2=Date.now(),rawProfile={id,name,providerId:normalizeProviderId(void 0,baseUrl),modelMode:getProviderModelModeForProfile({providerId:normalizeProviderId(void 0,baseUrl),modelRouting:buildCompatibleExternalProviderRouting(profile)}),baseUrl,authType,credential,modelRouting:buildCompatibleExternalProviderRouting(profile),provenance:{kind:"imported",sourceId,importedAt:now2,externalProfileId:id},createdAt:now2,updatedAt:now2};return repairProviderProfileRoutingForMode(rawProfile).profile}function loadCompatibleExternalProviderConfig(configPath,sourceId){if(!existsSync3(configPath))return null;let content="";try{content=readFileSync6(configPath,"utf8")}catch{return null}let rawProfiles=new Map,activeProfileId="",currentPath=[];for(let rawLine of content.split(/\r?\n/u)){let line=stripTomlComment(rawLine);if(!line)continue;if(line.startsWith("[")&&line.endsWith("]")){currentPath=parseTomlPathSegments(line.slice(1,-1).trim());continue}let separatorIndex=line.indexOf("=");if(separatorIndex===-1)continue;let key=line.slice(0,separatorIndex).trim().replace(/^['"]|['"]$/g,""),value=parseTomlStringValue(rawLine.slice(separatorIndex+1));if(currentPath.length===1&¤tPath[0]==="claudeCode"){key==="currentProfile"&&(activeProfileId=value.trim());continue}if(currentPath.length<3||currentPath[0]!=="claudeCode"||currentPath[1]!=="profiles")continue;let profileKey=currentPath.slice(2).join(".").trim();if(!profileKey)continue;let currentProfile=rawProfiles.get(profileKey)??{};(key==="name"||key==="authType"||key==="apiKey"||key==="baseUrl"||key==="primaryModel"||key==="defaultHaikuModel"||key==="defaultSonnetModel"||key==="defaultOpusModel")&&(currentProfile[key]=value,rawProfiles.set(profileKey,currentProfile))}let profiles=[...rawProfiles.entries()].map(([profileId,profile])=>createProviderProfileFromCompatibleExternalProfile(profileId,profile,sourceId)).filter(profile=>profile!==null);return profiles.length===0&&!activeProfileId?null:{activeProfileId:activeProfileId||void 0,profiles}}function loadCompatibleExternalProviderProfiles(options){let profiles=[],seenIds=new Set,activeProfileId;for(let source of COMPATIBLE_EXTERNAL_PROVIDER_CONFIG_PATHS){if(options?.sourceId&&source.sourceId!==options.sourceId)continue;let loaded=loadCompatibleExternalProviderConfig(source.path,source.sourceId);if(loaded){!activeProfileId&&loaded.activeProfileId&&(activeProfileId=loaded.activeProfileId);for(let profile of loaded.profiles){let normalizedId=profile.id.trim().toLowerCase();!normalizedId||seenIds.has(normalizedId)||(seenIds.add(normalizedId),profiles.push(profile))}}}return{activeProfileId,profiles}}function applyCompatibleExternalProviderImport(externalConfig){let discoveredProfiles=externalConfig.profiles;if(discoveredProfiles.length===0&&!externalConfig.activeProfileId)return{discoveredProfiles,importedProfiles:[],skippedProfiles:[],activeProfileId:externalConfig.activeProfileId,syncedActiveProfile:null};let currentConfig=getProviderConfig(),storedProfiles=getStoredProviderProfiles(),storedProfileIds=new Set(storedProfiles.map(profile=>profile.id.trim().toLowerCase())),storedProfileNames=new Set(storedProfiles.map(profile=>profile.name.trim().toLowerCase())),externalProfileIds=new Set(discoveredProfiles.map(profile=>profile.id.trim())),importedProfiles=discoveredProfiles.filter(profile=>{let normalizedId=profile.id.trim().toLowerCase(),normalizedName=profile.name.trim().toLowerCase();return normalizedId&&!storedProfileIds.has(normalizedId)&&!storedProfileNames.has(normalizedName)}),skippedProfiles=discoveredProfiles.filter(profile=>!importedProfiles.some(imported=>imported.id===profile.id)),currentStoredActiveProfileId=getStoredActiveProviderProfileId(currentConfig),importedActiveProfileId=String(externalConfig.activeProfileId||"").trim(),shouldSyncExternalActiveProfile=!!importedActiveProfileId&&externalProfileIds.has(importedActiveProfileId)&&(!currentStoredActiveProfileId||externalProfileIds.has(currentStoredActiveProfileId))&¤tStoredActiveProfileId!==importedActiveProfileId;if(importedProfiles.length===0&&!shouldSyncExternalActiveProfile)return{discoveredProfiles,importedProfiles,skippedProfiles,activeProfileId:importedActiveProfileId||void 0,syncedActiveProfile:null};let nextProfiles=[...storedProfiles,...importedProfiles];updateProviderConfig(nextProfiles,shouldSyncExternalActiveProfile?importedActiveProfileId:getStoredActiveProviderProfileId(currentConfig)||void 0);let syncedActiveProfile=null;return shouldSyncExternalActiveProfile&&(!getCurrentProviderProfile()||externalProfileIds.has(currentStoredActiveProfileId))&&(syncedActiveProfile=nextProfiles.find(profile=>profile.id===importedActiveProfileId)??null,syncedActiveProfile&&(writeUserSettingsUpdate(syncedActiveProfile),applyProviderProfileToProcess(syncedActiveProfile))),{discoveredProfiles,importedProfiles,skippedProfiles,activeProfileId:importedActiveProfileId||void 0,syncedActiveProfile}}function escapeTomlBasicString(value){return value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function updateCompatibleExternalProviderCurrentProfile(profileId){let nextProfileId=String(profileId||"").trim();for(let source of COMPATIBLE_EXTERNAL_PROVIDER_CONFIG_PATHS){if(!existsSync3(source.path)||nextProfileId&&!loadCompatibleExternalProviderConfig(source.path,source.sourceId)?.profiles.some(profile=>profile.id===nextProfileId))continue;let content="";try{content=readFileSync6(source.path,"utf8")}catch{continue}let lines=content.split(/\r?\n/u),output=[],currentPath=[],hasClaudeCodeSection=!1,replaced=!1;for(let line of lines){let normalizedLine=stripTomlComment(line),isSection=normalizedLine.startsWith("[")&&normalizedLine.endsWith("]");if(hasClaudeCodeSection&¤tPath.length===1&¤tPath[0]==="claudeCode"&&isSection&&!replaced&&(output.push(`currentProfile = "${escapeTomlBasicString(nextProfileId)}"`),replaced=!0),isSection){currentPath=parseTomlPathSegments(normalizedLine.slice(1,-1).trim()),currentPath.length===1&¤tPath[0]==="claudeCode"&&(hasClaudeCodeSection=!0),output.push(line);continue}if(currentPath.length===1&¤tPath[0]==="claudeCode"){let separatorIndex=normalizedLine.indexOf("=");if(separatorIndex!==-1&&normalizedLine.slice(0,separatorIndex).trim().replace(/^['"]|['"]$/g,"")==="currentProfile"){output.push(`currentProfile = "${escapeTomlBasicString(nextProfileId)}"`),replaced=!0;continue}}output.push(line)}if(hasClaudeCodeSection&¤tPath.length===1&¤tPath[0]==="claudeCode"&&!replaced&&(output.push(`currentProfile = "${escapeTomlBasicString(nextProfileId)}"`),replaced=!0),!hasClaudeCodeSection)continue;let nextContent=output.join(`
|
|
230
230
|
`);if(nextContent!==content)try{writeFileSync3(source.path,nextContent,"utf8")}catch{}}}function getProviderConfig(){return ensureNormalizedProviderBaseUrlsMigrated(),getGlobalConfig()}function getStoredProviderProfileRecords(config3){return Array.isArray(config3.clavueProviderProfiles)?config3.clavueProviderProfiles:Array.isArray(config3.my\u0063laudeProviderProfiles)?config3.my\u0063laudeProviderProfiles:[]}function getStoredActiveProviderProfileId(config3){let activeProfileId=typeof config3.clavueActiveProviderProfileId=="string"?config3.clavueActiveProviderProfileId.trim():"";return activeProfileId||(typeof config3.my\u0063laudeActiveProviderProfileId=="string"?config3.my\u0063laudeActiveProviderProfileId.trim():"")}function getStoredProviderCapabilityCache(config3){return config3.clavueProviderCapabilityCache&&typeof config3.clavueProviderCapabilityCache=="object"?config3.clavueProviderCapabilityCache:config3.my\u0063laudeProviderCapabilityCache&&typeof config3.my\u0063laudeProviderCapabilityCache=="object"?config3.my\u0063laudeProviderCapabilityCache:void 0}function ensureNormalizedProviderBaseUrlsMigrated(){hasMigratedNormalizedProviderBaseUrls||(hasMigratedNormalizedProviderBaseUrls=!0,migrateNormalizedProviderBaseUrls())}function getStoredProviderProfiles(){let config3=getProviderConfig(),providerSecrets=getStoredProviderSecretRecords();return getStoredProviderProfileRecords(config3).map(profile=>normalizeProviderProfile(profile,providerSecrets)).filter(profile=>profile!==null)}function ensureCompatibleExternalProviderProfilesImported(){hasAttemptedCompatibleExternalProviderImport||(hasAttemptedCompatibleExternalProviderImport=!0,shouldAutoImportCompatibleExternalProviderProfiles()&&applyCompatibleExternalProviderImport(loadCompatibleExternalProviderProfiles()))}function buildProviderCredentialFingerprint(profile){return createHash3("sha256").update([normalizeAnthropicBaseUrl(profile.baseUrl),profile.authType,profile.credential.trim()].join("\0")).digest("hex").slice(0,24)}function buildProviderCapabilityCacheKey(profile,model){return`${buildProviderCredentialFingerprint(profile)}:${normalizeModelValue(model).toLowerCase()}`}function createEmptyProviderCapabilitySnapshot(profile,model){return{version:PROVIDER_CAPABILITY_CACHE_VERSION,key:buildProviderCapabilityCacheKey(profile,model),model:normalizeModelValue(model),baseUrl:normalizeAnthropicBaseUrl(profile.baseUrl),authType:profile.authType,credentialFingerprint:buildProviderCredentialFingerprint(profile),checkedAt:Date.now(),compatibilityChecked:!1,anthropicMessagesReachable:!1,anthropicToolUse:!1,responsesArrayInputReachable:!1,responsesToolChoiceAuto:!1,responsesToolChoiceRequired:!1,responsesToolChoiceNamed:!1,responsesReasoningMedium:!1,responsesReasoningXHigh:!1}}function normalizeProviderCapabilitySnapshot(value){if(!value||typeof value!="object")return null;let raw=value,key=typeof raw.key=="string"?raw.key.trim():"",model=typeof raw.model=="string"?raw.model.trim():"",baseUrl=normalizeAnthropicBaseUrl(typeof raw.baseUrl=="string"?raw.baseUrl:""),credentialFingerprint=typeof raw.credentialFingerprint=="string"?raw.credentialFingerprint.trim():"";if(raw.version!==PROVIDER_CAPABILITY_CACHE_VERSION||!key||!model||!baseUrl||!credentialFingerprint)return null;let optionalString=__name(input=>typeof input=="string"&&input.trim()?input.trim():void 0,"optionalString");return{version:PROVIDER_CAPABILITY_CACHE_VERSION,key,model,baseUrl,authType:normalizeAuthType(raw.authType),credentialFingerprint,checkedAt:typeof raw.checkedAt=="number"&&Number.isFinite(raw.checkedAt)?raw.checkedAt:Date.now(),compatibilityChecked:raw.compatibilityChecked===!0,anthropicMessagesReachable:raw.anthropicMessagesReachable===!0,anthropicToolUse:raw.anthropicToolUse===!0,responsesArrayInputReachable:raw.responsesArrayInputReachable===!0,responsesToolChoiceAuto:raw.responsesToolChoiceAuto===!0,responsesToolChoiceRequired:raw.responsesToolChoiceRequired===!0,responsesToolChoiceNamed:raw.responsesToolChoiceNamed===!0,responsesReasoningMedium:raw.responsesReasoningMedium===!0,responsesReasoningXHigh:raw.responsesReasoningXHigh===!0,messagesError:optionalString(raw.messagesError),responsesAccessError:optionalString(raw.responsesAccessError),responsesAutoError:optionalString(raw.responsesAutoError),responsesRequiredError:optionalString(raw.responsesRequiredError),responsesNamedError:optionalString(raw.responsesNamedError),responsesReasoningMediumError:optionalString(raw.responsesReasoningMediumError),responsesReasoningXHighError:optionalString(raw.responsesReasoningXHighError)}}function getProviderCapabilityCache(){let rawCache=getStoredProviderCapabilityCache(getProviderConfig());return!rawCache||typeof rawCache!="object"?{}:Object.fromEntries(Object.entries(rawCache).map(([key,value])=>{let normalized=normalizeProviderCapabilitySnapshot(value);return normalized?[key,normalized]:null}).filter(entry=>entry!==null))}function saveProviderCapabilitySnapshot(snapshot2){saveGlobalConfig(current=>{let existingCache=current&&typeof current=="object"&&!Array.isArray(current)&&typeof current.clavueProviderCapabilityCache=="object"&¤t.clavueProviderCapabilityCache!==null?{...current.clavueProviderCapabilityCache}:{};return existingCache[snapshot2.key]=snapshot2,{...current,clavueProviderCapabilityCache:existingCache}})}function upsertProviderCapabilitySnapshot(profile,model,patch2){let key=buildProviderCapabilityCacheKey(profile,model),nextSnapshot={...getProviderCapabilityCache()[key]??createEmptyProviderCapabilitySnapshot(profile,model),...patch2,version:PROVIDER_CAPABILITY_CACHE_VERSION,key,model:normalizeModelValue(model),baseUrl:normalizeAnthropicBaseUrl(profile.baseUrl),authType:profile.authType,credentialFingerprint:buildProviderCredentialFingerprint(profile),checkedAt:Date.now()};return saveProviderCapabilitySnapshot(nextSnapshot),nextSnapshot}function getProviderCapabilitySnapshot(profile,model,{allowStale=!1}={}){let cacheKey=buildProviderCapabilityCacheKey(profile,model),snapshot2=getProviderCapabilityCache()[cacheKey];return!snapshot2||!allowStale&&Date.now()-snapshot2.checkedAt>PROVIDER_CAPABILITY_CACHE_TTL_MS?null:snapshot2}function getCachedProviderCapabilitySnapshot(profile,model,options={}){return getProviderCapabilitySnapshot(profile,model,options)}function getProviderCapabilitySnapshotFreshness(snapshot2){return snapshot2?Date.now()-snapshot2.checkedAt>PROVIDER_CAPABILITY_CACHE_TTL_MS?"stale":"fresh":"none"}function getSettingsEnv(){return getSettingsForSource("userSettings")?.env??{}}function buildSettingsEnvUpdate(profile){if(!profile)return{ANTHROPIC_BASE_URL:void 0,ANTHROPIC_API_KEY:void 0,ANTHROPIC_AUTH_TOKEN:void 0,ANTHROPIC_MODEL:void 0,ANTHROPIC_SMALL_FAST_MODEL:void 0,ANTHROPIC_CUSTOM_MODEL_OPTION:void 0,ANTHROPIC_CUSTOM_MODEL_OPTION_NAME:void 0,ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION:void 0,ANTHROPIC_DEFAULT_OPUS_MODEL:void 0,ANTHROPIC_DEFAULT_OPUS_MODEL_NAME:void 0,ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION:void 0,ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES:void 0,ANTHROPIC_DEFAULT_SONNET_MODEL:void 0,ANTHROPIC_DEFAULT_SONNET_MODEL_NAME:void 0,ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION:void 0,ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES:void 0,ANTHROPIC_DEFAULT_HAIKU_MODEL:void 0,ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME:void 0,ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION:void 0,ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES:void 0,CLAUDE_CODE_SUBAGENT_MODEL:void 0,CLAUDE_CODE_USE_BEDROCK:void 0,CLAUDE_CODE_USE_VERTEX:void 0,CLAUDE_CODE_USE_FOUNDRY:void 0};let routing=profile.modelRouting,slotDefaults=getProviderModelSlotDefaults(routing);return{ANTHROPIC_BASE_URL:normalizeAnthropicBaseUrl(profile.baseUrl),ANTHROPIC_API_KEY:void 0,ANTHROPIC_AUTH_TOKEN:void 0,ANTHROPIC_MODEL:routing.primaryModel||void 0,ANTHROPIC_SMALL_FAST_MODEL:routing.smallFastModel||void 0,ANTHROPIC_CUSTOM_MODEL_OPTION:routing.primaryModel||void 0,ANTHROPIC_CUSTOM_MODEL_OPTION_NAME:getProviderModelDisplayName(routing.primaryModel,"primary"),ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION:getProviderModelDescription(routing.primaryModel,"primary"),ANTHROPIC_DEFAULT_OPUS_MODEL:slotDefaults.opusModel||void 0,ANTHROPIC_DEFAULT_OPUS_MODEL_NAME:getProviderModelDisplayName(slotDefaults.opusModel,"opus"),ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION:getProviderModelDescription(slotDefaults.opusModel,"opus"),ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES:serializeCapabilitiesForModel(profile,slotDefaults.opusModel),ANTHROPIC_DEFAULT_SONNET_MODEL:slotDefaults.sonnetModel||void 0,ANTHROPIC_DEFAULT_SONNET_MODEL_NAME:getProviderModelDisplayName(slotDefaults.sonnetModel,"sonnet"),ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION:getProviderModelDescription(slotDefaults.sonnetModel,"sonnet"),ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES:serializeCapabilitiesForModel(profile,slotDefaults.sonnetModel),ANTHROPIC_DEFAULT_HAIKU_MODEL:slotDefaults.haikuModel||void 0,ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME:getProviderModelDisplayName(slotDefaults.haikuModel,"haiku"),ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION:getProviderModelDescription(slotDefaults.haikuModel,"haiku"),ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES:serializeCapabilitiesForModel(profile,slotDefaults.haikuModel),CLAUDE_CODE_SUBAGENT_MODEL:routing.subagentModel&&routing.subagentModel!=="inherit"?routing.subagentModel:void 0,CLAUDE_CODE_USE_BEDROCK:void 0,CLAUDE_CODE_USE_VERTEX:void 0,CLAUDE_CODE_USE_FOUNDRY:void 0}}function buildSettingsModelUpdate(profile){let primaryModel=profile?.modelRouting.primaryModel.trim();return primaryModel||void 0}function writeUserSettingsUpdate(profile){let envUpdate=buildSettingsEnvUpdate(profile);updateSettingsForSource("userSettings",{env:envUpdate,model:buildSettingsModelUpdate(profile)})}function updateProviderConfig(profiles,activeProviderId){persistProviderSecrets(profiles),saveGlobalConfig(current=>({...current,clavueProviderProfiles:profiles.length>0?profiles.map(scrubStoredProviderProfile):void 0,clavueActiveProviderProfileId:activeProviderId||void 0}))}function inferProviderPresetId(baseUrl){let normalizedBaseUrl=normalizeAnthropicBaseUrl(baseUrl);return normalizedBaseUrl?PROVIDER_PRESETS.find(preset=>preset.id!=="custom"&&normalizeAnthropicBaseUrl(preset.baseUrl)===normalizedBaseUrl)?.id??"custom":null}function getProviderModelCatalogEntry(model){let normalizedModel2=model.trim().toLowerCase();if(normalizedModel2)return PROVIDER_MODEL_CATALOG.find(entry=>entry.id.toLowerCase()===normalizedModel2)}function getProviderModelDisplayName(model,slot){let entry=getProviderModelCatalogEntry(model);if(entry)switch(slot){case"primary":return entry.name;case"opus":return`${entry.name} \xB7 Planning`;case"sonnet":return`${entry.name} \xB7 Execution`;case"haiku":return`${entry.name} \xB7 Fast`}}function getProviderModelDescription(model,slot){let entry=getProviderModelCatalogEntry(model);if(!entry)return;let capabilitySuffix=entry.capabilities.length>0?` Supports ${entry.capabilities.join(", ")}.`:"";switch(slot){case"primary":return`${entry.description}.${capabilitySuffix}`.trim();case"opus":return`Configured planning / Opus slot routed to ${entry.name}.${capabilitySuffix}`.trim();case"sonnet":return`Configured execution / Sonnet slot routed to ${entry.name}.${capabilitySuffix}`.trim();case"haiku":return`Configured fast / Haiku slot routed to ${entry.name}.${capabilitySuffix}`.trim()}}function getProviderPreset(id){return PROVIDER_PRESETS.find(preset=>preset.id===id)??PROVIDER_PRESETS[0]}function getProviderModelRoutingPreset(id){return PROVIDER_MODEL_ROUTING_PRESETS.find(preset=>preset.id===id)??PROVIDER_MODEL_ROUTING_PRESETS[0]}function getProviderProfiles(){return ensureCompatibleExternalProviderProfilesImported(),getStoredProviderProfiles()}function importCompatibleExternalProviderProfiles(options){options?.sourceId||(hasAttemptedCompatibleExternalProviderImport=!0);let sourceId=options?.sourceId,applied=applyCompatibleExternalProviderImport(loadCompatibleExternalProviderProfiles({sourceId}));return{sourceId:sourceId??"all",...applied}}function getProviderProfileById(profileId){return getProviderProfiles().find(profile=>profile.id===profileId.trim())??null}function findProviderProfiles(query2){let normalizedQuery=query2.trim().toLowerCase();if(!normalizedQuery)return[];let profiles=getProviderProfiles(),exactMatches=profiles.filter(profile=>{let name=profile.name.trim().toLowerCase(),id=profile.id.trim().toLowerCase();return name===normalizedQuery||id===normalizedQuery});return exactMatches.length>0?exactMatches:profiles.filter(profile=>{let name=profile.name.trim().toLowerCase(),id=profile.id.trim().toLowerCase(),baseUrl=profile.baseUrl.trim().toLowerCase();return name.includes(normalizedQuery)||id.includes(normalizedQuery)||baseUrl.includes(normalizedQuery)})}function getActiveProviderProfileId(){return ensureCompatibleExternalProviderProfilesImported(),getStoredActiveProviderProfileId(getProviderConfig())||void 0}function getSavedActiveProviderProfile(){let activeProfileId=getActiveProviderProfileId();return activeProfileId?getProviderProfiles().find(profile=>profile.id===activeProfileId)??null:null}function getCurrentProviderProfile(){let env5={...getSettingsEnv(),...process.env},credential=env5.ANTHROPIC_AUTH_TOKEN?.trim()??env5.ANTHROPIC_API_KEY?.trim()??"",authType=env5.ANTHROPIC_AUTH_TOKEN?"auth_token":"api_key",baseUrl=normalizeAnthropicBaseUrl(env5.ANTHROPIC_BASE_URL?.trim())||"https://api.anthropic.com";if(!credential||isPlaceholderProviderCredential(credential))return null;let providerId=inferProviderPresetId(baseUrl)??"custom",currentRouting={primaryModel:env5.ANTHROPIC_MODEL?.trim()??"",subagentModel:env5.CLAUDE_CODE_SUBAGENT_MODEL?.trim()??"",smallFastModel:env5.ANTHROPIC_SMALL_FAST_MODEL?.trim()??"",planModel:env5.ANTHROPIC_DEFAULT_OPUS_MODEL?.trim()??env5.ANTHROPIC_MODEL?.trim()??"",exploreModel:env5.CLAUDE_CODE_SUBAGENT_MODEL?.trim()??env5.ANTHROPIC_DEFAULT_SONNET_MODEL?.trim()??"",generalModel:env5.ANTHROPIC_DEFAULT_SONNET_MODEL?.trim()??"",teamModel:env5.CLAUDE_CODE_SUBAGENT_MODEL?.trim()??env5.ANTHROPIC_DEFAULT_SONNET_MODEL?.trim()??"",guideModel:env5.ANTHROPIC_DEFAULT_OPUS_MODEL?.trim()??env5.ANTHROPIC_MODEL?.trim()??""};return{id:CURRENT_PROVIDER_PROFILE_ID,name:"Current API config",providerId,modelMode:getProviderModelModeForProfile({providerId,modelRouting:{presetId:inferModelRoutingPresetId(currentRouting),...currentRouting}}),baseUrl,authType,credential,modelRouting:{presetId:inferModelRoutingPresetId(currentRouting),...currentRouting},provenance:{kind:"synthetic_current_env"},createdAt:Date.now(),updatedAt:Date.now()}}function getResolvedCurrentProviderProfile(){return getSavedActiveProviderProfile()??getCurrentProviderProfile()}function hasProviderCredentialConfigured(){return getResolvedCurrentProviderProfile()!==null}function getCredentialLabel(authType){return authType==="auth_token"?"Access Token":"API Key"}function maskCredential(credential){let trimmed=credential.trim();return trimmed.length<=8?"*".repeat(Math.max(trimmed.length,4)):`${trimmed.slice(0,4)}...${trimmed.slice(-4)}`}function createProviderModelRoutingFromPreset(presetId){return{...getProviderModelRoutingPreset(presetId).routing}}function createCustomProviderModelRouting(values2){let primaryModel=(values2.primaryModel||"").trim(),subagentModel=(values2.sonnetModel??values2.subagentModel??"").trim(),smallFastModel=(values2.haikuModel??values2.smallFastModel??"").trim(),opusModel=(values2.opusModel??"").trim(),executionModel=subagentModel||primaryModel;return{presetId:"custom",primaryModel,subagentModel,smallFastModel,planModel:opusModel||primaryModel,exploreModel:executionModel,generalModel:executionModel,teamModel:executionModel,guideModel:opusModel||primaryModel}}function getProviderModelSlotDefaults(routing){let slotValues=getProviderModeSlotValues(routing);return{opusModel:slotValues.opusModel,sonnetModel:slotValues.sonnetModel,haikuModel:slotValues.haikuModel}}function getValidationRoleLabel(role,_language){return role==="primary"?"Primary":role==="plan"?"Opus":role==="subagent"?"Sonnet":"Haiku"}function formatValidationRoles(roles,language){return roles.map(role=>getValidationRoleLabel(role,language)).join(", ")}function getAutoRepairCandidates(profile,roles,failedModel,routing){let candidates=getProviderAutoRepairCandidates(roles,failedModel,{primaryModel:routing.primaryModel,subagentModel:routing.subagentModel,smallFastModel:routing.smallFastModel,planModel:routing.planModel,guideModel:routing.guideModel});return filterProviderModeAutoRepairCandidates(profile.modelMode,roles,candidates)}function getRepairTargets(validation){return Array.isArray(validation.details)?validation.details.filter(detail=>detail.status==="error"||detail.kind==="compatibility"&&detail.status==="warn"&&detail.repairable===!0):[]}function applyAutoRepairRouting(routing,roles,model){let nextRouting={...routing},normalizedModel2=String(model||"").trim();return roles.includes("primary")&&(nextRouting.primaryModel=normalizedModel2),roles.includes("subagent")&&(nextRouting.subagentModel=normalizedModel2,nextRouting.exploreModel=normalizedModel2,nextRouting.generalModel=normalizedModel2,nextRouting.teamModel=normalizedModel2),roles.includes("fast")&&(nextRouting.smallFastModel=normalizedModel2),roles.includes("plan")&&(nextRouting.planModel=normalizedModel2,nextRouting.guideModel=normalizedModel2),nextRouting.presetId=inferModelRoutingPresetId({primaryModel:nextRouting.primaryModel,subagentModel:nextRouting.subagentModel,smallFastModel:nextRouting.smallFastModel,planModel:nextRouting.planModel,exploreModel:nextRouting.exploreModel,generalModel:nextRouting.generalModel,teamModel:nextRouting.teamModel,guideModel:nextRouting.guideModel}),nextRouting}function cloneProfileWithRouting(profile,routing){return{...profile,modelRouting:normalizeProviderModelRouting(routing),updatedAt:Date.now()}}function buildValidationHeaders(profile){let headers={"content-type":"application/json","anthropic-version":"2023-06-01"};return profile.authType==="auth_token"?headers.authorization=`Bearer ${profile.credential}`:headers["x-api-key"]=profile.credential,headers}function extractValidationErrorMessage(raw){try{let parsed=JSON.parse(raw);if(typeof parsed?.error?.message=="string")return parsed.error.message;if(typeof parsed?.message=="string")return parsed.message}catch{}return String(raw||"").trim()}function buildResponsesValidationHeaders(profile){let headers={"content-type":"application/json",authorization:`Bearer ${profile.credential}`};return profile.authType==="api_key"&&(headers["x-api-key"]=profile.credential),headers}function isFirstPartyAnthropicValidationBaseUrl(baseUrl){let normalizedBaseUrl=normalizeAnthropicBaseUrl(baseUrl);if(!normalizedBaseUrl)return!0;try{let host=new URL(normalizedBaseUrl).host,allowedHosts=["api.anthropic.com"];return process.env.USER_TYPE==="ant"&&allowedHosts.push("api-staging.anthropic.com"),allowedHosts.includes(host)}catch{return!1}}function shouldValidateViaOpenAIResponses(profile,model){let dialectMode=getConfiguredApiDialectMode();return dialectMode==="anthropic"?!1:dialectMode==="openai_responses"?!0:supportsOpenAIResponsesAdapterModel(model)&&!isFirstPartyAnthropicValidationBaseUrl(profile.baseUrl)}function shouldProbeNativeToolCalling(profile,model){let normalizedBaseUrl=normalizeAnthropicBaseUrl(profile.baseUrl),normalizedModel2=String(model||"").trim().toLowerCase();return normalizedBaseUrl!==normalizeAnthropicBaseUrl("https://api.anthropic.com")||!normalizedModel2.includes("claude")}function hasAnthropicToolUseBlock(raw,toolName){try{let parsed=JSON.parse(raw);return Array.isArray(parsed?.content)&&parsed.content.some(block=>!!block&&typeof block=="object"&&block.type==="tool_use"&&block.name===toolName)}catch{return!1}}function hasResponsesFunctionCall(raw,toolName){try{let parsed=JSON.parse(raw);return Array.isArray(parsed?.output)&&parsed.output.some(block=>!!block&&typeof block=="object"&&block.type==="function_call"&&block.name===toolName)}catch{return!1}}function createResponsesValidationInput(text){return[{role:"user",content:[{type:"input_text",text}]}]}function createResponsesValidationTool(toolName){return{type:"function",name:toolName,description:"Compatibility probe for OpenAI Responses native function calling.",parameters:{type:"object",properties:{name:{type:"string"}},required:["name"],additionalProperties:!1},strict:!0}}async function postResponsesValidationRequest(profile,body){let controller=new AbortController,timeout2=setTimeout(()=>controller.abort(),15e3);try{let response=await fetch(`${normalizeAnthropicBaseUrl(profile.baseUrl)}/v1/responses`,{method:"POST",headers:buildResponsesValidationHeaders(profile),body:JSON.stringify(body),signal:controller.signal});return{ok:response.ok,status:response.status,raw:await response.text()}}finally{clearTimeout(timeout2)}}async function runResponsesValidationAttempts(profile,body,evaluate){let lastResult2={ok:!1,status:0,raw:""};for(let attemptIndex=0;attemptIndex<PROVIDER_RESPONSES_STABILITY_ATTEMPTS;attemptIndex+=1)if(lastResult2=await postResponsesValidationRequest(profile,body).catch(error40=>({ok:!1,status:0,raw:error40 instanceof Error?error40.message:String(error40)})),!evaluate(lastResult2))return lastResult2;return lastResult2}function buildAccessValidationDetail(status2,model,roles,language,message){let roleLabel=formatValidationRoles(roles,language);return{status:status2,kind:"access",repairable:!1,line:language==="zh"?`[${status2.toUpperCase()}] ${roleLabel} -> ${model} \xB7 ${message}`:`[${status2.toUpperCase()}] ${roleLabel} -> ${model} \xB7 ${message}`,model,roles}}function buildResponsesCompatibilityDetailFromSnapshot(snapshot2,model,roles,language){let roleLabel=formatValidationRoles(roles,language),decision=resolveCodingRoutePolicy({model,baseUrl:snapshot2.baseUrl,snapshot:snapshot2}),supportedModes=[snapshot2.responsesToolChoiceAuto?"auto":null,snapshot2.responsesToolChoiceRequired?"required":null,snapshot2.responsesToolChoiceNamed?"named":null].filter(value=>value!==null),missingModes=[snapshot2.responsesToolChoiceAuto?null:"auto",snapshot2.responsesToolChoiceRequired?null:"required",snapshot2.responsesToolChoiceNamed?null:"named"].filter(value=>value!==null),supportSummary=supportedModes.length>0?` supported=${supportedModes.join(",")}`:"",missingSummary=missingModes.length>0?` missing=${missingModes.join(",")}`:"",reasonSummary=decision.qualityReason[0]??decision.transportReason;if(decision.qualityTier==="native"||decision.qualityTier==="compatible"){let transportLine=decision.transport==="openai_responses"?language==="zh"?`\u901A\u8FC7 OpenAI Responses \u517C\u5BB9\u8DEF\u7531\u8FD0\u884C\uFF08workflow=${decision.workflowMode}\uFF09`:`running through the OpenAI Responses compatibility route (workflow=${decision.workflowMode})`:language==="zh"?`Anthropic \u539F\u751F tool_use \u53EF\u7528\uFF08workflow=${decision.workflowMode}\uFF09`:`Anthropic native tool_use available (workflow=${decision.workflowMode})`;return{status:"ok",kind:"compatibility",repairable:!1,line:language==="zh"?`[OK] ${roleLabel} -> ${model} \xB7 ${transportLine} \xB7 ${reasonSummary}`:`[OK] ${roleLabel} -> ${model} \xB7 ${transportLine} \xB7 ${reasonSummary}`,model,roles}}return decision.qualityTier==="degraded"?{status:"warn",kind:"compatibility",repairable:!0,line:language==="zh"?`[WARN] ${roleLabel} -> ${model} \xB7 coding route degraded (workflow=${decision.workflowMode}).${supportSummary}${missingSummary} \xB7 ${reasonSummary}`:`[WARN] ${roleLabel} -> ${model} \xB7 coding route degraded (workflow=${decision.workflowMode}).${supportSummary}${missingSummary} \xB7 ${reasonSummary}`,model,roles}:{status:"warn",kind:"compatibility",repairable:!0,line:language==="zh"?`[WARN] ${roleLabel} -> ${model} \xB7 chat-only route (workflow=${decision.workflowMode}) \xB7 ${reasonSummary}`:`[WARN] ${roleLabel} -> ${model} \xB7 chat-only route (workflow=${decision.workflowMode}) \xB7 ${reasonSummary}`,model,roles}}function getEffortLevelsFromSnapshot(snapshot2){return snapshot2?snapshot2.responsesReasoningXHigh?["low","medium","high","max"]:snapshot2.responsesReasoningMedium?["low","medium","high"]:[]:[]}function buildProviderModelRouteInspection(model,snapshot2,language){let normalizedModel2=String(model||"").trim(),effortLevels=getEffortLevelsFromSnapshot(snapshot2),decision=resolveCodingRoutePolicy({model:normalizedModel2,baseUrl:snapshot2?.baseUrl,snapshot:snapshot2}),transport=decision.qualityTier==="native"||decision.qualityTier==="compatible"?decision.transport==="openai_responses"?"responses_full":"anthropic":decision.qualityTier==="degraded"?"responses_partial":decision.qualityTier==="chat_only"?"chat_only":"unreachable",error40=snapshot2?.responsesAccessError??snapshot2?.responsesRequiredError??snapshot2?.responsesNamedError??snapshot2?.responsesAutoError??snapshot2?.messagesError,effortSuffix=effortLevels.length>0?` \xB7 effort ${effortLevels.join("/")}`:"",workflowSuffix=` \xB7 workflow ${decision.workflowMode}`,linePrefix=decision.qualityTier==="compatible"&&normalizedModel2==="gpt-5.4"?"RECOMMENDED":decision.qualityTier==="native"||decision.qualityTier==="compatible"?"SUPPORTED":decision.qualityTier==="degraded"?"CONDITIONAL":"AVOID";if(decision.qualityTier==="native"||decision.qualityTier==="compatible"){let transportLabel=decision.transport==="openai_responses"?"OpenAI Responses coding route":"Anthropic native tool_use";return{model:normalizedModel2,status:normalizedModel2==="gpt-5.4"?"recommended":"supported",transport,policyTransport:decision.transport,effortLevels,qualityTier:decision.qualityTier,workflowMode:decision.workflowMode,transportReason:decision.transportReason,line:language==="zh"?`[${linePrefix}] ${normalizedModel2} \xB7 ${transportLabel}${effortSuffix}${workflowSuffix}`:`[${linePrefix}] ${normalizedModel2} \xB7 ${transportLabel}${effortSuffix}${workflowSuffix}`}}return{model:normalizedModel2,status:decision.qualityTier==="degraded"?"conditional":"avoid",transport,policyTransport:decision.transport,effortLevels,qualityTier:decision.qualityTier,workflowMode:decision.workflowMode,transportReason:decision.transportReason,error:error40,line:language==="zh"?`[${linePrefix}] ${normalizedModel2} \xB7 ${decision.qualityReason[0]??decision.transportReason}${effortSuffix}${workflowSuffix}${error40?`: ${error40}`:""}`:`[${linePrefix}] ${normalizedModel2} \xB7 ${decision.qualityReason[0]??decision.transportReason}${effortSuffix}${workflowSuffix}${error40?`: ${error40}`:""}`}}async function probeModelAccess(profile,model,roles,language){let cachedSnapshot=getProviderCapabilitySnapshot(profile,model);if(cachedSnapshot){if(cachedSnapshot.anthropicMessagesReachable||cachedSnapshot.responsesArrayInputReachable)return buildAccessValidationDetail("ok",model,roles,language,language==="zh"?"\u6A21\u578B\u53EF\u8BBF\u95EE":"model reachable");let cachedError=cachedSnapshot.responsesAccessError??cachedSnapshot.messagesError;if(cachedError&&cachedSnapshot.compatibilityChecked)return buildAccessValidationDetail("error",model,roles,language,cachedError)}let controller=new AbortController,timeout2=setTimeout(()=>controller.abort(),15e3),roleLabel=formatValidationRoles(roles,language),useResponsesValidation=shouldValidateViaOpenAIResponses(profile,model),responsesAccessToolName="access_probe",url3=useResponsesValidation?`${normalizeAnthropicBaseUrl(profile.baseUrl)}/v1/responses`:`${normalizeAnthropicBaseUrl(profile.baseUrl)}/v1/messages`;try{let accessResult=useResponsesValidation?await runResponsesValidationAttempts(profile,{model,input:createResponsesValidationInput(`Call ${responsesAccessToolName} exactly once with name "alpha". Do not answer with plain text.`),tool_choice:"required",max_output_tokens:64,store:!1,tools:[createResponsesValidationTool(responsesAccessToolName)]},result2=>result2.ok):{ok:!1,status:0,raw:""},response=useResponsesValidation?null:await fetch(url3,{method:"POST",headers:buildValidationHeaders(profile),body:JSON.stringify({model,max_tokens:1,messages:[{role:"user",content:[{type:"text",text:"ping"}]}]}),signal:controller.signal}),raw=useResponsesValidation?accessResult.raw:await response.text();if(useResponsesValidation?accessResult.ok:response.ok)return upsertProviderCapabilitySnapshot(profile,model,{...useResponsesValidation?{responsesArrayInputReachable:!0,responsesAccessError:void 0}:{anthropicMessagesReachable:!0,messagesError:void 0}}),{status:"ok",kind:"access",repairable:!1,line:language==="zh"?`[OK] ${roleLabel} -> ${model} \xB7 \u6A21\u578B\u53EF\u8BBF\u95EE`:`[OK] ${roleLabel} -> ${model} \xB7 model reachable`,model,roles};let failureStatus=useResponsesValidation?accessResult.status:response.status,message=extractValidationErrorMessage(raw)||`HTTP ${failureStatus}`,lowered=`${failureStatus} ${message}`.toLowerCase(),isHardFailure=failureStatus===400||failureStatus===401||failureStatus===403||failureStatus===404||lowered.includes("model")||lowered.includes("not found")||lowered.includes("does not exist")||lowered.includes("unauthorized");return upsertProviderCapabilitySnapshot(profile,model,{...useResponsesValidation?{responsesArrayInputReachable:!1,responsesAccessError:message}:{anthropicMessagesReachable:!1,messagesError:message}}),{status:isHardFailure?"error":"warn",kind:"access",repairable:!1,line:`[${isHardFailure?"ERROR":"WARN"}] ${roleLabel} -> ${model} \xB7 ${message}`,model,roles}}catch(error40){let detail=error40 instanceof Error?error40.message:String(error40);return upsertProviderCapabilitySnapshot(profile,model,{...useResponsesValidation?{responsesArrayInputReachable:!1,responsesAccessError:detail}:{anthropicMessagesReachable:!1,messagesError:detail}}),{status:"warn",kind:"access",repairable:!1,line:`[WARN] ${roleLabel} -> ${model} \xB7 ${detail}`,model,roles}}finally{clearTimeout(timeout2)}}async function probeNativeToolCallingCompatibility(profile,model,roles,language){if(!shouldProbeNativeToolCalling(profile,model))return null;let cachedSnapshot=getProviderCapabilitySnapshot(profile,model);if(cachedSnapshot?.compatibilityChecked)return buildResponsesCompatibilityDetailFromSnapshot(cachedSnapshot,model,roles,language);let roleLabel=formatValidationRoles(roles,language),useResponsesValidation=shouldValidateViaOpenAIResponses(profile,model),anthropicProbeToolName="ToolCompatibilityProbe",url3=`${normalizeAnthropicBaseUrl(profile.baseUrl)}/v1/messages`;if(!useResponsesValidation){let anthropicController=new AbortController,anthropicTimeout=setTimeout(()=>anthropicController.abort(),15e3);try{let response=await fetch(url3,{method:"POST",headers:buildValidationHeaders(profile),body:JSON.stringify({model,max_tokens:64,tool_choice:{type:"tool",name:anthropicProbeToolName},tools:[{name:anthropicProbeToolName,description:"Compatibility probe for Anthropic-style native tool calling.",input_schema:{type:"object",properties:{name:{type:"string"}},required:["name"],additionalProperties:!1}}],messages:[{role:"user",content:[{type:"text",text:`Call ${anthropicProbeToolName} exactly once with name "alpha". Do not answer with plain text.`}]}]}),signal:anthropicController.signal}),raw=await response.text();if(!response.ok){let message=extractValidationErrorMessage(raw)||`HTTP ${response.status}`;return{status:"warn",kind:"compatibility",repairable:!1,line:language==="zh"?`[WARN] ${roleLabel} -> ${model} \xB7 \u65E0\u6CD5\u786E\u8BA4 Anthropic \u539F\u751F\u5DE5\u5177\u8C03\u7528\u517C\u5BB9\u6027\uFF1A${message}`:`[WARN] ${roleLabel} -> ${model} \xB7 could not verify Anthropic native tool calling: ${message}`,model,roles}}if(hasAnthropicToolUseBlock(raw,anthropicProbeToolName))return upsertProviderCapabilitySnapshot(profile,model,{compatibilityChecked:!0,anthropicMessagesReachable:!0,anthropicToolUse:!0,messagesError:void 0}),{status:"ok",kind:"compatibility",repairable:!1,line:language==="zh"?`[OK] ${roleLabel} -> ${model} \xB7 Anthropic \u539F\u751F tool_use \u53EF\u7528`:`[OK] ${roleLabel} -> ${model} \xB7 Anthropic native tool_use available`,model,roles};upsertProviderCapabilitySnapshot(profile,model,{compatibilityChecked:!0,anthropicMessagesReachable:!0,anthropicToolUse:!1,messagesError:extractValidationErrorMessage(raw)||void 0})}catch(error40){let detail=error40 instanceof Error?error40.message:String(error40);return upsertProviderCapabilitySnapshot(profile,model,{compatibilityChecked:!0,anthropicToolUse:!1,messagesError:detail}),{status:"warn",kind:"compatibility",repairable:!1,line:language==="zh"?`[WARN] ${roleLabel} -> ${model} \xB7 Anthropic \u539F\u751F\u5DE5\u5177\u8C03\u7528\u63A2\u6D4B\u5931\u8D25\uFF1A${detail}`:`[WARN] ${roleLabel} -> ${model} \xB7 Anthropic native tool-calling probe failed: ${detail}`,model,roles}}finally{clearTimeout(anthropicTimeout)}}let responsesProbeToolName="tool_compatibility_probe",probePrompt=`Call ${responsesProbeToolName} exactly once with name "alpha". Do not answer with plain text.`,toolDefinition=createResponsesValidationTool(responsesProbeToolName),nextSnapshot=getProviderCapabilitySnapshot(profile,model,{allowStale:!0})??createEmptyProviderCapabilitySnapshot(profile,model),accessResponse=await runResponsesValidationAttempts(profile,{model,input:createResponsesValidationInput(probePrompt),tool_choice:"required",max_output_tokens:64,store:!1,tools:[toolDefinition]},result2=>result2.ok&&hasResponsesFunctionCall(result2.raw,responsesProbeToolName));if(nextSnapshot.responsesArrayInputReachable=accessResponse.ok,nextSnapshot.responsesAccessError=accessResponse.ok?void 0:extractValidationErrorMessage(accessResponse.raw)||accessResponse.raw,accessResponse.ok){let toolProbeEntries=[["responsesToolChoiceAuto",void 0,"responsesAutoError"],["responsesToolChoiceRequired","required","responsesRequiredError"],["responsesToolChoiceNamed",{type:"function",name:responsesProbeToolName},"responsesNamedError"]];for(let[field,toolChoice,errorField]of toolProbeEntries){let response=await runResponsesValidationAttempts(profile,{model,input:createResponsesValidationInput(probePrompt),...toolChoice!==void 0?{tool_choice:toolChoice}:{},max_output_tokens:64,store:!1,tools:[toolDefinition]},result2=>result2.ok&&hasResponsesFunctionCall(result2.raw,responsesProbeToolName)),supported=response.ok&&hasResponsesFunctionCall(response.raw,responsesProbeToolName);nextSnapshot[field]=supported,nextSnapshot[errorField]=supported?void 0:extractValidationErrorMessage(response.raw)||response.raw}let reasoningProbeEntries=[["responsesReasoningMedium","medium","responsesReasoningMediumError"],["responsesReasoningXHigh","xhigh","responsesReasoningXHighError"]];for(let[field,effort,errorField]of reasoningProbeEntries){let response=await runResponsesValidationAttempts(profile,{model,input:createResponsesValidationInput(probePrompt),tool_choice:"required",max_output_tokens:64,store:!1,reasoning:{effort},tools:[toolDefinition]},result2=>result2.ok&&hasResponsesFunctionCall(result2.raw,responsesProbeToolName)),supported=response.ok&&hasResponsesFunctionCall(response.raw,responsesProbeToolName);nextSnapshot[field]=supported,nextSnapshot[errorField]=supported?void 0:extractValidationErrorMessage(response.raw)||response.raw}}let savedSnapshot=upsertProviderCapabilitySnapshot(profile,model,{...nextSnapshot,compatibilityChecked:!0});return buildResponsesCompatibilityDetailFromSnapshot(savedSnapshot,model,roles,language)}async function probeModelAvailability(profile,model,roles,language){let access6=await probeModelAccess(profile,model,roles,language);if(access6.status!=="ok")return{access:access6,compatibility:null,status:access6.status};let compatibility=await probeNativeToolCallingCompatibility(profile,model,roles,language);return compatibility&&compatibility.status!=="ok"?{access:access6,compatibility,status:compatibility.status}:{access:access6,compatibility,status:"ok"}}async function validateProviderProfile(profile,{language="en",probe=!0}={}){if(!profile)return{status:"error",lines:[language==="zh"?"[ERROR] \u5F53\u524D\u6CA1\u6709\u53EF\u9A8C\u8BC1\u7684\u4F9B\u5E94\u5546\u914D\u7F6E\u3002":"[ERROR] No active provider configuration is available to validate."]};let rolesByModel=new Map,routing=normalizeProviderModelRouting(profile.modelRouting);for(let[role,model]of[["primary",routing.primaryModel],["subagent",routing.subagentModel],["fast",routing.smallFastModel],["plan",routing.planModel]]){let normalizedModel2=String(model||"").trim();if(!normalizedModel2)continue;let existingRoles=rolesByModel.get(normalizedModel2)??[];existingRoles.push(role),rolesByModel.set(normalizedModel2,existingRoles)}if(rolesByModel.size===0)return{status:"warn",lines:[...getProviderLocalValidationWarnings(profile,{language}),language==="zh"?"[WARN] \u5F53\u524D\u914D\u7F6E\u6CA1\u6709\u663E\u5F0F\u6A21\u578B\u8DEF\u7531\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u4F9B\u5E94\u5546\u9ED8\u8BA4\u6A21\u578B\u3002":"[WARN] No explicit model routing is configured. The provider default will be used."]};let localWarnings=getProviderLocalValidationWarnings(profile,{language}),results=[];for(let[model,roles]of rolesByModel.entries()){let snapshot2=probe?null:getProviderCapabilitySnapshot(profile,model,{allowStale:!0});if(snapshot2){results.push(buildAccessValidationDetail(snapshot2.anthropicMessagesReachable||snapshot2.responsesArrayInputReachable?"ok":"error",model,roles,language,snapshot2.responsesAccessError??snapshot2.messagesError??(language==="zh"?"\u6A21\u578B\u4E0D\u53EF\u8BBF\u95EE":"model unreachable"))),snapshot2.compatibilityChecked&&results.push(buildResponsesCompatibilityDetailFromSnapshot(snapshot2,model,roles,language));continue}if(!probe){results.push(buildAccessValidationDetail("warn",model,roles,language,language==="zh"?"\u5C1A\u672A\u9A8C\u8BC1\uFF1B\u8FD0\u884C provider validate \u8FDB\u884C\u5B9E\u65F6\u63A2\u6D4B":"not validated yet; run provider validate for a live probe"));continue}let probeResult=await probeModelAvailability(profile,model,roles,language);results.push(probeResult.access),probeResult.compatibility&&results.push(probeResult.compatibility)}return results.some(result2=>result2.status==="error")?{status:"error",lines:[...localWarnings,...results.map(result2=>result2.line)],details:results}:localWarnings.length>0||results.some(result2=>result2.status==="warn")?{status:"warn",lines:[...localWarnings,...results.map(result2=>result2.line)],details:results}:{status:"ok",lines:results.map(result2=>result2.line),details:results}}async function inspectProviderModelRoute(profile,model,{language="en",probe=!0}={}){let normalizedModel2=String(model||"").trim();if(!profile||!normalizedModel2)return{model:normalizedModel2,status:"avoid",transport:"unreachable",policyTransport:"anthropic_messages",effortLevels:[],qualityTier:"blocked",workflowMode:"chat_only",transportReason:"No provider configuration is available to inspect.",line:language==="zh"?`[AVOID] ${normalizedModel2||"unknown"} \xB7 \u5F53\u524D\u6CA1\u6709\u53EF\u68C0\u67E5\u7684\u4F9B\u5E94\u5546\u914D\u7F6E`:`[AVOID] ${normalizedModel2||"unknown"} \xB7 no provider configuration is available to inspect`};let snapshot2=getProviderCapabilitySnapshot(profile,normalizedModel2);return!snapshot2&&probe&&(await probeModelAvailability(profile,normalizedModel2,["primary"],language),snapshot2=getProviderCapabilitySnapshot(profile,normalizedModel2,{allowStale:!0})),buildProviderModelRouteInspection(normalizedModel2,snapshot2,language)}async function inspectProviderModelRoutes(profile,models=DEFAULT_PROVIDER_ROUTE_DIAGNOSTIC_MODELS,{language="en",probe=!0}={}){let uniqueModels=[...new Set(models.map(model=>String(model||"").trim()))].filter(Boolean),results=[];for(let model of uniqueModels)results.push(await inspectProviderModelRoute(profile,model,{language,probe}));return results}async function attemptAutoRepairProviderProfile(profile,{language="en",persist=!0}={}){let originalValidation=await validateProviderProfile(profile,{language});if(!profile||originalValidation.status!=="error"&&originalValidation.status!=="warn")return{repaired:!1,profile,validation:originalValidation,originalValidation,repairLines:[]};let nextRouting={...normalizeProviderModelRouting(profile.modelRouting)},changed=!1,repairLines=[],probeCache=new Map,failedDetails=getRepairTargets(originalValidation);for(let detail of failedDetails){let roles=Array.isArray(detail.roles)?detail.roles:[];if(roles.length===0)continue;let candidates=getAutoRepairCandidates(profile,roles,detail.model,nextRouting),replacement=null;for(let candidate of candidates){let probe=probeCache.get(candidate);if(probe||(probe=await probeModelAvailability(profile,candidate,roles,language),probeCache.set(candidate,probe)),probe.status==="ok"){replacement=candidate;break}}replacement&&(nextRouting=applyAutoRepairRouting(nextRouting,roles,replacement),changed=!0,repairLines.push(language==="zh"?`[REPAIRED] ${formatValidationRoles(roles,language)} -> ${replacement} \xB7 \u66FF\u6362 ${detail.model}`:`[REPAIRED] ${formatValidationRoles(roles,language)} -> ${replacement} \xB7 replaced ${detail.model}`))}if(!changed)return{repaired:!1,profile,validation:originalValidation,originalValidation,repairLines};let repairedProfile=cloneProfileWithRouting(profile,nextRouting),repairedValidation=await validateProviderProfile(repairedProfile,{language});return repairedValidation.status==="error"||getRepairTargets(repairedValidation).length>0?{repaired:!1,profile,validation:originalValidation,originalValidation,repairLines}:(persist&&profile.id&&profile.id!==CURRENT_PROVIDER_PROFILE_ID?saveProviderProfile(repairedProfile,{activate:!0}):persist&&applyProviderProfileToProcess(repairedProfile),{repaired:!0,profile:repairedProfile,validation:repairedValidation,originalValidation,repairLines})}function applyProviderProfileToProcess(profile){if(delete process.env.ANTHROPIC_API_KEY,delete process.env.ANTHROPIC_AUTH_TOKEN,delete process.env.ANTHROPIC_BASE_URL,delete process.env.ANTHROPIC_MODEL,delete process.env.ANTHROPIC_SMALL_FAST_MODEL,delete process.env.ANTHROPIC_CUSTOM_MODEL_OPTION,delete process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME,delete process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION,delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL,delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL_NAME,delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION,delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES,delete process.env.ANTHROPIC_DEFAULT_SONNET_MODEL,delete process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_NAME,delete process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION,delete process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES,delete process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL,delete process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME,delete process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION,delete process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES,delete process.env.CLAUDE_CODE_SUBAGENT_MODEL,delete process.env.CLAUDE_CODE_USE_BEDROCK,delete process.env.CLAUDE_CODE_USE_VERTEX,delete process.env.CLAUDE_CODE_USE_FOUNDRY,clear3PModelCapabilityOverrideCache(),clearBetasCaches(),!profile)return;process.env.ANTHROPIC_BASE_URL=normalizeAnthropicBaseUrl(profile.baseUrl),profile.authType==="auth_token"?process.env.ANTHROPIC_AUTH_TOKEN=profile.credential:process.env.ANTHROPIC_API_KEY=profile.credential;let routing=profile.modelRouting,slotDefaults=getProviderModelSlotDefaults(routing);if(routing.primaryModel){process.env.ANTHROPIC_MODEL=routing.primaryModel,process.env.ANTHROPIC_CUSTOM_MODEL_OPTION=routing.primaryModel;let name=getProviderModelDisplayName(routing.primaryModel,"primary"),description=getProviderModelDescription(routing.primaryModel,"primary");name&&(process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME=name),description&&(process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION=description)}if(routing.smallFastModel&&(process.env.ANTHROPIC_SMALL_FAST_MODEL=routing.smallFastModel),routing.subagentModel&&routing.subagentModel!=="inherit"&&(process.env.CLAUDE_CODE_SUBAGENT_MODEL=routing.subagentModel),slotDefaults.opusModel){process.env.ANTHROPIC_DEFAULT_OPUS_MODEL=slotDefaults.opusModel;let name=getProviderModelDisplayName(slotDefaults.opusModel,"opus"),description=getProviderModelDescription(slotDefaults.opusModel,"opus");name&&(process.env.ANTHROPIC_DEFAULT_OPUS_MODEL_NAME=name),description&&(process.env.ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION=description);let capabilities=serializeCapabilitiesForModel(profile,slotDefaults.opusModel);capabilities&&(process.env.ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES=capabilities)}if(slotDefaults.sonnetModel){process.env.ANTHROPIC_DEFAULT_SONNET_MODEL=slotDefaults.sonnetModel;let name=getProviderModelDisplayName(slotDefaults.sonnetModel,"sonnet"),description=getProviderModelDescription(slotDefaults.sonnetModel,"sonnet");name&&(process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_NAME=name),description&&(process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION=description);let capabilities=serializeCapabilitiesForModel(profile,slotDefaults.sonnetModel);capabilities&&(process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES=capabilities)}if(slotDefaults.haikuModel){process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL=slotDefaults.haikuModel;let name=getProviderModelDisplayName(slotDefaults.haikuModel,"haiku"),description=getProviderModelDescription(slotDefaults.haikuModel,"haiku");name&&(process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME=name),description&&(process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION=description);let capabilities=serializeCapabilitiesForModel(profile,slotDefaults.haikuModel);capabilities&&(process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES=capabilities)}}function clearActiveProviderConfiguration(){writeUserSettingsUpdate(null),applyProviderProfileToProcess(null),updateProviderConfig(getProviderProfiles(),void 0),updateCompatibleExternalProviderCurrentProfile(void 0)}function activateCurrentProviderProfile(){let currentProfile=getCurrentProviderProfile();return currentProfile?(updateProviderConfig(getProviderProfiles(),void 0),applyProviderProfileToProcess(currentProfile),updateCompatibleExternalProviderCurrentProfile(void 0),currentProfile):null}function activateProviderProfile(profileId){let profiles=getProviderProfiles(),profile=profiles.find(candidate=>candidate.id===profileId.trim());return profile?(updateProviderConfig(profiles,profile.id),writeUserSettingsUpdate(profile),applyProviderProfileToProcess(profile),updateCompatibleExternalProviderCurrentProfile(profile.id),profile):null}function saveProviderProfile(profile,options){let credential=profile.credential.trim();if(!credential)throw new Error("Provider credential is required.");if(isPlaceholderProviderCredential(credential))throw new Error("Provider credential looks like a placeholder.");let normalizedProfile={...profile,name:profile.name.trim(),baseUrl:normalizeAnthropicBaseUrl(profile.baseUrl),credential,modelMode:getProviderModelModeForProfile({providerId:normalizeProviderId(profile.providerId,normalizeAnthropicBaseUrl(profile.baseUrl)),modelMode:profile.modelMode,modelRouting:profile.modelRouting}),modelRouting:normalizeProviderModelRouting(profile.modelRouting),authType:normalizeAuthType(profile.authType),providerId:normalizeProviderId(profile.providerId,normalizeAnthropicBaseUrl(profile.baseUrl)),provenance:profile.provenance?.kind==="synthetic_current_env"?{kind:"current_env_adopted",adoptedAt:Date.now()}:normalizeProviderProfileProvenance(profile.provenance),updatedAt:Date.now()},profiles=getProviderProfiles(),index=profiles.findIndex(existingProfile=>existingProfile.id===normalizedProfile.id),nextProfiles=[...profiles];index>=0?nextProfiles[index]={...normalizedProfile,createdAt:nextProfiles[index]?.createdAt??normalizedProfile.createdAt}:nextProfiles.push(normalizedProfile);let currentActiveProviderId=getActiveProviderProfileId(),shouldActivate=options?.activate===!0||currentActiveProviderId===normalizedProfile.id;return updateProviderConfig(nextProfiles,shouldActivate?normalizedProfile.id:currentActiveProviderId),shouldActivate&&(writeUserSettingsUpdate(normalizedProfile),applyProviderProfileToProcess(normalizedProfile),updateCompatibleExternalProviderCurrentProfile(normalizedProfile.id)),normalizedProfile}function deleteProviderProfile(profileId){let profiles=getProviderProfiles().filter(profile=>profile.id!==profileId),currentActiveProviderId=getActiveProviderProfileId(),nextActiveProviderId=currentActiveProviderId===profileId?void 0:currentActiveProviderId;updateProviderConfig(profiles,nextActiveProviderId),currentActiveProviderId===profileId&&(writeUserSettingsUpdate(null),applyProviderProfileToProcess(null),updateCompatibleExternalProviderCurrentProfile(nextActiveProviderId))}function migrateNormalizedProviderBaseUrls(){let globalConfigChanged=!1,settingsChanged2=!1,globalConfig2=getGlobalConfig(),secureStorage=getSecureStorage(),existingStorageData=secureStorage.read()??{},currentProviderSecrets=getStoredProviderSecretRecords(),nextProviderSecrets={...currentProviderSecrets},providerSecretsChanged=!1,nextProfiles=(Array.isArray(globalConfig2.clavueProviderProfiles)?globalConfig2.clavueProviderProfiles:[]).map(profile=>{if(!profile||typeof profile!="object")return profile;let nextProfile={...profile},nextBaseUrl=normalizeAnthropicBaseUrl(profile.baseUrl);nextBaseUrl&&nextBaseUrl!==profile.baseUrl&&(globalConfigChanged=!0,nextProfile.baseUrl=nextBaseUrl);let profileId=typeof profile.id=="string"?profile.id.trim():"",legacyCredential=typeof profile.credential=="string"?profile.credential.trim():"";if(profileId&&legacyCredential){let nextSecret={credential:legacyCredential,authType:normalizeAuthType(profile.authType)},currentSecret=currentProviderSecrets[profileId];(!currentSecret||currentSecret.credential!==nextSecret.credential||currentSecret.authType!==nextSecret.authType)&&(nextProviderSecrets[profileId]=nextSecret,providerSecretsChanged=!0),delete nextProfile.credential,globalConfigChanged=!0}return nextProfile});if(providerSecretsChanged&&!secureStorage.update({...existingStorageData,providerProfiles:Object.keys(nextProviderSecrets).length>0?nextProviderSecrets:void 0}).success)return;globalConfigChanged&&saveGlobalConfig(current=>({...current,clavueProviderProfiles:nextProfiles}));let settingsEnv=getSettingsEnv(),normalizedEnvBaseUrl=normalizeAnthropicBaseUrl(settingsEnv.ANTHROPIC_BASE_URL),settingsEnvUpdate={};settingsEnv.ANTHROPIC_BASE_URL&&normalizedEnvBaseUrl&&normalizedEnvBaseUrl!==settingsEnv.ANTHROPIC_BASE_URL&&(settingsChanged2=!0,settingsEnvUpdate.ANTHROPIC_BASE_URL=normalizedEnvBaseUrl),settingsEnv.ANTHROPIC_API_KEY&&(settingsChanged2=!0,settingsEnvUpdate.ANTHROPIC_API_KEY=void 0),settingsEnv.ANTHROPIC_AUTH_TOKEN&&(settingsChanged2=!0,settingsEnvUpdate.ANTHROPIC_AUTH_TOKEN=void 0),settingsChanged2&&updateSettingsForSource("userSettings",{env:settingsEnvUpdate});let liveBaseUrl=normalizeAnthropicBaseUrl(process.env.ANTHROPIC_BASE_URL);process.env.ANTHROPIC_BASE_URL&&liveBaseUrl&&liveBaseUrl!==process.env.ANTHROPIC_BASE_URL&&(process.env.ANTHROPIC_BASE_URL=liveBaseUrl)}function markProviderOnboardingComplete(){saveGlobalConfig(current=>({...current,hasCompletedOnboarding:!0,lastOnboardingVersion:APP_VERSION}))}var hasMigratedNormalizedProviderBaseUrls,DEFAULT_PROVIDER_ROUTE_DIAGNOSTIC_MODELS,PROVIDER_PRESETS,PROVIDER_MODEL_ROUTING_PRESETS,PROVIDER_MODEL_CATALOG,PROVIDER_CAPABILITY_CACHE_TTL_MS,PROVIDER_CAPABILITY_CACHE_VERSION,PROVIDER_RESPONSES_STABILITY_ATTEMPTS,COMPATIBLE_EXTERNAL_PROVIDER_CONFIG_PATHS,hasAttemptedCompatibleExternalProviderImport,VERIFIED_MODEL_CAPABILITIES,init_providerProfiles=__esm({"src/utils/providerProfiles.ts"(){init_branding();init_betas2();init_config2();init_modelSupportOverrides();init_providerProfileMetadata();init_providerCredentials();init_providerModes();init_codingRoutePolicy();init_openaiResponsesConfig();init_settings2();init_secureStorage();hasMigratedNormalizedProviderBaseUrls=!1,DEFAULT_PROVIDER_ROUTE_DIAGNOSTIC_MODELS=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],PROVIDER_PRESETS=[{id:"custom",name:"\u81EA\u5B9A\u4E49\u914D\u7F6E",description:"\u624B\u52A8\u586B\u5199\u4EFB\u610F\u517C\u5BB9 API URL \u548C\u5BC6\u94A5",baseUrl:"",authType:"api_key"},{id:"anthropic",name:"Anthropic",description:"\u5B98\u65B9 Anthropic API",baseUrl:"https://api.anthropic.com",authType:"api_key"},{id:"openrouter",name:"OpenRouter",description:"OpenRouter Anthropic \u517C\u5BB9\u5165\u53E3",baseUrl:"https://openrouter.ai/api/anthropic",authType:"api_key"},{id:"glm",name:"GLM",description:"\u667A\u8C31 AI Claude \u517C\u5BB9\u63A5\u53E3",baseUrl:"https://open.bigmodel.cn/api/anthropic",authType:"auth_token"},{id:"minimax",name:"MiniMax",description:"MiniMax Claude \u517C\u5BB9\u63A5\u53E3",baseUrl:"https://api.minimaxi.com/anthropic",authType:"auth_token"},{id:"kimi",name:"Kimi",description:"Moonshot Kimi Coding \u63A5\u53E3",baseUrl:"https://api.kimi.com/coding/",authType:"auth_token"}],PROVIDER_MODEL_ROUTING_PRESETS=[{id:"provider_default",name:"Provider defaults",description:"Keep the provider defaults for all slots. Override individual models only when needed.",routing:{presetId:"provider_default",primaryModel:"",subagentModel:"",smallFastModel:"",planModel:"",exploreModel:"",generalModel:"",teamModel:"",guideModel:""}},{id:"claude_code_heritage",name:"Anthropic-native heritage",description:"Anthropic-native default path with Sonnet for execution, Haiku for fast work, and Opus for planning.",routing:{presetId:"claude_code_heritage",primaryModel:"claude-sonnet-4-6",subagentModel:"claude-sonnet-4-6",smallFastModel:"claude-haiku-4-5",planModel:"claude-opus-4-6",exploreModel:"claude-sonnet-4-6",generalModel:"claude-sonnet-4-6",teamModel:"claude-sonnet-4-6",guideModel:"claude-opus-4-6"}},{id:"gpt_5_5_max",name:"GPT-5.5 max capability",description:"Primary, workhorse, team, and planning slots on GPT-5.5 with GPT-5.3 Codex kept for fast helper work.",routing:{presetId:"gpt_5_5_max",primaryModel:"gpt-5.5",subagentModel:"gpt-5.5",smallFastModel:"gpt-5.3-codex",planModel:"gpt-5.5",exploreModel:"gpt-5.5",generalModel:"gpt-5.5",teamModel:"gpt-5.5",guideModel:"gpt-5.5"}},{id:"gpt_5_4_codex",name:"GPT-5.4 + GPT-5.3 Codex",description:"Primary slot on GPT-5.4. Sonnet and Haiku slots on GPT-5.3 Codex.",routing:{presetId:"gpt_5_4_codex",primaryModel:"gpt-5.4",subagentModel:"gpt-5.3-codex",smallFastModel:"gpt-5.3-codex",planModel:"gpt-5.4",exploreModel:"gpt-5.3-codex",generalModel:"gpt-5.3-codex",teamModel:"gpt-5.3-codex",guideModel:"gpt-5.4"}},{id:"gpt_5_1_stable",name:"GPT-5.1 stable",description:"Use GPT-5.1 across the primary, Haiku, Sonnet, and Opus slots.",routing:{presetId:"gpt_5_1_stable",primaryModel:"gpt-5.1",subagentModel:"gpt-5.1",smallFastModel:"gpt-5.1",planModel:"gpt-5.1",exploreModel:"gpt-5.1",generalModel:"gpt-5.1",teamModel:"gpt-5.1",guideModel:"gpt-5.1"}},{id:"gpt_5_3_codex",name:"GPT-5.3 Codex everywhere",description:"Run the primary, Haiku, Sonnet, and Opus slots on GPT-5.3 Codex.",routing:{presetId:"gpt_5_3_codex",primaryModel:"gpt-5.3-codex",subagentModel:"gpt-5.3-codex",smallFastModel:"gpt-5.3-codex",planModel:"gpt-5.3-codex",exploreModel:"gpt-5.3-codex",generalModel:"gpt-5.3-codex",teamModel:"gpt-5.3-codex",guideModel:"gpt-5.3-codex"}},{id:"custom",name:"Custom model routing",description:"Set primary, Haiku, Sonnet, and Opus slots yourself. Derived roles update automatically.",routing:{presetId:"custom",primaryModel:"",subagentModel:"",smallFastModel:"",planModel:"",exploreModel:"",generalModel:"",teamModel:"",guideModel:""}}],PROVIDER_MODEL_CATALOG=[{id:"gpt-5.5",name:"GPT-5.5",description:"Maximum-capability GPT route for validated OpenAI Responses-compatible coding gateways",verified:!1,capabilities:["effort","thinking","adaptive_thinking","max_effort"]},{id:"gpt-5.4",name:"GPT-5.4",description:"Probe-required Primary slot model on Anthropic-compatible GPT gateways",verified:!1,capabilities:["effort","thinking","adaptive_thinking"]},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",description:"Gateway-dependent execution model; only use it after this provider validates stable native tool calling",verified:!1,capabilities:["effort","thinking"]},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",description:"Experimental Codex route; only use it when this provider explicitly validates support",verified:!1,capabilities:["effort","thinking"]},{id:"gpt-5.1",name:"GPT-5.1",description:"Provider-dependent fallback when a gateway does not fully expose GPT-5.4",verified:!1,capabilities:["effort","thinking","adaptive_thinking"]},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",description:"Native Anthropic everyday coding model",verified:!0,capabilities:["thinking","adaptive_thinking"]},{id:"claude-opus-4-6",name:"Claude Opus 4.6",description:"Native Anthropic highest-capability model",verified:!0,capabilities:["thinking","adaptive_thinking"]},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",description:"Native Anthropic fast-response model for the Haiku slot",verified:!0,capabilities:[]}],PROVIDER_CAPABILITY_CACHE_TTL_MS=3600*1e3,PROVIDER_CAPABILITY_CACHE_VERSION=3,PROVIDER_RESPONSES_STABILITY_ATTEMPTS=2,COMPATIBLE_EXTERNAL_PROVIDER_CONFIG_PATHS=[{sourceId:"ccjk",path:join23(homedir9(),".ccjk","config.toml")},{sourceId:"zcf",path:join23(homedir9(),".ufomiao","zcf","config.toml")}],hasAttemptedCompatibleExternalProviderImport=!1;__name(normalizeConfigPathForComparison,"normalizeConfigPathForComparison");__name(shouldAutoImportCompatibleExternalProviderProfiles,"shouldAutoImportCompatibleExternalProviderProfiles");__name(normalizeAnthropicBaseUrl,"normalizeAnthropicBaseUrl");__name(stripTomlComment,"stripTomlComment");__name(parseTomlPathSegments,"parseTomlPathSegments");__name(parseTomlStringValue,"parseTomlStringValue");VERIFIED_MODEL_CAPABILITIES=new Map([["gpt-5.5",["effort","thinking","adaptive_thinking","max_effort"]],["gpt-5.4",["effort","thinking","adaptive_thinking"]],["gpt-5.1",["effort","thinking","adaptive_thinking"]],["gpt-5.3-codex",["effort","thinking"]]]);__name(getVerifiedCapabilitiesForModel,"getVerifiedCapabilitiesForModel");__name(getCapabilitiesFromProviderSnapshot,"getCapabilitiesFromProviderSnapshot");__name(serializeCapabilitiesForModel,"serializeCapabilitiesForModel");__name(normalizeAuthType,"normalizeAuthType");__name(normalizeProviderId,"normalizeProviderId");__name(normalizeModelRoutingPresetId,"normalizeModelRoutingPresetId");__name(normalizeModelValue,"normalizeModelValue");__name(inferModelRoutingPresetId,"inferModelRoutingPresetId");__name(normalizeProviderModelRouting,"normalizeProviderModelRouting");__name(normalizeProviderProfileProvenance,"normalizeProviderProfileProvenance");__name(normalizeProviderSecretRecord,"normalizeProviderSecretRecord");__name(getStoredProviderSecretRecords,"getStoredProviderSecretRecords");__name(areProviderSecretMapsEqual,"areProviderSecretMapsEqual");__name(persistProviderSecrets,"persistProviderSecrets");__name(scrubStoredProviderProfile,"scrubStoredProviderProfile");__name(normalizeProviderProfile,"normalizeProviderProfile");__name(buildCompatibleExternalProviderRouting,"buildCompatibleExternalProviderRouting");__name(getDefaultRoutingPresetIdForProvider,"getDefaultRoutingPresetIdForProvider");__name(getDefaultRoutingPresetIdForMode,"getDefaultRoutingPresetIdForMode");__name(createDefaultRoutingForMode,"createDefaultRoutingForMode");__name(repairProviderProfileRoutingForMode,"repairProviderProfileRoutingForMode");__name(createProviderProfileFromCompatibleExternalProfile,"createProviderProfileFromCompatibleExternalProfile");__name(loadCompatibleExternalProviderConfig,"loadCompatibleExternalProviderConfig");__name(loadCompatibleExternalProviderProfiles,"loadCompatibleExternalProviderProfiles");__name(applyCompatibleExternalProviderImport,"applyCompatibleExternalProviderImport");__name(escapeTomlBasicString,"escapeTomlBasicString");__name(updateCompatibleExternalProviderCurrentProfile,"updateCompatibleExternalProviderCurrentProfile");__name(getProviderConfig,"getProviderConfig");__name(getStoredProviderProfileRecords,"getStoredProviderProfileRecords");__name(getStoredActiveProviderProfileId,"getStoredActiveProviderProfileId");__name(getStoredProviderCapabilityCache,"getStoredProviderCapabilityCache");__name(ensureNormalizedProviderBaseUrlsMigrated,"ensureNormalizedProviderBaseUrlsMigrated");__name(getStoredProviderProfiles,"getStoredProviderProfiles");__name(ensureCompatibleExternalProviderProfilesImported,"ensureCompatibleExternalProviderProfilesImported");__name(buildProviderCredentialFingerprint,"buildProviderCredentialFingerprint");__name(buildProviderCapabilityCacheKey,"buildProviderCapabilityCacheKey");__name(createEmptyProviderCapabilitySnapshot,"createEmptyProviderCapabilitySnapshot");__name(normalizeProviderCapabilitySnapshot,"normalizeProviderCapabilitySnapshot");__name(getProviderCapabilityCache,"getProviderCapabilityCache");__name(saveProviderCapabilitySnapshot,"saveProviderCapabilitySnapshot");__name(upsertProviderCapabilitySnapshot,"upsertProviderCapabilitySnapshot");__name(getProviderCapabilitySnapshot,"getProviderCapabilitySnapshot");__name(getCachedProviderCapabilitySnapshot,"getCachedProviderCapabilitySnapshot");__name(getProviderCapabilitySnapshotFreshness,"getProviderCapabilitySnapshotFreshness");__name(getSettingsEnv,"getSettingsEnv");__name(buildSettingsEnvUpdate,"buildSettingsEnvUpdate");__name(buildSettingsModelUpdate,"buildSettingsModelUpdate");__name(writeUserSettingsUpdate,"writeUserSettingsUpdate");__name(updateProviderConfig,"updateProviderConfig");__name(inferProviderPresetId,"inferProviderPresetId");__name(getProviderModelCatalogEntry,"getProviderModelCatalogEntry");__name(getProviderModelDisplayName,"getProviderModelDisplayName");__name(getProviderModelDescription,"getProviderModelDescription");__name(getProviderPreset,"getProviderPreset");__name(getProviderModelRoutingPreset,"getProviderModelRoutingPreset");__name(getProviderProfiles,"getProviderProfiles");__name(importCompatibleExternalProviderProfiles,"importCompatibleExternalProviderProfiles");__name(getProviderProfileById,"getProviderProfileById");__name(findProviderProfiles,"findProviderProfiles");__name(getActiveProviderProfileId,"getActiveProviderProfileId");__name(getSavedActiveProviderProfile,"getSavedActiveProviderProfile");__name(getCurrentProviderProfile,"getCurrentProviderProfile");__name(getResolvedCurrentProviderProfile,"getResolvedCurrentProviderProfile");__name(hasProviderCredentialConfigured,"hasProviderCredentialConfigured");__name(getCredentialLabel,"getCredentialLabel");__name(maskCredential,"maskCredential");__name(createProviderModelRoutingFromPreset,"createProviderModelRoutingFromPreset");__name(createCustomProviderModelRouting,"createCustomProviderModelRouting");__name(getProviderModelSlotDefaults,"getProviderModelSlotDefaults");__name(getValidationRoleLabel,"getValidationRoleLabel");__name(formatValidationRoles,"formatValidationRoles");__name(getAutoRepairCandidates,"getAutoRepairCandidates");__name(getRepairTargets,"getRepairTargets");__name(applyAutoRepairRouting,"applyAutoRepairRouting");__name(cloneProfileWithRouting,"cloneProfileWithRouting");__name(buildValidationHeaders,"buildValidationHeaders");__name(extractValidationErrorMessage,"extractValidationErrorMessage");__name(buildResponsesValidationHeaders,"buildResponsesValidationHeaders");__name(isFirstPartyAnthropicValidationBaseUrl,"isFirstPartyAnthropicValidationBaseUrl");__name(shouldValidateViaOpenAIResponses,"shouldValidateViaOpenAIResponses");__name(shouldProbeNativeToolCalling,"shouldProbeNativeToolCalling");__name(hasAnthropicToolUseBlock,"hasAnthropicToolUseBlock");__name(hasResponsesFunctionCall,"hasResponsesFunctionCall");__name(createResponsesValidationInput,"createResponsesValidationInput");__name(createResponsesValidationTool,"createResponsesValidationTool");__name(postResponsesValidationRequest,"postResponsesValidationRequest");__name(runResponsesValidationAttempts,"runResponsesValidationAttempts");__name(buildAccessValidationDetail,"buildAccessValidationDetail");__name(buildResponsesCompatibilityDetailFromSnapshot,"buildResponsesCompatibilityDetailFromSnapshot");__name(getEffortLevelsFromSnapshot,"getEffortLevelsFromSnapshot");__name(buildProviderModelRouteInspection,"buildProviderModelRouteInspection");__name(probeModelAccess,"probeModelAccess");__name(probeNativeToolCallingCompatibility,"probeNativeToolCallingCompatibility");__name(probeModelAvailability,"probeModelAvailability");__name(validateProviderProfile,"validateProviderProfile");__name(inspectProviderModelRoute,"inspectProviderModelRoute");__name(inspectProviderModelRoutes,"inspectProviderModelRoutes");__name(attemptAutoRepairProviderProfile,"attemptAutoRepairProviderProfile");__name(applyProviderProfileToProcess,"applyProviderProfileToProcess");__name(clearActiveProviderConfiguration,"clearActiveProviderConfiguration");__name(activateCurrentProviderProfile,"activateCurrentProviderProfile");__name(activateProviderProfile,"activateProviderProfile");__name(saveProviderProfile,"saveProviderProfile");__name(deleteProviderProfile,"deleteProviderProfile");__name(migrateNormalizedProviderBaseUrls,"migrateNormalizedProviderBaseUrls");__name(markProviderOnboardingComplete,"markProviderOnboardingComplete")}});var init_openaiResponses=__esm({"src/utils/model/openaiResponses.ts"(){init_providerProfiles();init_codingRoutePolicy();init_openaiResponsesConfig()}});function getRequestUrl(input){try{return input instanceof Request?new URL(input.url):new URL(String(input))}catch{return null}}function isOpenAIChatCompletionsModel(model){return String(model??"").trim().toLowerCase().startsWith("gpt-image-")}function getOpenAICompatiblePath(model){return isOpenAIChatCompletionsModel(model)?OPENAI_CHAT_COMPLETIONS_PATH:OPENAI_RESPONSES_PATH}var OPENAI_RESPONSES_PATH,OPENAI_CHAT_COMPLETIONS_PATH,ANTHROPIC_MESSAGES_PATH,init_paths=__esm({"src/services/api/responsesAdapter/paths.ts"(){OPENAI_RESPONSES_PATH="/v1/responses",OPENAI_CHAT_COMPLETIONS_PATH="/v1/chat/completions",ANTHROPIC_MESSAGES_PATH="/v1/messages";__name(getRequestUrl,"getRequestUrl");__name(isOpenAIChatCompletionsModel,"isOpenAIChatCompletionsModel");__name(getOpenAICompatiblePath,"getOpenAICompatiblePath")}});function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function asRecord(value){return isRecord(value)?value:null}function getString(value){return typeof value=="string"?value:""}function getNumber(value){return typeof value=="number"&&Number.isFinite(value)?value:null}function safeParseJson(value){try{return JSON.parse(value)}catch{return null}}function parseJsonInput(value){return value?safeParseJson(value)??{}:{}}function stringifyJsonValue(value,fallback){if(typeof value=="string")return value;if(value===void 0)return fallback;try{return JSON.stringify(value)}catch{return fallback}}function stripUndefinedValues(value){return Object.fromEntries(Object.entries(value).filter(([,entryValue])=>entryValue!==void 0))}var init_jsonHelpers=__esm({"src/services/api/responsesAdapter/jsonHelpers.ts"(){__name(isRecord,"isRecord");__name(asRecord,"asRecord");__name(getString,"getString");__name(getNumber,"getNumber");__name(safeParseJson,"safeParseJson");__name(parseJsonInput,"parseJsonInput");__name(stringifyJsonValue,"stringifyJsonValue");__name(stripUndefinedValues,"stripUndefinedValues")}});function createResponsesHeaders(headers){let nextHeaders=new Headers(headers);return nextHeaders.set("content-type","application/json"),!nextHeaders.has("authorization")&&nextHeaders.has("x-api-key")&&nextHeaders.set("authorization",`Bearer ${nextHeaders.get("x-api-key")??""}`),nextHeaders.delete("anthropic-version"),nextHeaders.delete("anthropic-beta"),nextHeaders.delete("x-stainless-lang"),nextHeaders.delete("x-stainless-package-version"),nextHeaders.delete("x-stainless-os"),nextHeaders.delete("x-stainless-arch"),nextHeaders.delete("x-stainless-runtime"),nextHeaders.delete("x-stainless-runtime-version"),nextHeaders.delete("x-stainless-async"),nextHeaders.delete("x-stainless-retry-count"),nextHeaders.delete("x-stainless-timeout"),nextHeaders}function cloneResponseHeaders(headers){let nextHeaders=new Headers(headers);if(!nextHeaders.has("request-id")){let requestId=headers.get("request-id")||headers.get("x-request-id")||headers.get("x-oneapi-request-id")||headers.get("trace-id");requestId&&nextHeaders.set("request-id",requestId)}return nextHeaders}var init_headers2=__esm({"src/services/api/responsesAdapter/headers.ts"(){__name(createResponsesHeaders,"createResponsesHeaders");__name(cloneResponseHeaders,"cloneResponseHeaders")}});async function buildAnthropicErrorResponse(upstreamResponse){let rawText=await upstreamResponse.text(),parsed=safeParseJson(rawText),error40=asRecord(asRecord(parsed)?.error),body={type:"error",error:{type:getString(error40?.type)||"api_error",message:getString(error40?.message)||getString(asRecord(parsed)?.message)||`Upstream OpenAI Responses request failed with HTTP ${upstreamResponse.status}`}},headers=cloneResponseHeaders(upstreamResponse.headers);return headers.set("content-type","application/json"),new Response(JSON.stringify(body),{status:upstreamResponse.status,headers})}function buildAdapterToolTranslationErrorResponse(toolSet){let body={type:"error",error:{type:"api_error",message:`OpenAI Responses adapter refused to send a request after losing tool schemas for: ${toolSet.originalNames.length>0?toolSet.originalNames.join(", "):`${toolSet.originalCount} unnamed tool schema(s)`}. Run with --debug-file and inspect OpenAIResponsesAdapter tool translation logs.`}};return new Response(JSON.stringify(body),{status:500,headers:{"content-type":"application/json"}})}async function buildAdapterUnsupportedRouteErrorResponse(pathname,upstreamResponse){let rawText=await upstreamResponse.text(),parsed=safeParseJson(rawText),upstreamError=asRecord(asRecord(parsed)?.error),upstreamMessage=getString(upstreamError?.message)||getString(asRecord(parsed)?.message),body={type:"error",error:{type:"api_error",message:`OpenAI Responses adapter refused to fall back to Anthropic messages after ${pathname} returned HTTP 404. This protects file, search, edit, and shell tool schemas from being silently dropped. Use a provider route that supports OpenAI Responses tool calling or set CLAVUE_API_DIALECT=anthropic only if the gateway has verified Anthropic tool_use support.`+(upstreamMessage?` Upstream message: ${upstreamMessage}`:"")}},headers=cloneResponseHeaders(upstreamResponse.headers);return headers.set("content-type","application/json"),new Response(JSON.stringify(body),{status:502,headers})}function extractResponsesFailureMessage(payload){let response=asRecord(payload.response),error40=asRecord(response?.error);return getString(error40?.message)||getString(error40?.type)||"OpenAI Responses stream failed"}var init_errorResponses=__esm({"src/services/api/responsesAdapter/errorResponses.ts"(){init_jsonHelpers();init_headers2();__name(buildAnthropicErrorResponse,"buildAnthropicErrorResponse");__name(buildAdapterToolTranslationErrorResponse,"buildAdapterToolTranslationErrorResponse");__name(buildAdapterUnsupportedRouteErrorResponse,"buildAdapterUnsupportedRouteErrorResponse");__name(extractResponsesFailureMessage,"extractResponsesFailureMessage")}});function translateTools(rawTools){let tools=Array.isArray(rawTools)?rawTools:[],originalNames=[],translatedNames=[],droppedNames=[],translated=tools.flatMap(rawTool=>{let tool=asRecord(rawTool);if(!tool)return droppedNames.push("<invalid>"),[];let name=getString(tool.name);name&&originalNames.push(name);let description=getString(tool.description),parameters=sanitizeJsonSchema(tool.input_schema);return!name||!parameters?(droppedNames.push(name||"<unnamed>"),[]):(translatedNames.push(name),[stripUndefinedValues({type:"function",name,description,parameters,strict:tool.strict===!0})])});return{tools:translated.length>0?translated:void 0,originalCount:tools.length,translatedCount:translated.length,originalNames,translatedNames,droppedNames}}function sanitizeJsonSchema(value){let schema=asRecord(value);return schema?stripUndefinedValues({...schema}):null}function translateResponsesToolsToChatTools(rawTools){if(!Array.isArray(rawTools)||rawTools.length===0)return;let tools=rawTools.flatMap(rawTool=>{let tool=asRecord(rawTool);if(!tool||getString(tool.type)!=="function")return[];let name=getString(tool.name);return name?[stripUndefinedValues({type:"function",function:stripUndefinedValues({name,description:getString(tool.description)||void 0,parameters:asRecord(tool.parameters)??void 0,strict:tool.strict===!0})})]:[]});return tools.length>0?tools:void 0}function translateResponsesToolChoiceToChatToolChoice(rawToolChoice){if(rawToolChoice==="auto"||rawToolChoice==="required"||rawToolChoice==="none")return rawToolChoice;let toolChoice=asRecord(rawToolChoice);if(!toolChoice||getString(toolChoice.type)!=="function")return;let name=getString(toolChoice.name);return name?{type:"function",function:{name}}:"required"}function logTranslatedToolSet(toolSet,model,path25){if(toolSet.originalCount===0&&toolSet.translatedCount===0){logForDebugging(`[OpenAIResponsesAdapter] tool translation model=${model||"unknown-model"} path=${path25} original=0 translated=0`);return}let dropped=toolSet.droppedNames.length>0?` dropped=${toolSet.droppedNames.join(",")}`:"";logForDebugging(`[OpenAIResponsesAdapter] tool translation model=${model||"unknown-model"} path=${path25} original=${toolSet.originalCount} translated=${toolSet.translatedCount} names=${toolSet.translatedNames.join(",")||"none"}${dropped}`)}function translateToolChoice(rawToolChoice){let toolChoice=asRecord(rawToolChoice);if(!toolChoice)return;let type=getString(toolChoice.type);if(!type||type==="auto")return"auto";if(type==="any")return"required";if(type==="none")return"none";if(type==="tool"){let name=getString(toolChoice.name);return name?{type:"function",name}:"required"}}var init_toolTranslation=__esm({"src/services/api/responsesAdapter/toolTranslation.ts"(){init_debug();init_jsonHelpers();__name(translateTools,"translateTools");__name(sanitizeJsonSchema,"sanitizeJsonSchema");__name(translateResponsesToolsToChatTools,"translateResponsesToolsToChatTools");__name(translateResponsesToolChoiceToChatToolChoice,"translateResponsesToolChoiceToChatToolChoice");__name(logTranslatedToolSet,"logTranslatedToolSet");__name(translateToolChoice,"translateToolChoice")}});function mapChatCompletionsStopReason(response){let choices=Array.isArray(response?.choices)?response.choices:[],finishReason=getString(asRecord(choices[0])?.finish_reason);return finishReason==="length"?"max_tokens":finishReason==="tool_calls"||finishReason==="function_call"?"tool_use":"end_turn"}function getFirstChoice(payload){let choices=Array.isArray(payload.choices)?payload.choices:[];return asRecord(choices[0])}function mapResponsesStopReason(response,sawFunctionCall=!1){if(sawFunctionCall||(Array.isArray(response?.output)?response.output:[]).some(rawItem=>asRecord(rawItem)?.type==="function_call"))return"tool_use";let incompleteDetails=asRecord(response?.incomplete_details),incompleteReason=getString(incompleteDetails?.reason);return response?.status==="incomplete"&&incompleteReason==="max_output_tokens"?"max_tokens":"end_turn"}function createAnthropicUsage(rawUsage,rawToolUsage){let usage=asRecord(rawUsage),inputDetails=asRecord(usage?.input_tokens_details),toolUsage=asRecord(rawToolUsage),webSearch=asRecord(toolUsage?.web_search);return{input_tokens:getNumber(usage?.input_tokens)??0,cache_creation_input_tokens:0,cache_read_input_tokens:getNumber(inputDetails?.cached_tokens)??0,output_tokens:getNumber(usage?.output_tokens)??0,server_tool_use:{web_search_requests:getNumber(webSearch?.num_requests)??0,web_fetch_requests:0},service_tier:"standard",cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},inference_geo:"",iterations:[],speed:"standard"}}var init_usageMapping=__esm({"src/services/api/responsesAdapter/usageMapping.ts"(){init_jsonHelpers();__name(mapChatCompletionsStopReason,"mapChatCompletionsStopReason");__name(getFirstChoice,"getFirstChoice");__name(mapResponsesStopReason,"mapResponsesStopReason");__name(createAnthropicUsage,"createAnthropicUsage")}});function extractLossyFieldsForRoundTrip(anthropicRequest){let preserved=[],messages=Array.isArray(anthropicRequest.messages)?anthropicRequest.messages:[],system=anthropicRequest.system;Array.isArray(system)&&walkBlocks(system,-1,"system",preserved);for(let[index,rawMessage]of messages.entries()){let message=asRecord(rawMessage);if(!message)continue;let role=getString(message.role)||"user",content=Array.isArray(message.content)?message.content:[];walkBlocks(content,index,role,preserved)}return{preserved}}function walkBlocks(blocks,messageIndex,role,out){for(let[blockIndex,rawBlock]of blocks.entries()){let block=asRecord(rawBlock);if(!block)continue;let blockType=getString(block.type);block.cache_control!==void 0&&out.push({kind:"cache_control",messageIndex,blockIndex,role,blockType,value:block.cache_control}),block.citations!==void 0&&out.push({kind:"citations",messageIndex,blockIndex,role,blockType,value:block.citations}),blockType==="thinking"?out.push({kind:"thinking",messageIndex,blockIndex,role,blockType,value:{thinking:getString(block.thinking),signature:getString(block.signature)}}):blockType==="redacted_thinking"&&out.push({kind:"redacted_thinking",messageIndex,blockIndex,role,blockType,value:{data:getString(block.data)}})}}function attachRoundTripMetadata(anthropicResponseBody,extract){return extract.preserved.length===0?anthropicResponseBody:{...anthropicResponseBody,_clavue_round_trip:{preserved:extract.preserved,note:"Anthropic-only fields (cache_control / citations / thinking) were detected on the outbound request but the OpenAI Responses transport cannot carry them. They are surfaced here so client code may reattach them on the next turn."}}}var init_lossyRoundTrip=__esm({"src/services/api/responsesAdapter/lossyRoundTrip.ts"(){init_jsonHelpers();__name(extractLossyFieldsForRoundTrip,"extractLossyFieldsForRoundTrip");__name(walkBlocks,"walkBlocks");__name(attachRoundTripMetadata,"attachRoundTripMetadata")}});import{randomUUID as randomUUID3}from"crypto";async function buildAnthropicJsonResponse(upstreamResponse,responseHeaders,roundTripExtract){let responseJson=await upstreamResponse.json(),anthropicMessage=buildAnthropicMessageResponse(responseJson),finalMessage=roundTripExtract?attachRoundTripMetadata(anthropicMessage,roundTripExtract):anthropicMessage;return responseHeaders.set("content-type","application/json"),new Response(JSON.stringify(finalMessage),{status:upstreamResponse.status,headers:responseHeaders})}async function buildAnthropicChatCompletionsJsonResponse(upstreamResponse,responseHeaders,roundTripExtract){let responseJson=await upstreamResponse.json(),anthropicMessage=buildAnthropicChatCompletionsMessageResponse(responseJson),finalMessage=roundTripExtract?attachRoundTripMetadata(anthropicMessage,roundTripExtract):anthropicMessage;return responseHeaders.set("content-type","application/json"),new Response(JSON.stringify(finalMessage),{status:upstreamResponse.status,headers:responseHeaders})}function buildAnthropicChatCompletionsMessageResponse(responseJson){let response=asRecord(responseJson),text=(Array.isArray(response?.choices)?response.choices:[]).map(rawChoice=>{let choice=asRecord(rawChoice),message=asRecord(choice?.message);return getString(message?.content)}).filter(Boolean).join(`
|
|
231
231
|
|
|
@@ -1727,7 +1727,7 @@ Give the advice serious weight. If you follow a step and it fails empirically, o
|
|
|
1727
1727
|
|
|
1728
1728
|
If you've already retrieved data pointing one way and the advisor points another: don't silently switch. Surface the conflict in one more advisor call -- "I found X, you suggest Y, which constraint breaks the tie?" The advisor saw your evidence but may have underweighted it; a reconcile call is cheaper than committing to the wrong branch.`}});function CompactSummary({message,screen}){let isTranscriptMode=screen==="transcript",textContent=getUserMessageText(message)||"",metadata=message.summarizeMetadata;return metadata?(0,import_jsx_runtime45.jsx)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:(0,import_jsx_runtime45.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime45.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime45.jsx)(ThemedText,{color:"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime45.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime45.jsx)(ThemedText,{bold:!0,children:"Summarized conversation"}),!isTranscriptMode&&(0,import_jsx_runtime45.jsx)(MessageResponse,{children:(0,import_jsx_runtime45.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime45.jsxs)(ThemedText,{dimColor:!0,children:["Summarized ",metadata.messagesSummarized," messages"," ",metadata.direction==="up_to"?"up to this point":"from this point"]}),metadata.userContext&&(0,import_jsx_runtime45.jsxs)(ThemedText,{dimColor:!0,children:["Context: ","\u201C",metadata.userContext,"\u201D"]}),(0,import_jsx_runtime45.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime45.jsx)(ConfigurableShortcutHint,{action:"app:toggleTranscript",context:"Global",fallback:"ctrl+o",description:"expand history",parens:!0})})]})}),isTranscriptMode&&(0,import_jsx_runtime45.jsx)(MessageResponse,{children:(0,import_jsx_runtime45.jsx)(ThemedText,{children:textContent})})]})]})}):(0,import_jsx_runtime45.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime45.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime45.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime45.jsx)(ThemedText,{color:"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime45.jsx)(ThemedBox_default,{flexDirection:"column",children:(0,import_jsx_runtime45.jsxs)(ThemedText,{bold:!0,children:["Compact summary",!isTranscriptMode&&(0,import_jsx_runtime45.jsxs)(ThemedText,{dimColor:!0,children:[" ",(0,import_jsx_runtime45.jsx)(ConfigurableShortcutHint,{action:"app:toggleTranscript",context:"Global",fallback:"ctrl+o",description:"expand",parens:!0})]})]})})]}),isTranscriptMode&&(0,import_jsx_runtime45.jsx)(MessageResponse,{children:(0,import_jsx_runtime45.jsx)(ThemedText,{children:textContent})})]})}var import_jsx_runtime45,init_CompactSummary=__esm({"src/components/CompactSummary.tsx"(){init_figures2();init_ink2();init_messages4();init_ConfigurableShortcutHint();init_MessageResponse();import_jsx_runtime45=__toESM(require_jsx_runtime());__name(CompactSummary,"CompactSummary")}});function useBlink(enabled,intervalMs=BLINK_INTERVAL_MS){let focused=useTerminalFocus(),[ref,time4]=useAnimationFrame(enabled&&focused?intervalMs:null);if(!enabled||!focused)return[ref,!0];let isVisible=Math.floor(time4/intervalMs)%2===0;return[ref,isVisible]}var BLINK_INTERVAL_MS,init_useBlink=__esm({"src/hooks/useBlink.ts"(){init_ink2();BLINK_INTERVAL_MS=600;__name(useBlink,"useBlink")}});function ToolUseLoader({isError:isError2,isUnresolved,shouldAnimate}){let[ref,isBlinking]=useBlink(shouldAnimate);return(0,import_jsx_runtime46.jsx)(ThemedBox_default,{ref,minWidth:2,children:(0,import_jsx_runtime46.jsx)(ThemedText,{color:isUnresolved?void 0:isError2?"error":"success",dimColor:isUnresolved,children:!shouldAnimate||isBlinking||isError2||!isUnresolved?BLACK_CIRCLE:" "})})}var import_jsx_runtime46,init_ToolUseLoader=__esm({"src/components/ToolUseLoader.tsx"(){init_figures2();init_useBlink();init_ink2();import_jsx_runtime46=__toESM(require_jsx_runtime());__name(ToolUseLoader,"ToolUseLoader")}});function AdvisorMessage({block,addMargin,resolvedToolUseIDs,erroredToolUseIDs,shouldAnimate,verbose,advisorModel}){if(block.type==="server_tool_use"){let input=block.input&&Object.keys(block.input).length>0?jsonStringify(block.input):null;return(0,import_jsx_runtime47.jsxs)(ThemedBox_default,{marginTop:addMargin?1:0,paddingRight:2,flexDirection:"row",children:[(0,import_jsx_runtime47.jsx)(ToolUseLoader,{shouldAnimate,isUnresolved:!resolvedToolUseIDs.has(block.id),isError:erroredToolUseIDs.has(block.id)}),(0,import_jsx_runtime47.jsx)(ThemedText,{bold:!0,children:"Advising"}),advisorModel?(0,import_jsx_runtime47.jsxs)(ThemedText,{dimColor:!0,children:[" using ",renderModelName(advisorModel)]}):null,input?(0,import_jsx_runtime47.jsxs)(ThemedText,{dimColor:!0,children:[" \xB7 ",input]}):null]})}let body;switch(block.content.type){case"advisor_tool_result_error":body=(0,import_jsx_runtime47.jsxs)(ThemedText,{color:"error",children:["Advisor unavailable (",block.content.error_code,")"]});break;case"advisor_result":body=verbose?(0,import_jsx_runtime47.jsx)(ThemedText,{dimColor:!0,children:block.content.text}):(0,import_jsx_runtime47.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.tick," Advisor has reviewed the conversation and will apply the feedback ",(0,import_jsx_runtime47.jsx)(CtrlOToExpand,{})]});break;case"advisor_redacted_result":body=(0,import_jsx_runtime47.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.tick," Advisor has reviewed the conversation and will apply the feedback"]});break}return(0,import_jsx_runtime47.jsx)(ThemedBox_default,{paddingRight:2,children:(0,import_jsx_runtime47.jsx)(MessageResponse,{children:body})})}var import_jsx_runtime47,init_AdvisorMessage=__esm({"src/components/messages/AdvisorMessage.tsx"(){init_figures();init_ink2();init_model();init_slowOperations();init_CtrlOToExpand();init_MessageResponse();init_ToolUseLoader();import_jsx_runtime47=__toESM(require_jsx_runtime());__name(AdvisorMessage,"AdvisorMessage")}});function AssistantRedactedThinkingMessage({addMargin=!1}){return(0,import_jsx_runtime48.jsx)(ThemedBox_default,{marginTop:addMargin?1:0,children:(0,import_jsx_runtime48.jsx)(ThemedText,{dimColor:!0,italic:!0,children:"\u273B Thinking\u2026"})})}var import_jsx_runtime48,init_AssistantRedactedThinkingMessage=__esm({"src/components/messages/AssistantRedactedThinkingMessage.tsx"(){init_ink2();import_jsx_runtime48=__toESM(require_jsx_runtime());__name(AssistantRedactedThinkingMessage,"AssistantRedactedThinkingMessage")}});function isExtraUsageEnabled(){let reason=getGlobalConfig().cachedExtraUsageDisabledReason;if(reason===void 0)return!1;if(reason===null)return!0;switch(reason){case"out_of_credits":return!0;case"overage_not_provisioned":case"org_level_disabled":case"org_level_disabled_until":case"seat_tier_level_disabled":case"member_level_disabled":case"seat_tier_zero_credit_limit":case"group_zero_credit_limit":case"member_zero_credit_limit":case"org_service_level_disabled":case"org_service_zero_credit_limit":case"no_limits_configured":case"unknown":return!1;default:return!1}}function checkOpus1mAccess(){return is1mContextDisabled()?!1:isClaudeAISubscriber()?isExtraUsageEnabled():!0}function checkSonnet1mAccess(){return is1mContextDisabled()?!1:isClaudeAISubscriber()?isExtraUsageEnabled():!0}var init_check1mAccess=__esm({"src/utils/model/check1mAccess.ts"(){init_auth();init_config2();init_context();__name(isExtraUsageEnabled,"isExtraUsageEnabled");__name(checkOpus1mAccess,"checkOpus1mAccess");__name(checkSonnet1mAccess,"checkSonnet1mAccess")}});function getAvailableUpgrade(){let currentModelSetting=getUserSpecifiedModelSetting();return currentModelSetting==="opus"&&checkOpus1mAccess()?{alias:"opus[1m]",name:"Opus 1M",multiplier:5}:currentModelSetting==="sonnet"&&checkSonnet1mAccess()?{alias:"sonnet[1m]",name:"Sonnet 1M",multiplier:5}:null}function getUpgradeMessage(context2){let upgrade2=getAvailableUpgrade();if(!upgrade2)return null;switch(context2){case"warning":return`/model ${upgrade2.alias}`;case"tip":return`Tip: You have access to ${upgrade2.name} with ${upgrade2.multiplier}x more context`;default:return null}}var init_contextWindowUpgradeCheck=__esm({"src/utils/model/contextWindowUpgradeCheck.ts"(){init_check1mAccess();init_model();__name(getAvailableUpgrade,"getAvailableUpgrade");__name(getUpgradeMessage,"getUpgradeMessage")}});import{copyFileSync as copyFileSync2,existsSync as existsSync5,mkdirSync as mkdirSync4,readFileSync as readFileSync10,writeFileSync as writeFileSync4}from"fs";import{homedir as homedir19}from"os";import{dirname as dirname27,join as join56}from"path";function getCcjkProviderConfigPath(){return join56(homedir19(),".ccjk","config.toml")}function stripTomlComment2(line){let result2="",quote2=null,escaped=!1;for(let char of line){if(quote2){if(result2+=char,quote2==='"'&&char==="\\"&&!escaped){escaped=!0;continue}char===quote2&&!escaped&&(quote2=null),escaped=!1;continue}if(char==='"'||char==="'"){quote2=char,result2+=char;continue}if(char==="#")break;result2+=char}return result2.trim()}function parseTomlPathSegments2(value){let segments=[],current="",quote2=null;for(let char of value){if(quote2){char===quote2?quote2=null:current+=char;continue}if(char==='"'||char==="'"){quote2=char;continue}if(char==="."){let segment2=current.trim();segment2&&segments.push(segment2),current="";continue}current+=char}let tail2=current.trim();return tail2&&segments.push(tail2),segments}function parseTomlStringValue2(value){let trimmed=stripTomlComment2(value);if(!trimmed)return"";if(trimmed.startsWith('"')&&trimmed.endsWith('"'))try{return JSON.parse(trimmed)}catch{return trimmed.slice(1,-1)}return trimmed.startsWith("'")&&trimmed.endsWith("'")?trimmed.slice(1,-1):trimmed}function normalizeAuthType2(value){return value==="auth_token"?"auth_token":"api_key"}function normalizeProfile(id,profile){let normalizedId=id.trim(),name=String(profile.name||normalizedId).trim(),baseUrl=String(profile.baseUrl||"").trim(),apiKey=String(profile.apiKey||"").trim();return!normalizedId||!name||!baseUrl||!apiKey?null:{id:normalizedId,name,authType:normalizeAuthType2(profile.authType),apiKey,baseUrl,primaryModel:String(profile.primaryModel||"").trim(),defaultHaikuModel:String(profile.defaultHaikuModel||"").trim(),defaultSonnetModel:String(profile.defaultSonnetModel||"").trim(),defaultOpusModel:String(profile.defaultOpusModel||"").trim()}}function readCcjkProviderConfig(configPath=getCcjkProviderConfigPath()){if(!existsSync5(configPath))return{profiles:[]};let content="";try{content=readFileSync10(configPath,"utf8")}catch{return{profiles:[]}}let rawProfiles=new Map,currentProfile="",currentPath=[];for(let rawLine of content.split(/\r?\n/u)){let line=stripTomlComment2(rawLine);if(!line)continue;if(line.startsWith("[")&&line.endsWith("]")){currentPath=parseTomlPathSegments2(line.slice(1,-1).trim());continue}let separatorIndex=line.indexOf("=");if(separatorIndex===-1)continue;let key=line.slice(0,separatorIndex).trim().replace(/^['"]|['"]$/g,""),value=parseTomlStringValue2(rawLine.slice(separatorIndex+1));if(currentPath.length===1&¤tPath[0]==="claudeCode"){key==="currentProfile"&&(currentProfile=value.trim());continue}if(currentPath.length<3||currentPath[0]!=="claudeCode"||currentPath[1]!=="profiles")continue;let profileId=currentPath.slice(2).join(".").trim();if(!profileId)continue;let currentProfileData=rawProfiles.get(profileId)??{};(key==="name"||key==="authType"||key==="apiKey"||key==="baseUrl"||key==="primaryModel"||key==="defaultHaikuModel"||key==="defaultSonnetModel"||key==="defaultOpusModel")&&rawProfiles.set(profileId,{...currentProfileData,[key]:value})}return{currentProfile:currentProfile||void 0,profiles:[...rawProfiles.entries()].map(([id,profile])=>normalizeProfile(id,profile)).filter(profile=>profile!==null)}}function escapeTomlBasicString2(value){return value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function formatTomlPathSegment(value){return/^[A-Za-z0-9_-]+$/u.test(value)?value:`"${escapeTomlBasicString2(value)}"`}function serializeCcjkProviderConfig(config3){let lines=["[claudeCode]",`currentProfile = "${escapeTomlBasicString2(config3.currentProfile||"")}"`];for(let profile of config3.profiles)lines.push("",`[claudeCode.profiles.${formatTomlPathSegment(profile.id)}]`,`name = "${escapeTomlBasicString2(profile.name)}"`,`authType = "${profile.authType}"`,`apiKey = "${escapeTomlBasicString2(profile.apiKey)}"`,`baseUrl = "${escapeTomlBasicString2(profile.baseUrl)}"`,`primaryModel = "${escapeTomlBasicString2(profile.primaryModel)}"`,`defaultHaikuModel = "${escapeTomlBasicString2(profile.defaultHaikuModel)}"`,`defaultSonnetModel = "${escapeTomlBasicString2(profile.defaultSonnetModel)}"`,`defaultOpusModel = "${escapeTomlBasicString2(profile.defaultOpusModel)}"`);return`${lines.join(`
|
|
1729
1729
|
`)}
|
|
1730
|
-
`}function formatBackupTimestamp(date5=new Date){let pad2=__name(value=>value.toString().padStart(2,"0"),"pad");return[date5.getFullYear(),"-",pad2(date5.getMonth()+1),"-",pad2(date5.getDate()),"_",pad2(date5.getHours()),"-",pad2(date5.getMinutes()),"-",pad2(date5.getSeconds())].join("")}function createBackup(configPath){if(!existsSync5(configPath))return;let backupPath=join56(dirname27(configPath),`config.backup.${formatBackupTimestamp()}.toml`);return copyFileSync2(configPath,backupPath),backupPath}function writeCcjkProviderConfig(config3,configPath=getCcjkProviderConfigPath()){mkdirSync4(dirname27(configPath),{recursive:!0});let backupPath=createBackup(configPath);return writeFileSync4(configPath,serializeCcjkProviderConfig(config3),"utf8"),{backupPath}}var init_ccjkProviderConfig=__esm({"src/utils/ccjkProviderConfig.ts"(){__name(getCcjkProviderConfigPath,"getCcjkProviderConfigPath");__name(stripTomlComment2,"stripTomlComment");__name(parseTomlPathSegments2,"parseTomlPathSegments");__name(parseTomlStringValue2,"parseTomlStringValue");__name(normalizeAuthType2,"normalizeAuthType");__name(normalizeProfile,"normalizeProfile");__name(readCcjkProviderConfig,"readCcjkProviderConfig");__name(escapeTomlBasicString2,"escapeTomlBasicString");__name(formatTomlPathSegment,"formatTomlPathSegment");__name(serializeCcjkProviderConfig,"serializeCcjkProviderConfig");__name(formatBackupTimestamp,"formatBackupTimestamp");__name(createBackup,"createBackup");__name(writeCcjkProviderConfig,"writeCcjkProviderConfig")}});function getAuthTypeLabel(authType){return authType==="auth_token"?"Auth Token":"API Key"}function getManageActionLabel(action){return MANAGE_ACTION_OPTIONS.find(option=>option.value===action)?.label??""}function getModelModeOptionLabel(modelMode){return MODEL_MODE_OPTIONS.find(option=>option.value===modelMode)?.label??getProviderModelModeLabel(modelMode)}function getChooseProfileQuestion(action){return action==="edit"?"\u9009\u62E9\u8981\u7F16\u8F91\u7684\u914D\u7F6E":action==="copy"?"\u9009\u62E9\u8981\u590D\u5236\u7684\u914D\u7F6E":"\u9009\u62E9\u8981\u5220\u9664\u7684\u914D\u7F6E"}function getProfileOptionLabel(profile,index){return`${index+1}. ${profile.name} (${getAuthTypeLabel(profile.authType)})`}function getProviderProfileKey(profile){return profile.id.trim()||profile.name.trim().toLowerCase()}function getCcjkProfileFromProviderProfile(profile){let slots=getProviderModelSlotDefaults(profile.modelRouting);return{id:profile.id,name:profile.name,authType:profile.authType,apiKey:profile.credential,baseUrl:profile.baseUrl,primaryModel:profile.modelRouting.primaryModel,defaultHaikuModel:slots.haikuModel,defaultSonnetModel:slots.sonnetModel,defaultOpusModel:slots.opusModel}}function loadManagerProfiles(){let ccjkConfig=readCcjkProviderConfig(),providerProfiles=getProviderProfiles(),providerProfileByKey=new Map(providerProfiles.map(profile=>[getProviderProfileKey(profile),profile])),merged=new Map;for(let profile of ccjkConfig.profiles){let key=profile.id.trim();merged.set(key,{...profile,providerProfile:providerProfileByKey.get(key)})}for(let profile of providerProfiles){let key=getProviderProfileKey(profile);merged.has(key)||merged.set(key,{...getCcjkProfileFromProviderProfile(profile),providerProfile:profile})}return[...merged.values()]}function getManagerProfileModelMode(profile){if(profile.providerProfile?.modelMode)return profile.providerProfile.modelMode;let modelRouting=createCustomProviderModelRouting({primaryModel:profile.primaryModel,haikuModel:profile.defaultHaikuModel,sonnetModel:profile.defaultSonnetModel,opusModel:profile.defaultOpusModel}),providerId=inferProviderPresetId(profile.baseUrl)??"custom";return getProviderModelModeForProfile({providerId,modelRouting})}function createDraft(profile,modelMode="openai_native"){let existingModelMode=profile?getManagerProfileModelMode(profile):modelMode,shouldUseModeDefaults=!profile||existingModelMode!==modelMode,defaults3=createDefaultProviderModeSlotValues(modelMode);return{name:profile?.name??"",authType:profile?.authType??"api_key",apiKey:profile?.apiKey??"",baseUrl:profile?.baseUrl??"",modelMode,primaryModel:shouldUseModeDefaults?defaults3.primaryModel:profile?.primaryModel??defaults3.primaryModel,defaultHaikuModel:shouldUseModeDefaults?defaults3.haikuModel:profile?.defaultHaikuModel??defaults3.haikuModel,defaultSonnetModel:shouldUseModeDefaults?defaults3.sonnetModel:profile?.defaultSonnetModel??defaults3.sonnetModel,defaultOpusModel:shouldUseModeDefaults?defaults3.opusModel:profile?.defaultOpusModel??defaults3.opusModel}}function createCopyDraft(profile,modelMode){return{...createDraft(profile,modelMode),name:`${profile.name} Copy`}}function normalizeProfileId(value){return value.trim().replace(/[^A-Za-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"")||"custom"}function createUniqueProfileId(name,profiles,allowedExistingId){let baseId=normalizeProfileId(name),existingIds=new Set(profiles.map(profile=>profile.id.trim()).filter(id=>id&&id!==allowedExistingId));if(!existingIds.has(baseId))return baseId;for(let index=2;;index+=1){let candidate=`${baseId}-${index}`;if(!existingIds.has(candidate))return candidate}}function validateDraft(draft,profiles,originalProfile){let name=draft.name.trim(),baseUrl=draft.baseUrl.trim(),apiKey=draft.apiKey.trim();if(!name)return{message:"\u914D\u7F6E\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\u3002",focusField:"name"};if(!/^[A-Za-z0-9 ._-]+$/u.test(name))return{message:"\u914D\u7F6E\u540D\u79F0\u4EC5\u9650\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7A7A\u683C\u3001._-\u3002",focusField:"name"};if(profiles.some(profile=>profile.id!==originalProfile?.id&&profile.name.trim().toLowerCase()===name.toLowerCase()))return{message:"\u5DF2\u6709\u540C\u540D\u914D\u7F6E\uFF0C\u8BF7\u6362\u4E00\u4E2A\u914D\u7F6E\u540D\u79F0\u3002",focusField:"name"};if(!/^https?:\/\//iu.test(baseUrl))return{message:"API\u57FA\u7840URL\u5FC5\u987B\u4EE5 http:// \u6216 https:// \u5F00\u5934\u3002",focusField:"baseUrl"};if(!apiKey)return{message:"API\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A\u3002",focusField:"apiKey"};if(isPlaceholderProviderCredential(apiKey))return{message:"API\u5BC6\u94A5\u770B\u8D77\u6765\u50CF\u5360\u4F4D\u7B26\uFF0C\u8BF7\u8F93\u5165\u771F\u5B9E\u53EF\u7528\u7684\u5BC6\u94A5\u3002",focusField:"apiKey"};if(!draft.primaryModel.trim())return{message:"\u4E3B\u6A21\u578B\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u6839\u636E\u6240\u9009\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F\u586B\u5199\u53EF\u7528\u6A21\u578B\u3002",focusField:"primaryModel"};let firstError=validateProviderModeRouting(draft.modelMode,createCustomProviderModelRouting({primaryModel:draft.primaryModel,haikuModel:draft.defaultHaikuModel,sonnetModel:draft.defaultSonnetModel,opusModel:draft.defaultOpusModel}),{language:"zh",requireExplicitHybridSelections:draft.modelMode==="hybrid_compatible"}).find(issue2=>issue2.level==="error");return firstError?{message:firstError.message,focusField:getEditFieldForModeSlot(firstError.slot)}:null}function getEditFieldForModeSlot(slot){return slot==="haiku"?"defaultHaikuModel":slot==="sonnet"?"defaultSonnetModel":slot==="opus"?"defaultOpusModel":"primaryModel"}function getDefaultValueForEditField(modelMode,field){let defaults3=createDefaultProviderModeSlotValues(modelMode);return field==="primaryModel"?defaults3.primaryModel:field==="defaultHaikuModel"?defaults3.haikuModel:field==="defaultSonnetModel"?defaults3.sonnetModel:field==="defaultOpusModel"?defaults3.opusModel:""}function resolveDraftAuthType(profile){let inferredProviderId=inferProviderPresetId(profile.baseUrl);return!inferredProviderId||inferredProviderId==="custom"?profile.authType:getProviderPreset(inferredProviderId).authType}function createProviderProfileFromDraft(profile,modelMode,originalProviderProfile){let now2=Date.now(),modelRouting=createCustomProviderModelRouting({primaryModel:profile.primaryModel,haikuModel:profile.defaultHaikuModel,sonnetModel:profile.defaultSonnetModel,opusModel:profile.defaultOpusModel}),providerId=inferProviderPresetId(profile.baseUrl)??"custom",authType=resolveDraftAuthType(profile);return{id:profile.id,name:profile.name,providerId,modelMode,baseUrl:profile.baseUrl,authType,credential:profile.apiKey,modelRouting,provenance:originalProviderProfile?.provenance??{kind:"manual"},createdAt:originalProviderProfile?.createdAt??now2,updatedAt:now2}}function saveDraft(draft,action,originalProfile){let profiles=loadManagerProfiles(),originalId=action==="edit"?originalProfile?.id:void 0,nextProfileId=createUniqueProfileId(draft.name,profiles,originalId),inferredProviderId=inferProviderPresetId(draft.baseUrl),authType=!inferredProviderId||inferredProviderId==="custom"?draft.authType:getProviderPreset(inferredProviderId).authType,nextProfile={id:nextProfileId,name:draft.name.trim(),authType,apiKey:draft.apiKey.trim(),baseUrl:draft.baseUrl.trim(),primaryModel:draft.primaryModel.trim(),defaultHaikuModel:draft.defaultHaikuModel.trim(),defaultSonnetModel:draft.defaultSonnetModel.trim(),defaultOpusModel:draft.defaultOpusModel.trim()},repairResult=repairProviderProfileRoutingForMode(createProviderProfileFromDraft(nextProfile,draft.modelMode,action==="edit"?originalProfile?.providerProfile:void 0)),savedProfile=repairResult.repaired?getCcjkProfileFromProviderProfile(repairResult.profile):nextProfile,nextProfiles=[...profiles],existingIndex=originalId===void 0?-1:nextProfiles.findIndex(profile=>profile.id===originalId);existingIndex>=0?nextProfiles[existingIndex]={...savedProfile,providerProfile:originalProfile?.providerProfile}:nextProfiles.push(savedProfile);let writeResult=writeCcjkProviderConfig({currentProfile:savedProfile.id,profiles:nextProfiles.map(profile=>({id:profile.id,name:profile.name,authType:profile.authType,apiKey:profile.apiKey,baseUrl:profile.baseUrl,primaryModel:profile.primaryModel,defaultHaikuModel:profile.defaultHaikuModel,defaultSonnetModel:profile.defaultSonnetModel,defaultOpusModel:profile.defaultOpusModel}))});return originalId&&originalId!==nextProfile.id&&deleteProviderProfile(originalId),saveProviderProfile(repairResult.profile,{activate:!0}),markProviderOnboardingComplete(),{profile:savedProfile,backupPath:writeResult.backupPath,repairMessages:repairResult.repaired?repairResult.messages:[]}}function deleteManagerProfile(profile){let profiles=loadManagerProfiles().filter(candidate=>candidate.id!==profile.id),currentProfile=readCcjkProviderConfig().currentProfile?.trim(),nextCurrentProfile=currentProfile&¤tProfile!==profile.id?currentProfile:void 0,writeResult=writeCcjkProviderConfig({currentProfile:nextCurrentProfile,profiles});return deleteProviderProfile(profile.id),{backupPath:writeResult.backupPath}}function PromptSelect({question,options,defaultIndex=0,onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react43.useState)(defaultIndex);return use_input_default((input,key)=>{if(key.upArrow){setSelectedIndex(index=>index<=0?options.length-1:index-1);return}if(key.downArrow){setSelectedIndex(index=>(index+1)%options.length);return}if(key.return){let option=options[selectedIndex];option&&onSelect(option.value);return}let numericIndex=Number.parseInt(input,10);Number.isInteger(numericIndex)&&numericIndex>=1&&numericIndex<=options.length&&onSelect(options[numericIndex-1].value)}),(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," ",question," ",(0,import_jsx_runtime49.jsx)(ThemedText,{dimColor:!0,children:"(Use arrow keys)"})]}),options.map((option,index)=>(0,import_jsx_runtime49.jsxs)(ThemedText,{color:index===selectedIndex?"suggestion":void 0,children:[index===selectedIndex?figures_default.pointer:" "," ",option.label]},option.value))]})}function PromptTextInput({label,value,onChange,onSubmit}){let[cursorOffset,setCursorOffset]=(0,import_react43.useState)(value.length);return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," ",label," "]}),(0,import_jsx_runtime49.jsx)(TextInput,{value,onChange,onSubmit,focus:!0,showCursor:!0,multiline:!1,columns:80,cursorOffset,onChangeCursorOffset:setCursorOffset,disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0})]})}function ReturnMainPrompt({onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react43.useState)(0);return use_input_default((input,key)=>{if(key.leftArrow||key.rightArrow||key.tab){setSelectedIndex(index=>index===0?1:0);return}if(input.toLowerCase()==="n"){onSelect(!1);return}if(input.toLowerCase()==="y"){onSelect(!0);return}key.return&&onSelect(selectedIndex===1)}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," \u8FD4\u56DE\u4E3B\u83DC\u5355\uFF1F"," ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===0?"suggestion":void 0,children:"no"})," / ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===1?"suggestion":void 0,children:"yes"})]})}function YesNoPrompt({question,defaultValue=!1,onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react43.useState)(defaultValue?1:0);return use_input_default((input,key)=>{if(key.leftArrow||key.rightArrow||key.tab){setSelectedIndex(index=>index===0?1:0);return}if(input.toLowerCase()==="n"){onSelect(!1);return}if(input.toLowerCase()==="y"){onSelect(!0);return}key.return&&onSelect(selectedIndex===1)}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," ",question," ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===0?"suggestion":void 0,children:"no"})," / ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===1?"suggestion":void 0,children:"yes"})]})}function CompletedLine({question,answer}){return(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{color:"success",children:"\u2714"})," ",question," ",answer]})}function ManagerHeader({count:count4,modelMode}){return(0,import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u{1F511} API \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",answer:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E"}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F:",answer:getModelModeOptionLabel(modelMode)}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u{1F4CB} Clavue \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:["\u5F53\u524D\u914D\u7F6E\u6570\u91CF\uFF1A",count4]})]})}function renderCompletedFields(draft,untilIndex){return EDIT_FIELDS.slice(0,untilIndex).map(field=>(0,import_jsx_runtime49.jsx)(CompletedLine,{question:FIELD_LABELS[field],answer:draft[field]},field))}function getEditTitle(action){return action==="add"?"\u6DFB\u52A0\u914D\u7F6E":action==="copy"?"\u590D\u5236\u914D\u7F6E":"\u7F16\u8F91\u914D\u7F6E"}function createReturnStage(result2,lines){return{kind:"return-main",result:result2,lines}}function ProviderConfigManager({onDone}){let[stage,setStage]=(0,import_react43.useState)({kind:"mode"}),profiles=(0,import_react43.useMemo)(()=>loadManagerProfiles(),[stage]),profileOptions=profiles.map((profile,index)=>({label:getProfileOptionLabel(profile,index),value:profile.id}));function handleModeSelection(value){if(value==="custom"){setStage({kind:"model-mode"});return}if(value==="official"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u9009\u62E9\u4F7F\u7528\u5B98\u65B9\u767B\u5F55\u3002\u8BF7\u8FD0\u884C `clavue auth login` \u5B8C\u6210\u5B98\u65B9\u767B\u5F55\u3002"},["\u2714 \u5DF2\u9009\u62E9\u4F7F\u7528\u5B98\u65B9\u767B\u5F55","\u4E0B\u4E00\u6B65\uFF1A\u9000\u51FA\u540E\u8FD0\u884C `clavue auth login` \u5B8C\u6210\u5B98\u65B9\u767B\u5F55\u3002","\u5982\u9700\u81EA\u5B9A\u4E49 API\uFF0C\u8BF7\u8FD4\u56DE\u4E3B\u83DC\u5355\u9009\u62E9\u201C\u81EA\u5B9A\u4E49 API \u914D\u7F6E\u201D\u3002"]));return}if(value==="ccr"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u9009\u62E9\u4F7F\u7528 CCR \u4EE3\u7406\u3002\u8BF7\u6309 CCR \u4EE3\u7406\u8BF4\u660E\u5B8C\u6210\u914D\u7F6E\u3002"},["\u2714 \u5DF2\u9009\u62E9\u4F7F\u7528 CCR \u4EE3\u7406","\u4E0B\u4E00\u6B65\uFF1A\u6309 CCR \u4EE3\u7406\u8BF4\u660E\u5B8C\u6210\u672C\u673A\u4EE3\u7406\u914D\u7F6E\uFF0C\u7136\u540E\u91CD\u65B0\u8FD0\u884C `clavue`\u3002","\u5982\u679C\u4F60\u53EA\u60F3\u586B\u5199 API URL \u548C\u5BC6\u94A5\uFF0C\u8BF7\u8FD4\u56DE\u4E3B\u83DC\u5355\u9009\u62E9\u201C\u81EA\u5B9A\u4E49 API \u914D\u7F6E\u201D\u3002"]));return}setStage(createReturnStage({configured:!1,message:"\u5DF2\u8DF3\u8FC7 API \u914D\u7F6E\u3002"},["\u2714 \u5DF2\u8DF3\u8FC7 API \u914D\u7F6E","\u7A0D\u540E\u53EF\u8FD0\u884C `clavue provider` \u6216\u5728\u4F1A\u8BDD\u4E2D\u8F93\u5165 `/provider` \u7EE7\u7EED\u914D\u7F6E\u3002"]))}__name(handleModeSelection,"handleModeSelection");function handleModelModeSelection(modelMode){setStage({kind:"manage",modelMode})}__name(handleModelModeSelection,"handleModelModeSelection");function handleManageSelection(modelMode,value){if(value==="skip"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u8DF3\u8FC7 API \u914D\u7F6E\u3002"},["\u2714 \u5DF2\u8DF3\u8FC7 API \u914D\u7F6E","\u7A0D\u540E\u53EF\u8FD0\u884C `clavue provider` \u6216\u5728\u4F1A\u8BDD\u4E2D\u8F93\u5165 `/provider` \u7EE7\u7EED\u914D\u7F6E\u3002"]));return}if(value==="add"){setStage({kind:"edit",modelMode,action:"add",draft:createDraft(void 0,modelMode),fieldIndex:0});return}if(profiles.length===0){setStage({kind:"manage",modelMode,statusMessage:"\u5F53\u524D\u6CA1\u6709\u53EF\u64CD\u4F5C\u7684\u914D\u7F6E\uFF0C\u8BF7\u5148\u6DFB\u52A0\u914D\u7F6E\u3002"});return}setStage({kind:"choose-profile",modelMode,action:value})}__name(handleManageSelection,"handleManageSelection");function handleProfileSelection(modelMode,action,profileId){let profile=profiles.find(candidate=>candidate.id===profileId);if(!profile){setStage({kind:"manage",modelMode,statusMessage:"\u9009\u62E9\u7684\u914D\u7F6E\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002"});return}if(action==="delete"){setStage({kind:"confirm-delete",modelMode,profile});return}setStage({kind:"edit",modelMode,action,originalProfile:profile,draft:action==="copy"?createCopyDraft(profile,modelMode):createDraft(profile,modelMode),fieldIndex:0})}__name(handleProfileSelection,"handleProfileSelection");function updateDraftField(field,value){setStage(current=>current.kind==="edit"?{...current,draft:{...current.draft,[field]:value},errorMessage:void 0}:current)}__name(updateDraftField,"updateDraftField");function submitDraftField(value){setStage(current=>{if(current.kind!=="edit")return current;let field=EDIT_FIELDS[current.fieldIndex];if(!field)return current;let trimmedValue=value.trim(),fallbackValue=(field==="primaryModel"||field==="defaultHaikuModel"||field==="defaultSonnetModel"||field==="defaultOpusModel")&&!trimmedValue?current.originalProfile?.[field]||getDefaultValueForEditField(current.draft.modelMode,field):trimmedValue,nextDraft={...current.draft,[field]:fallbackValue};if(current.fieldIndex<EDIT_FIELDS.length-1)return{...current,draft:nextDraft,fieldIndex:current.fieldIndex+1,errorMessage:void 0};let errorMessage4=validateDraft(nextDraft,profiles,current.action==="edit"?current.originalProfile:void 0);if(errorMessage4){let focusIndex=EDIT_FIELDS.findIndex(draftField=>draftField===errorMessage4.focusField);return{...current,draft:nextDraft,fieldIndex:focusIndex>=0?focusIndex:0,errorMessage:errorMessage4.message}}try{let{profile,backupPath,repairMessages}=saveDraft(nextDraft,current.action,current.originalProfile),lines=[current.action==="edit"?`\u2714 \u5DF2\u6210\u529F\u66F4\u65B0\u914D\u7F6E\uFF1A${profile.name}`:`\u2714 \u5DF2\u6210\u529F\u4FDD\u5B58\u914D\u7F6E\uFF1A${profile.name}`,...repairMessages.map(message=>`\u26A0 ${message}`),...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],`\u2714 \u5DF2\u5C06\u914D\u7F6E ${profile.name} \u8BBE\u4E3A\u9ED8\u8BA4`,"\u2714 \u8BBE\u7F6E\u5DF2\u751F\u6548"];return{kind:"return-main",result:{configured:!0},lines}}catch(error40){return{...current,draft:nextDraft,errorMessage:error40 instanceof Error?error40.message:"\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"}}})}__name(submitDraftField,"submitDraftField");function confirmDelete(confirmed){if(stage.kind==="confirm-delete"){if(!confirmed){setStage({kind:"manage",modelMode:stage.modelMode});return}try{let{backupPath}=deleteManagerProfile(stage.profile);setStage({kind:"return-main",result:{configured:!0},lines:[`\u2714 \u5DF2\u5220\u9664\u914D\u7F6E\uFF1A${stage.profile.name}`,...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],"\u2714 \u8BBE\u7F6E\u5DF2\u751F\u6548"]})}catch(error40){setStage({kind:"manage",modelMode:stage.modelMode,statusMessage:error40 instanceof Error?error40.message:"\u5220\u9664\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"})}}}__name(confirmDelete,"confirmDelete");function handleReturnMain(returnToMain){if(stage.kind==="return-main"){if(returnToMain){setStage({kind:"mode"});return}onDone(stage.result.configured,stage.result.message)}}if(__name(handleReturnMain,"handleReturnMain"),stage.kind==="mode")return(0,import_jsx_runtime49.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",options:API_MODE_OPTIONS,defaultIndex:1,onSelect:handleModeSelection});if(stage.kind==="model-mode")return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u{1F511} API \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",answer:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E"}),(0,import_jsx_runtime49.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F:",options:MODEL_MODE_OPTIONS,onSelect:handleModelModeSelection})]});if(stage.kind==="manage")return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),stage.statusMessage?(0,import_jsx_runtime49.jsx)(ThemedText,{color:"warning",children:stage.statusMessage}):null,(0,import_jsx_runtime49.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",options:MANAGE_ACTION_OPTIONS,onSelect:value=>handleManageSelection(stage.modelMode,value)})]});if(stage.kind==="choose-profile")return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),(0,import_jsx_runtime49.jsx)(PromptSelect,{question:getChooseProfileQuestion(stage.action),options:profileOptions,onSelect:profileId=>handleProfileSelection(stage.modelMode,stage.action,profileId)})]});if(stage.kind==="confirm-delete"){let selectedProfileIndex=profiles.findIndex(profile=>profile.id===stage.profile.id);return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel("delete")}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:getChooseProfileQuestion("delete"),answer:getProfileOptionLabel(stage.profile,selectedProfileIndex)}),(0,import_jsx_runtime49.jsx)(YesNoPrompt,{question:`\u786E\u8BA4\u5220\u9664\u914D\u7F6E ${stage.profile.name}\uFF1F`,onSelect:confirmDelete})]})}if(stage.kind==="edit"){let currentField=EDIT_FIELDS[stage.fieldIndex]??"name",selectedProfileIndex=stage.originalProfile?profiles.findIndex(profile=>profile.id===stage.originalProfile?.id):-1;return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),stage.originalProfile?(0,import_jsx_runtime49.jsx)(CompletedLine,{question:getChooseProfileQuestion(stage.action==="add"?"edit":stage.action),answer:getProfileOptionLabel(stage.originalProfile,selectedProfileIndex)}):null,(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[getEditTitle(stage.action),"\uFF1A",stage.originalProfile?.name??stage.draft.name]}),renderCompletedFields(stage.draft,stage.fieldIndex),stage.errorMessage?(0,import_jsx_runtime49.jsx)(ThemedText,{color:"error",children:stage.errorMessage}):null,(0,import_jsx_runtime49.jsx)(PromptTextInput,{label:FIELD_LABELS[currentField],value:stage.draft[currentField],onChange:value=>updateDraftField(currentField,value),onSubmit:submitDraftField},currentField)]})}return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[stage.lines.map(line=>(0,import_jsx_runtime49.jsx)(ThemedText,{children:line},line)),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(ReturnMainPrompt,{onSelect:handleReturnMain})]})}var import_react43,import_jsx_runtime49,API_MODE_OPTIONS,MODEL_MODE_OPTIONS,MANAGE_ACTION_OPTIONS,EDIT_FIELDS,FIELD_LABELS,init_ProviderConfigManager=__esm({"src/components/ProviderConfigManager.tsx"(){init_figures();import_react43=__toESM(require_react());init_TextInput();init_ink2();init_ccjkProviderConfig();init_providerCredentials();init_providerModes();init_providerProfiles();import_jsx_runtime49=__toESM(require_jsx_runtime()),API_MODE_OPTIONS=[{label:"\u4F7F\u7528\u5B98\u65B9\u767B\u5F55",value:"official"},{label:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E",value:"custom"},{label:"\u4F7F\u7528 CCR \u4EE3\u7406",value:"ccr"},{label:"\u8DF3\u8FC7\uFF08\u7A0D\u540E\u624B\u52A8\u914D\u7F6E\uFF09",value:"skip"}],MODEL_MODE_OPTIONS=[{label:"OpenAI / GPT \u6A21\u578B\uFF08GPT-5.x\u3001Codex\uFF09",value:"openai_native"},{label:"Claude \u6A21\u578B\uFF08Anthropic / Claude \u517C\u5BB9\uFF09",value:"anthropic_native"},{label:"\u6DF7\u5408\u6A21\u578B\uFF08OpenAI + Claude \u5206\u69FD\uFF09",value:"hybrid_compatible"}],MANAGE_ACTION_OPTIONS=[{label:"1. \u6DFB\u52A0\u914D\u7F6E",value:"add"},{label:"2. \u7F16\u8F91\u914D\u7F6E",value:"edit"},{label:"3. \u590D\u5236\u914D\u7F6E",value:"copy"},{label:"4. \u5220\u9664\u914D\u7F6E",value:"delete"},{label:"5. \u8DF3\u8FC7",value:"skip"}],EDIT_FIELDS=["name","baseUrl","apiKey","primaryModel","defaultHaikuModel","defaultSonnetModel","defaultOpusModel"],FIELD_LABELS={name:"\u914D\u7F6E\u540D\u79F0\uFF08\u4EC5\u9650\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7A7A\u683C\u3001._-\uFF09",baseUrl:"\u8BF7\u8F93\u5165API\u57FA\u7840URL",apiKey:"\u8BF7\u8F93\u5165API\u5BC6\u94A5",primaryModel:"\u4E3B\u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09",defaultHaikuModel:"Haiku \u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09",defaultSonnetModel:"Sonnet \u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09",defaultOpusModel:"Opus \u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09"};__name(getAuthTypeLabel,"getAuthTypeLabel");__name(getManageActionLabel,"getManageActionLabel");__name(getModelModeOptionLabel,"getModelModeOptionLabel");__name(getChooseProfileQuestion,"getChooseProfileQuestion");__name(getProfileOptionLabel,"getProfileOptionLabel");__name(getProviderProfileKey,"getProviderProfileKey");__name(getCcjkProfileFromProviderProfile,"getCcjkProfileFromProviderProfile");__name(loadManagerProfiles,"loadManagerProfiles");__name(getManagerProfileModelMode,"getManagerProfileModelMode");__name(createDraft,"createDraft");__name(createCopyDraft,"createCopyDraft");__name(normalizeProfileId,"normalizeProfileId");__name(createUniqueProfileId,"createUniqueProfileId");__name(validateDraft,"validateDraft");__name(getEditFieldForModeSlot,"getEditFieldForModeSlot");__name(getDefaultValueForEditField,"getDefaultValueForEditField");__name(resolveDraftAuthType,"resolveDraftAuthType");__name(createProviderProfileFromDraft,"createProviderProfileFromDraft");__name(saveDraft,"saveDraft");__name(deleteManagerProfile,"deleteManagerProfile");__name(PromptSelect,"PromptSelect");__name(PromptTextInput,"PromptTextInput");__name(ReturnMainPrompt,"ReturnMainPrompt");__name(YesNoPrompt,"YesNoPrompt");__name(CompletedLine,"CompletedLine");__name(ManagerHeader,"ManagerHeader");__name(renderCompletedFields,"renderCompletedFields");__name(getEditTitle,"getEditTitle");__name(createReturnStage,"createReturnStage");__name(ProviderConfigManager,"ProviderConfigManager")}});function useMainLoopModel(){let mainLoopModel=useAppState(s2=>s2.mainLoopModel),mainLoopModelForSession=useAppState(s2=>s2.mainLoopModelForSession),[,forceRerender]=(0,import_react44.useReducer)(x3=>x3+1,0);return(0,import_react44.useEffect)(()=>onGrowthBookRefresh(forceRerender),[]),parseUserSpecifiedModel(mainLoopModelForSession??mainLoopModel??getDefaultMainLoopModelSetting())}var import_react44,init_useMainLoopModel=__esm({"src/hooks/useMainLoopModel.ts"(){import_react44=__toESM(require_react());init_growthbook();init_AppState();init_model();__name(useMainLoopModel,"useMainLoopModel")}});var trustedDevice_exports={};__export(trustedDevice_exports,{clearTrustedDeviceToken:()=>clearTrustedDeviceToken,clearTrustedDeviceTokenCache:()=>clearTrustedDeviceTokenCache,enrollTrustedDevice:()=>enrollTrustedDevice,getTrustedDeviceToken:()=>getTrustedDeviceToken});import{hostname as hostname2}from"os";function isGateEnabled(){return getFeatureValue_CACHED_MAY_BE_STALE(TRUSTED_DEVICE_GATE,!1)}function getTrustedDeviceToken(){if(isGateEnabled())return readStoredToken()}function clearTrustedDeviceTokenCache(){readStoredToken.cache?.clear?.()}function clearTrustedDeviceToken(){if(!isGateEnabled())return;let secureStorage=getSecureStorage();try{let data=secureStorage.read();data?.trustedDeviceToken&&(delete data.trustedDeviceToken,secureStorage.update(data))}catch{}readStoredToken.cache?.clear?.()}async function enrollTrustedDevice(){try{if(!await checkGate_CACHED_OR_BLOCKING(TRUSTED_DEVICE_GATE)){logForDebugging(`[trusted-device] Gate ${TRUSTED_DEVICE_GATE} is off, skipping enrollment`);return}if(process.env.CLAUDE_TRUSTED_DEVICE_TOKEN){logForDebugging("[trusted-device] CLAUDE_TRUSTED_DEVICE_TOKEN env var is set, skipping enrollment (env var takes precedence)");return}let{getClaudeAIOAuthTokens:getClaudeAIOAuthTokens3}=(init_auth(),__toCommonJS(auth_exports)),accessToken=getClaudeAIOAuthTokens3()?.accessToken;if(!accessToken){logForDebugging("[trusted-device] No OAuth token, skipping enrollment");return}let secureStorage=getSecureStorage();if(isEssentialTrafficOnly()){logForDebugging("[trusted-device] Essential traffic only, skipping enrollment");return}let baseUrl=getOauthConfig().BASE_API_URL,response;try{response=await axios_default.post(`${baseUrl}/api/auth/trusted_devices`,{display_name:`Clavue on ${hostname2()} \xB7 ${process.platform}`},{headers:{Authorization:`Bearer ${accessToken}`,"Content-Type":"application/json"},timeout:1e4,validateStatus:__name(s2=>s2<500,"validateStatus")})}catch(err2){logForDebugging(`[trusted-device] Enrollment request failed: ${errorMessage(err2)}`);return}if(response.status!==200&&response.status!==201){logForDebugging(`[trusted-device] Enrollment failed ${response.status}: ${jsonStringify(response.data).slice(0,200)}`);return}let token=response.data?.device_token;if(!token||typeof token!="string"){logForDebugging("[trusted-device] Enrollment response missing device_token field");return}try{let storageData=secureStorage.read();if(!storageData){logForDebugging("[trusted-device] Cannot read storage, skipping token persist");return}storageData.trustedDeviceToken=token;let result2=secureStorage.update(storageData);if(!result2.success){logForDebugging(`[trusted-device] Failed to persist token: ${result2.warning??"unknown"}`);return}readStoredToken.cache?.clear?.(),logForDebugging(`[trusted-device] Enrolled device_id=${response.data.device_id??"unknown"}`)}catch(err2){logForDebugging(`[trusted-device] Storage write failed: ${errorMessage(err2)}`)}}catch(err2){logForDebugging(`[trusted-device] Enrollment error: ${errorMessage(err2)}`)}}var TRUSTED_DEVICE_GATE,readStoredToken,init_trustedDevice=__esm({"src/bridge/trustedDevice.ts"(){init_axios2();init_memoize();init_oauth();init_growthbook();init_debug();init_errors2();init_privacyLevel();init_secureStorage();init_slowOperations();TRUSTED_DEVICE_GATE="tengu_sessions_elevated_auth_enforcement";__name(isGateEnabled,"isGateEnabled");readStoredToken=memoize_default(()=>{let envToken=process.env.CLAUDE_TRUSTED_DEVICE_TOKEN;return envToken||getSecureStorage().read()?.trustedDeviceToken});__name(getTrustedDeviceToken,"getTrustedDeviceToken");__name(clearTrustedDeviceTokenCache,"clearTrustedDeviceTokenCache");__name(clearTrustedDeviceToken,"clearTrustedDeviceToken");__name(enrollTrustedDevice,"enrollTrustedDevice")}});var PolicyLimitsResponseSchema,init_types7=__esm({"src/services/policyLimits/types.ts"(){init_v4();init_lazySchema();PolicyLimitsResponseSchema=lazySchema(()=>external_exports.object({restrictions:external_exports.record(external_exports.string(),external_exports.object({allowed:external_exports.boolean()}))}))}});import{createHash as createHash10}from"crypto";import{readFileSync as fsReadFileSync}from"fs";import{unlink as unlink5,writeFile as writeFile9}from"fs/promises";import{join as join57}from"path";function isNodeError(e2){return e2 instanceof Error}function initializePolicyLimitsLoadingPromise(){loadingCompletePromise||isPolicyLimitsEligible()&&(loadingCompletePromise=new Promise(resolve44=>{loadingCompleteResolve=resolve44,setTimeout(()=>{loadingCompleteResolve&&(logForDebugging("Policy limits: Loading promise timed out, resolving anyway"),loadingCompleteResolve(),loadingCompleteResolve=null)},LOADING_PROMISE_TIMEOUT_MS)}))}function getCachePath2(){return join57(getClaudeConfigHomeDir(),CACHE_FILENAME)}function getPolicyLimitsEndpoint(){return`${getOauthConfig().BASE_API_URL}/api/claude_code/policy_limits`}function sortKeysDeep(obj){if(Array.isArray(obj))return obj.map(sortKeysDeep);if(obj!==null&&typeof obj=="object"){let sorted={};for(let[key,value]of Object.entries(obj).sort(([a2],[b3])=>a2.localeCompare(b3)))sorted[key]=sortKeysDeep(value);return sorted}return obj}function computeChecksum(restrictions){let sorted=sortKeysDeep(restrictions),normalized=jsonStringify(sorted);return`sha256:${createHash10("sha256").update(normalized).digest("hex")}`}function isPolicyLimitsEligible(){if(getAPIProvider()!=="firstParty"||!isFirstPartyAnthropicBaseUrl())return!1;try{let{key:apiKey}=getAnthropicApiKeyWithSource({skipRetrievingKeyFromApiKeyHelper:!0});if(apiKey)return!0}catch{}let tokens=getClaudeAIOAuthTokens2();return!(!tokens?.accessToken||!tokens.scopes?.includes(CLAUDE_AI_INFERENCE_SCOPE)||tokens.subscriptionType!=="enterprise"&&tokens.subscriptionType!=="team")}async function waitForPolicyLimitsToLoad(){loadingCompletePromise&&await loadingCompletePromise}function getAuthHeaders2(){try{let{key:apiKey}=getAnthropicApiKeyWithSource({skipRetrievingKeyFromApiKeyHelper:!0});if(apiKey)return{headers:{"x-api-key":apiKey}}}catch{}let oauthTokens=getClaudeAIOAuthTokens2();return oauthTokens?.accessToken?{headers:{Authorization:`Bearer ${oauthTokens.accessToken}`,"anthropic-beta":OAUTH_BETA_HEADER}}:{headers:{},error:"No authentication available"}}async function fetchWithRetry(cachedChecksum){let lastResult2=null;for(let attempt2=1;attempt2<=DEFAULT_MAX_RETRIES2+1;attempt2++){if(lastResult2=await fetchPolicyLimits(cachedChecksum),lastResult2.success||lastResult2.skipRetry||attempt2>DEFAULT_MAX_RETRIES2)return lastResult2;let delayMs=getRetryDelay(attempt2);logForDebugging(`Policy limits: Retry ${attempt2}/${DEFAULT_MAX_RETRIES2} after ${delayMs}ms`),await sleep2(delayMs)}return lastResult2}async function fetchPolicyLimits(cachedChecksum){try{await checkAndRefreshOAuthTokenIfNeeded();let authHeaders=getAuthHeaders2();if(authHeaders.error)return{success:!1,error:"Authentication required for policy limits",skipRetry:!0};let endpoint=getPolicyLimitsEndpoint(),headers={...authHeaders.headers,"User-Agent":getClaudeCodeUserAgent()};cachedChecksum&&(headers["If-None-Match"]=`"${cachedChecksum}"`);let response=await axios_default.get(endpoint,{headers,timeout:FETCH_TIMEOUT_MS2,validateStatus:__name(status2=>status2===200||status2===304||status2===404,"validateStatus")});if(response.status===304)return logForDebugging("Policy limits: Using cached restrictions (304)"),{success:!0,restrictions:null,etag:cachedChecksum};if(response.status===404)return logForDebugging("Policy limits: No restrictions found (404)"),{success:!0,restrictions:{},etag:void 0};let parsed=PolicyLimitsResponseSchema().safeParse(response.data);return parsed.success?(logForDebugging("Policy limits: Fetched successfully"),{success:!0,restrictions:parsed.data.restrictions}):(logForDebugging(`Policy limits: Invalid response format - ${parsed.error.message}`),{success:!1,error:"Invalid policy limits format"})}catch(error40){let{kind,message}=classifyAxiosError(error40);switch(kind){case"auth":return{success:!1,error:"Not authorized for policy limits",skipRetry:!0};case"timeout":return{success:!1,error:"Policy limits request timeout"};case"network":return{success:!1,error:"Cannot connect to server"};default:return{success:!1,error:message}}}}function loadCachedRestrictions(){try{let content=fsReadFileSync(getCachePath2(),"utf-8"),data=safeParseJSON(content,!1),parsed=PolicyLimitsResponseSchema().safeParse(data);return parsed.success?parsed.data.restrictions:null}catch{return null}}async function saveCachedRestrictions(restrictions){try{let path25=getCachePath2();await writeFile9(path25,jsonStringify({restrictions},null,2),{encoding:"utf-8",mode:384}),logForDebugging(`Policy limits: Saved to ${path25}`)}catch(error40){logForDebugging(`Policy limits: Failed to save - ${error40 instanceof Error?error40.message:"unknown error"}`)}}async function fetchAndLoadPolicyLimits(){if(!isPolicyLimitsEligible())return null;let cachedRestrictions=loadCachedRestrictions(),cachedChecksum=cachedRestrictions?computeChecksum(cachedRestrictions):void 0;try{let result2=await fetchWithRetry(cachedChecksum);if(!result2.success)return cachedRestrictions?(logForDebugging("Policy limits: Using stale cache after fetch failure"),sessionCache2=cachedRestrictions,cachedRestrictions):null;if(result2.restrictions===null&&cachedRestrictions)return logForDebugging("Policy limits: Cache still valid (304 Not Modified)"),sessionCache2=cachedRestrictions,cachedRestrictions;let newRestrictions=result2.restrictions||{};if(Object.keys(newRestrictions).length>0)return sessionCache2=newRestrictions,await saveCachedRestrictions(newRestrictions),logForDebugging("Policy limits: Applied new restrictions successfully"),newRestrictions;sessionCache2=newRestrictions;try{await unlink5(getCachePath2()),logForDebugging("Policy limits: Deleted cached file (404 response)")}catch(e2){isNodeError(e2)&&e2.code!=="ENOENT"&&logForDebugging(`Policy limits: Failed to delete cached file - ${e2.message}`)}return newRestrictions}catch{return cachedRestrictions?(logForDebugging("Policy limits: Using stale cache after error"),sessionCache2=cachedRestrictions,cachedRestrictions):null}}function isPolicyAllowed(policy){let restrictions=getRestrictionsFromCache();if(!restrictions)return!(isEssentialTrafficOnly()&&ESSENTIAL_TRAFFIC_DENY_ON_MISS.has(policy));let restriction=restrictions[policy];return restriction?restriction.allowed:!0}function isPolicyAllowedForCommandFiltering(policy){let restrictions=sessionCache2??loadCachedRestrictions();if(!restrictions)return!(isEssentialTrafficOnly()&&ESSENTIAL_TRAFFIC_DENY_ON_MISS.has(policy));let restriction=restrictions[policy];return restriction?restriction.allowed:!0}function getRestrictionsFromCache(){if(!isPolicyLimitsEligible())return null;if(sessionCache2)return sessionCache2;let cachedRestrictions=loadCachedRestrictions();return cachedRestrictions?(sessionCache2=cachedRestrictions,cachedRestrictions):null}async function loadPolicyLimits(){isPolicyLimitsEligible()&&!loadingCompletePromise&&(loadingCompletePromise=new Promise(resolve44=>{loadingCompleteResolve=resolve44}));try{await fetchAndLoadPolicyLimits(),isPolicyLimitsEligible()&&startBackgroundPolling()}finally{loadingCompleteResolve&&(loadingCompleteResolve(),loadingCompleteResolve=null)}}async function refreshPolicyLimits(){await clearPolicyLimitsCache(),isPolicyLimitsEligible()&&(await fetchAndLoadPolicyLimits(),logForDebugging("Policy limits: Refreshed after auth change"))}async function clearPolicyLimitsCache(){stopBackgroundPolling(),sessionCache2=null,loadingCompletePromise=null,loadingCompleteResolve=null;try{await unlink5(getCachePath2())}catch{}}async function pollPolicyLimits(){if(!isPolicyLimitsEligible())return;let previousCache=sessionCache2?jsonStringify(sessionCache2):null;try{await fetchAndLoadPolicyLimits(),(sessionCache2?jsonStringify(sessionCache2):null)!==previousCache&&logForDebugging("Policy limits: Changed during background poll")}catch{}}function startBackgroundPolling(){pollingIntervalId===null&&isPolicyLimitsEligible()&&(pollingIntervalId=setInterval(()=>{pollPolicyLimits()},POLLING_INTERVAL_MS),pollingIntervalId.unref(),cleanupRegistered||(cleanupRegistered=!0,registerCleanup(async()=>stopBackgroundPolling())))}function stopBackgroundPolling(){pollingIntervalId!==null&&(clearInterval(pollingIntervalId),pollingIntervalId=null)}var CACHE_FILENAME,FETCH_TIMEOUT_MS2,DEFAULT_MAX_RETRIES2,POLLING_INTERVAL_MS,pollingIntervalId,cleanupRegistered,loadingCompletePromise,loadingCompleteResolve,LOADING_PROMISE_TIMEOUT_MS,sessionCache2,ESSENTIAL_TRAFFIC_DENY_ON_MISS,init_policyLimits=__esm({"src/services/policyLimits/index.ts"(){init_axios2();init_oauth();init_auth();init_cleanupRegistry();init_debug();init_envUtils();init_errors2();init_json();init_providers();init_privacyLevel();init_sleep2();init_slowOperations();init_userAgent();init_withRetry();init_types7();__name(isNodeError,"isNodeError");CACHE_FILENAME="policy-limits.json",FETCH_TIMEOUT_MS2=1e4,DEFAULT_MAX_RETRIES2=5,POLLING_INTERVAL_MS=3600*1e3,pollingIntervalId=null,cleanupRegistered=!1,loadingCompletePromise=null,loadingCompleteResolve=null,LOADING_PROMISE_TIMEOUT_MS=3e4,sessionCache2=null;__name(initializePolicyLimitsLoadingPromise,"initializePolicyLimitsLoadingPromise");__name(getCachePath2,"getCachePath");__name(getPolicyLimitsEndpoint,"getPolicyLimitsEndpoint");__name(sortKeysDeep,"sortKeysDeep");__name(computeChecksum,"computeChecksum");__name(isPolicyLimitsEligible,"isPolicyLimitsEligible");__name(waitForPolicyLimitsToLoad,"waitForPolicyLimitsToLoad");__name(getAuthHeaders2,"getAuthHeaders");__name(fetchWithRetry,"fetchWithRetry");__name(fetchPolicyLimits,"fetchPolicyLimits");__name(loadCachedRestrictions,"loadCachedRestrictions");__name(saveCachedRestrictions,"saveCachedRestrictions");__name(fetchAndLoadPolicyLimits,"fetchAndLoadPolicyLimits");ESSENTIAL_TRAFFIC_DENY_ON_MISS=new Set(["allow_product_feedback"]);__name(isPolicyAllowed,"isPolicyAllowed");__name(isPolicyAllowedForCommandFiltering,"isPolicyAllowedForCommandFiltering");__name(getRestrictionsFromCache,"getRestrictionsFromCache");__name(loadPolicyLimits,"loadPolicyLimits");__name(refreshPolicyLimits,"refreshPolicyLimits");__name(clearPolicyLimitsCache,"clearPolicyLimitsCache");__name(pollPolicyLimits,"pollPolicyLimits");__name(startBackgroundPolling,"startBackgroundPolling");__name(stopBackgroundPolling,"stopBackgroundPolling")}});function buildMacClipboardImageJxa(mode,outputPath=""){let script=["ObjC.import('AppKit')","const pasteboard = $.NSPasteboard.generalPasteboard","const image = $.NSImage.alloc.initWithPasteboard(pasteboard)","if (!image) { throw new Error('NO_IMAGE') }"];if(mode==="check")return script;if(mode!=="save")throw new Error(`Unsupported macOS clipboard image mode: ${mode}`);return[...script,"const tiffData = image.TIFFRepresentation","if (!tiffData) { throw new Error('NO_TIFF_REPRESENTATION') }","const bitmap = $.NSBitmapImageRep.imageRepWithData(tiffData)","if (!bitmap) { throw new Error('NO_BITMAP_REP') }","const pngData = bitmap.representationUsingTypeProperties($.NSBitmapImageFileTypePNG, $.NSDictionary.dictionary)","if (!pngData) { throw new Error('NO_PNG_DATA') }",`const outputPath = ${JSON.stringify(outputPath)}`,"const wrote = pngData.writeToFileAtomically($(outputPath), true)","if (!wrote) { throw new Error('WRITE_FAILED') }"]}var init_imagePasteDarwin=__esm({"src/utils/imagePasteDarwin.ts"(){__name(buildMacClipboardImageJxa,"buildMacClipboardImageJxa")}});import{randomBytes as randomBytes6}from"crypto";import{basename as basename13,extname as extname7,isAbsolute as isAbsolute12,join as join58}from"path";async function runMacClipboardImageScript(mode,screenshotPath){let args=["-l","JavaScript"];for(let line of buildMacClipboardImageJxa(mode,screenshotPath))args.push("-e",line);return(await execa("osascript",args,{reject:!1})).exitCode===0}function getClipboardCommands(){let platform6=process.platform,baseTmpDir=process.env.CLAUDE_CODE_TMPDIR||(platform6==="win32"?process.env.TEMP||"C:\\Temp":"/tmp"),screenshotFilename="claude_cli_latest_screenshot.png",tempPaths={darwin:join58(baseTmpDir,screenshotFilename),linux:join58(baseTmpDir,screenshotFilename),win32:join58(baseTmpDir,screenshotFilename)},screenshotPath=tempPaths[platform6]||tempPaths.linux,commands={darwin:{checkImage:"osascript -e 'the clipboard as \xABclass PNGf\xBB'",saveImage:`osascript -e 'set png_data to (the clipboard as \xABclass PNGf\xBB)' -e 'set fp to open for access POSIX file "${screenshotPath}" with write permission' -e 'write png_data to fp' -e 'close access fp'`,getPath:"osascript -e 'get POSIX path of (the clipboard as \xABclass furl\xBB)'",deleteFile:`rm -f "${screenshotPath}"`},linux:{checkImage:'xclip -selection clipboard -t TARGETS -o 2>/dev/null | grep -E "image/(png|jpeg|jpg|gif|webp|bmp)" || wl-paste -l 2>/dev/null | grep -E "image/(png|jpeg|jpg|gif|webp|bmp)"',saveImage:`xclip -selection clipboard -t image/png -o > "${screenshotPath}" 2>/dev/null || wl-paste --type image/png > "${screenshotPath}" 2>/dev/null || xclip -selection clipboard -t image/bmp -o > "${screenshotPath}" 2>/dev/null || wl-paste --type image/bmp > "${screenshotPath}"`,getPath:"xclip -selection clipboard -t text/plain -o 2>/dev/null || wl-paste 2>/dev/null",deleteFile:`rm -f "${screenshotPath}"`},win32:{checkImage:'powershell -NoProfile -Command "(Get-Clipboard -Format Image) -ne $null"',saveImage:`powershell -NoProfile -Command "$img = Get-Clipboard -Format Image; if ($img) { $img.Save('${screenshotPath.replace(/\\/g,"\\\\")}', [System.Drawing.Imaging.ImageFormat]::Png) }"`,getPath:'powershell -NoProfile -Command "Get-Clipboard"',deleteFile:`del /f "${screenshotPath}"`}};return{commands:commands[platform6]||commands.linux,screenshotPath}}async function hasImageInClipboard(){if(process.platform==="darwin"){try{if(await runMacClipboardImageScript("check"))return!0}catch(e2){logError2(e2)}return(await execFileNoThrowWithCwd("osascript",["-e","the clipboard as \xABclass PNGf\xBB"])).code===0}let{commands}=getClipboardCommands();return(await execa(commands.checkImage,{shell:!0,reject:!1})).exitCode===0}async function getImageFromClipboard(){let{commands,screenshotPath}=getClipboardCommands();try{let savedImage=!1;if(process.platform==="darwin"){try{savedImage=await runMacClipboardImageScript("save",screenshotPath)}catch(e2){logError2(e2)}if(!savedImage){if((await execa(commands.checkImage,{shell:!0,reject:!1})).exitCode!==0||(await execa(commands.saveImage,{shell:!0,reject:!1})).exitCode!==0)return null;savedImage=!0}}else{if((await execa(commands.checkImage,{shell:!0,reject:!1})).exitCode!==0||(await execa(commands.saveImage,{shell:!0,reject:!1})).exitCode!==0)return null;savedImage=!0}if(!savedImage)return null;let imageBuffer=getFsImplementation().readFileBytesSync(screenshotPath);imageBuffer.length>=2&&imageBuffer[0]===66&&imageBuffer[1]===77&&(imageBuffer=await(await getImageProcessor())(imageBuffer).png().toBuffer());let resized=await maybeResizeAndDownsampleImageBuffer(imageBuffer,imageBuffer.length,"png"),base64Image=resized.buffer.toString("base64"),mediaType=detectImageFormatFromBase64(base64Image);return execa(commands.deleteFile,{shell:!0,reject:!1}),{base64:base64Image,mediaType,dimensions:resized.dimensions}}catch{return null}}async function getImagePathFromClipboard(){let{commands}=getClipboardCommands();try{let result2=await execa(commands.getPath,{shell:!0,reject:!1});return result2.exitCode!==0||!result2.stdout?null:result2.stdout.trim()}catch(e2){return logError2(e2),null}}function removeOuterQuotes(text){return text.startsWith('"')&&text.endsWith('"')||text.startsWith("'")&&text.endsWith("'")?text.slice(1,-1):text}function stripBackslashEscapes(path25){if(process.platform==="win32")return path25;let placeholder=`__DOUBLE_BACKSLASH_${randomBytes6(8).toString("hex")}__`;return path25.replace(/\\\\/g,placeholder).replace(/\\(.)/g,"$1").replace(new RegExp(placeholder,"g"),"\\")}function isImageFilePath(text){let cleaned=removeOuterQuotes(text.trim()),unescaped=stripBackslashEscapes(cleaned);return IMAGE_EXTENSION_REGEX.test(unescaped)}function asImageFilePath(text){let cleaned=removeOuterQuotes(text.trim()),unescaped=stripBackslashEscapes(cleaned);return IMAGE_EXTENSION_REGEX.test(unescaped)?unescaped:null}async function tryReadImageFromPath(text){let cleanedPath=asImageFilePath(text);if(!cleanedPath)return null;let imagePath=cleanedPath,imageBuffer;try{if(isAbsolute12(imagePath))imageBuffer=getFsImplementation().readFileBytesSync(imagePath);else{let clipboardPath=await getImagePathFromClipboard();clipboardPath&&imagePath===basename13(clipboardPath)&&(imageBuffer=getFsImplementation().readFileBytesSync(clipboardPath))}}catch(e2){return logError2(e2),null}if(!imageBuffer)return null;if(imageBuffer.length===0)return logForDebugging(`Image file is empty: ${imagePath}`,{level:"warn"}),null;imageBuffer.length>=2&&imageBuffer[0]===66&&imageBuffer[1]===77&&(imageBuffer=await(await getImageProcessor())(imageBuffer).png().toBuffer());let ext=extname7(imagePath).slice(1).toLowerCase()||"png",resized=await maybeResizeAndDownsampleImageBuffer(imageBuffer,imageBuffer.length,ext),base64Image=resized.buffer.toString("base64"),mediaType=detectImageFormatFromBase64(base64Image);return{path:imagePath,base64:base64Image,mediaType,dimensions:resized.dimensions}}var PASTE_THRESHOLD,IMAGE_EXTENSION_REGEX,init_imagePaste=__esm({"src/utils/imagePaste.ts"(){init_execa();init_apiLimits();init_growthbook();init_imageProcessor();init_debug();init_imagePasteDarwin();init_execFileNoThrow();init_fsOperations();init_imageResizer();init_log3();PASTE_THRESHOLD=800;__name(runMacClipboardImageScript,"runMacClipboardImageScript");__name(getClipboardCommands,"getClipboardCommands");__name(hasImageInClipboard,"hasImageInClipboard");__name(getImageFromClipboard,"getImageFromClipboard");__name(getImagePathFromClipboard,"getImagePathFromClipboard");IMAGE_EXTENSION_REGEX=/\.(png|jpe?g|gif|webp)$/i;__name(removeOuterQuotes,"removeOuterQuotes");__name(stripBackslashEscapes,"stripBackslashEscapes");__name(isImageFilePath,"isImageFilePath");__name(asImageFilePath,"asImageFilePath");__name(tryReadImageFromPath,"tryReadImageFromPath")}});import{mkdir as mkdir11,open as open6}from"fs/promises";import{join as join59}from"path";function getImageStoreDir(){return join59(getClaudeConfigHomeDir(),IMAGE_STORE_DIR,getSessionId())}async function ensureImageStoreDir(){let dir=getImageStoreDir();await mkdir11(dir,{recursive:!0})}function getImagePath(imageId,mediaType){let extension2=mediaType.split("/")[1]||"png";return join59(getImageStoreDir(),`${imageId}.${extension2}`)}function cacheImagePath(content){if(content.type!=="image")return null;let imagePath=getImagePath(content.id,content.mediaType||"image/png");return evictOldestIfAtCap(),storedImagePaths.set(content.id,imagePath),imagePath}async function storeImage(content){if(content.type!=="image")return null;try{await ensureImageStoreDir();let imagePath=getImagePath(content.id,content.mediaType||"image/png"),fh=await open6(imagePath,"w",384);try{await fh.writeFile(content.content,{encoding:"base64"}),await fh.datasync()}finally{await fh.close()}return evictOldestIfAtCap(),storedImagePaths.set(content.id,imagePath),logForDebugging(`Stored image ${content.id} to ${imagePath}`),imagePath}catch(error40){return logForDebugging(`Failed to store image: ${error40}`),null}}async function storeImages(pastedContents){let pathMap=new Map;for(let[id,content]of Object.entries(pastedContents))if(content.type==="image"){let path25=await storeImage(content);path25&&pathMap.set(Number(id),path25)}return pathMap}function getStoredImagePath(imageId){return storedImagePaths.get(imageId)??null}function clearStoredImagePaths(){storedImagePaths.clear()}function evictOldestIfAtCap(){for(;storedImagePaths.size>=MAX_STORED_IMAGE_PATHS;){let oldest=storedImagePaths.keys().next().value;if(oldest!==void 0)storedImagePaths.delete(oldest);else break}}async function cleanupOldImageCaches(){let fsImpl=getFsImplementation(),baseDir=join59(getClaudeConfigHomeDir(),IMAGE_STORE_DIR),currentSessionId=getSessionId();try{let sessionDirs;try{sessionDirs=await fsImpl.readdir(baseDir)}catch{return}for(let sessionDir of sessionDirs){if(sessionDir.name===currentSessionId)continue;let sessionPath=join59(baseDir,sessionDir.name);try{await fsImpl.rm(sessionPath,{recursive:!0,force:!0}),logForDebugging(`Cleaned up old image cache: ${sessionPath}`)}catch{}}try{(await fsImpl.readdir(baseDir)).length===0&&await fsImpl.rmdir(baseDir)}catch{}}catch{}}var IMAGE_STORE_DIR,MAX_STORED_IMAGE_PATHS,storedImagePaths,init_imageStore=__esm({"src/utils/imageStore.ts"(){init_state();init_debug();init_envUtils();init_fsOperations();IMAGE_STORE_DIR="image-cache",MAX_STORED_IMAGE_PATHS=200,storedImagePaths=new Map;__name(getImageStoreDir,"getImageStoreDir");__name(ensureImageStoreDir,"ensureImageStoreDir");__name(getImagePath,"getImagePath");__name(cacheImagePath,"cacheImagePath");__name(storeImage,"storeImage");__name(storeImages,"storeImages");__name(getStoredImagePath,"getStoredImagePath");__name(clearStoredImagePaths,"clearStoredImagePaths");__name(evictOldestIfAtCap,"evictOldestIfAtCap");__name(cleanupOldImageCaches,"cleanupOldImageCaches")}});import{pathToFileURL}from"url";function ClickableImageRef({imageId,backgroundColor,isSelected=!1}){let imagePath=getStoredImagePath(imageId),displayText=`[Image #${imageId}]`;if(imagePath&&supportsHyperlinks2()){let fileUrl=pathToFileURL(imagePath).href;return(0,import_jsx_runtime50.jsx)(Link,{url:fileUrl,fallback:(0,import_jsx_runtime50.jsx)(ThemedText,{backgroundColor,inverse:isSelected,children:displayText}),children:(0,import_jsx_runtime50.jsx)(ThemedText,{backgroundColor,inverse:isSelected,bold:isSelected,children:displayText})})}return(0,import_jsx_runtime50.jsx)(ThemedText,{backgroundColor,inverse:isSelected,children:displayText})}var import_jsx_runtime50,init_ClickableImageRef=__esm({"src/components/ClickableImageRef.tsx"(){init_Link();init_supports_hyperlinks2();init_ink2();init_imageStore();import_jsx_runtime50=__toESM(require_jsx_runtime());__name(ClickableImageRef,"ClickableImageRef")}});function useDeclaredCursor({line,column,active}){let setCursorDeclaration=(0,import_react45.useContext)(CursorDeclarationContext_default),nodeRef=(0,import_react45.useRef)(null),setNode=(0,import_react45.useCallback)(node=>{nodeRef.current=node},[]);return(0,import_react45.useLayoutEffect)(()=>{let node=nodeRef.current;active&&node?setCursorDeclaration({relativeX:column,relativeY:line,node}):setCursorDeclaration(null,node)}),(0,import_react45.useLayoutEffect)(()=>()=>{setCursorDeclaration(null,nodeRef.current)},[setCursorDeclaration]),setNode}var import_react45,init_use_declared_cursor=__esm({"src/ink/hooks/use-declared-cursor.ts"(){import_react45=__toESM(require_react());init_CursorDeclarationContext();__name(useDeclaredCursor,"useDeclaredCursor")}});function ListItem({isFocused,isSelected=!1,children,description,showScrollDown,showScrollUp,styled=!0,disabled=!1,declareCursor}){function renderIndicator(){return disabled?(0,import_jsx_runtime51.jsx)(ThemedText,{children:" "}):isFocused?(0,import_jsx_runtime51.jsx)(ThemedText,{color:"suggestion",children:figures_default.pointer}):showScrollDown?(0,import_jsx_runtime51.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowDown}):showScrollUp?(0,import_jsx_runtime51.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowUp}):(0,import_jsx_runtime51.jsx)(ThemedText,{children:" "})}__name(renderIndicator,"renderIndicator");function getTextColor(){if(disabled)return"inactive";if(styled){if(isSelected)return"success";if(isFocused)return"suggestion"}}__name(getTextColor,"getTextColor");let textColor=getTextColor(),cursorRef=useDeclaredCursor({line:0,column:0,active:isFocused&&!disabled&&declareCursor!==!1});return(0,import_jsx_runtime51.jsxs)(ThemedBox_default,{ref:cursorRef,flexDirection:"column",children:[(0,import_jsx_runtime51.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[renderIndicator(),styled?(0,import_jsx_runtime51.jsx)(ThemedText,{color:textColor,dimColor:disabled,children}):children,isSelected&&!disabled&&(0,import_jsx_runtime51.jsx)(ThemedText,{color:"success",children:figures_default.tick})]}),description&&(0,import_jsx_runtime51.jsx)(ThemedBox_default,{paddingLeft:2,children:(0,import_jsx_runtime51.jsx)(ThemedText,{color:"inactive",children:description})})]})}var import_jsx_runtime51,init_ListItem=__esm({"src/components/design-system/ListItem.tsx"(){init_figures();init_use_declared_cursor();init_ink2();import_jsx_runtime51=__toESM(require_jsx_runtime());__name(ListItem,"ListItem")}});function SelectOption({isFocused,isSelected,children,description,shouldShowDownArrow,shouldShowUpArrow,declareCursor}){return(0,import_jsx_runtime52.jsx)(ListItem,{isFocused,isSelected,description,showScrollDown:shouldShowDownArrow,showScrollUp:shouldShowUpArrow,styled:!1,declareCursor,children})}var import_jsx_runtime52,init_select_option=__esm({"src/components/CustomSelect/select-option.tsx"(){init_ListItem();import_jsx_runtime52=__toESM(require_jsx_runtime());__name(SelectOption,"SelectOption")}});function SelectInputOption({option,isFocused,isSelected,shouldShowDownArrow,shouldShowUpArrow,maxIndexWidth,index,inputValue,onInputChange,onSubmit,onExit:onExit2,layout,children,showLabel:showLabelProp=!1,onOpenEditor,resetCursorOnUpdate=!1,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex=0,onImagesSelectedChange,onSelectedImageIndexChange}){let imageAttachments=pastedContents?Object.values(pastedContents).filter(c4=>c4.type==="image"):[],showLabel=showLabelProp||option.showLabelWithValue===!0,[cursorOffset,setCursorOffset]=(0,import_react46.useState)(inputValue.length),isUserEditing=(0,import_react46.useRef)(!1);(0,import_react46.useEffect)(()=>{resetCursorOnUpdate&&isFocused&&(isUserEditing.current?isUserEditing.current=!1:setCursorOffset(inputValue.length))},[resetCursorOnUpdate,isFocused,inputValue]),useKeybinding("chat:externalEditor",()=>{onOpenEditor?.(inputValue,onInputChange)},{context:"Chat",isActive:isFocused&&!!onOpenEditor}),useKeybinding("chat:imagePaste",()=>{onImagePaste&&getImageFromClipboard().then(imageData=>{imageData&&onImagePaste(imageData.base64,imageData.mediaType,void 0,imageData.dimensions)})},{context:"Chat",isActive:isFocused&&!!onImagePaste}),useKeybinding("attachments:remove",()=>{imageAttachments.length>0&&onRemoveImage&&onRemoveImage(imageAttachments.at(-1).id)},{context:"Attachments",isActive:isFocused&&!imagesSelected&&inputValue===""&&imageAttachments.length>0&&!!onRemoveImage}),useKeybindings({"attachments:next":__name(()=>{imageAttachments.length>1&&onSelectedImageIndexChange?.((selectedImageIndex+1)%imageAttachments.length)},"attachments:next"),"attachments:previous":__name(()=>{imageAttachments.length>1&&onSelectedImageIndexChange?.((selectedImageIndex-1+imageAttachments.length)%imageAttachments.length)},"attachments:previous"),"attachments:remove":__name(()=>{let img=imageAttachments[selectedImageIndex];img&&onRemoveImage&&(onRemoveImage(img.id),imageAttachments.length<=1?onImagesSelectedChange?.(!1):onSelectedImageIndexChange?.(Math.min(selectedImageIndex,imageAttachments.length-2)))},"attachments:remove"),"attachments:exit":__name(()=>{onImagesSelectedChange?.(!1)},"attachments:exit")},{context:"Attachments",isActive:isFocused&&!!imagesSelected}),use_input_default((_input,key)=>{key.upArrow&&onImagesSelectedChange?.(!1)},{isActive:isFocused&&!!imagesSelected}),(0,import_react46.useEffect)(()=>{!isFocused&&imagesSelected&&onImagesSelectedChange?.(!1)},[isFocused,imagesSelected,onImagesSelectedChange]);let descriptionPaddingLeft=layout==="expanded"?maxIndexWidth+3:maxIndexWidth+4;return(0,import_jsx_runtime53.jsxs)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:[(0,import_jsx_runtime53.jsx)(SelectOption,{isFocused,isSelected,shouldShowDownArrow,shouldShowUpArrow,declareCursor:!1,children:(0,import_jsx_runtime53.jsxs)(ThemedBox_default,{flexDirection:"row",flexShrink:layout==="compact"?0:void 0,children:[(0,import_jsx_runtime53.jsx)(ThemedText,{dimColor:!0,children:`${index}.`.padEnd(maxIndexWidth+2)}),children,showLabel?(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[(0,import_jsx_runtime53.jsx)(ThemedText,{color:isFocused?"suggestion":void 0,children:option.label}),isFocused?(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[(0,import_jsx_runtime53.jsx)(ThemedText,{color:"suggestion",children:option.labelValueSeparator??", "}),(0,import_jsx_runtime53.jsx)(TextInput,{value:inputValue,onChange:value=>{isUserEditing.current=!0,onInputChange(value),option.onChange(value)},onSubmit,onExit:onExit2,placeholder:option.placeholder,focus:!imagesSelected,showCursor:!0,multiline:!0,disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0,cursorOffset,onChangeCursorOffset:setCursorOffset,columns:80,onImagePaste,onPaste:pastedText=>{isUserEditing.current=!0;let before2=inputValue.slice(0,cursorOffset),after2=inputValue.slice(cursorOffset),newValue=before2+pastedText+after2;onInputChange(newValue),option.onChange(newValue),setCursorOffset(before2.length+pastedText.length)}})]}):inputValue&&(0,import_jsx_runtime53.jsxs)(ThemedText,{children:[option.labelValueSeparator??", ",inputValue]})]}):isFocused?(0,import_jsx_runtime53.jsx)(TextInput,{value:inputValue,onChange:value=>{isUserEditing.current=!0,onInputChange(value),option.onChange(value)},onSubmit,onExit:onExit2,placeholder:option.placeholder||(typeof option.label=="string"?option.label:void 0),focus:!imagesSelected,showCursor:!0,multiline:!0,disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0,cursorOffset,onChangeCursorOffset:setCursorOffset,columns:80,onImagePaste,onPaste:pastedText=>{isUserEditing.current=!0;let before2=inputValue.slice(0,cursorOffset),after2=inputValue.slice(cursorOffset),newValue=before2+pastedText+after2;onInputChange(newValue),option.onChange(newValue),setCursorOffset(before2.length+pastedText.length)}}):(0,import_jsx_runtime53.jsx)(ThemedText,{color:inputValue?void 0:"inactive",children:inputValue||option.placeholder||option.label})]})}),option.description&&(0,import_jsx_runtime53.jsx)(ThemedBox_default,{paddingLeft:descriptionPaddingLeft,children:(0,import_jsx_runtime53.jsx)(ThemedText,{dimColor:option.dimDescription!==!1,color:isSelected?"success":isFocused?"suggestion":void 0,children:option.description})}),imageAttachments.length>0&&(0,import_jsx_runtime53.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,paddingLeft:descriptionPaddingLeft,children:[imageAttachments.map((img,idx)=>(0,import_jsx_runtime53.jsx)(ClickableImageRef,{imageId:img.id,isSelected:!!imagesSelected&&idx===selectedImageIndex},img.id)),(0,import_jsx_runtime53.jsx)(ThemedBox_default,{flexGrow:1,justifyContent:"flex-start",flexDirection:"row",children:(0,import_jsx_runtime53.jsx)(ThemedText,{dimColor:!0,children:imagesSelected?(0,import_jsx_runtime53.jsxs)(Byline,{children:[imageAttachments.length>1&&(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:next",context:"Attachments",fallback:"\u2192",description:"next"}),(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:previous",context:"Attachments",fallback:"\u2190",description:"prev"})]}),(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:remove",context:"Attachments",fallback:"backspace",description:"remove"}),(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:exit",context:"Attachments",fallback:"esc",description:"cancel"})]}):isFocused?"(\u2193 to select)":null})})]}),layout==="expanded"&&(0,import_jsx_runtime53.jsx)(ThemedText,{children:" "})]})}var import_react46,import_jsx_runtime53,init_select_input_option=__esm({"src/components/CustomSelect/select-input-option.tsx"(){import_react46=__toESM(require_react());init_ink2();init_useKeybinding();init_imagePaste();init_ClickableImageRef();init_ConfigurableShortcutHint();init_Byline();init_TextInput();init_select_option();import_jsx_runtime53=__toESM(require_jsx_runtime());__name(SelectInputOption,"SelectInputOption")}});function useRegisterOverlay(id,enabled=!0){let setAppState=(0,import_react47.useContext)(AppStoreContext)?.setState;(0,import_react47.useEffect)(()=>{if(!(!enabled||!setAppState))return setAppState(prev=>{if(prev.activeOverlays.has(id))return prev;let next=new Set(prev.activeOverlays);return next.add(id),{...prev,activeOverlays:next}}),()=>{setAppState(prev=>{if(!prev.activeOverlays.has(id))return prev;let next=new Set(prev.activeOverlays);return next.delete(id),{...prev,activeOverlays:next}})}},[id,enabled,setAppState]),(0,import_react47.useLayoutEffect)(()=>{if(enabled)return()=>instances_default.get(process.stdout)?.invalidatePrevFrame()},[enabled])}function useIsOverlayActive(){return useAppState(s2=>s2.activeOverlays.size>0)}function useIsModalOverlayActive(){return useAppState(s2=>{for(let id of s2.activeOverlays)if(!NON_MODAL_OVERLAYS.has(id))return!0;return!1})}var import_react47,NON_MODAL_OVERLAYS,init_overlayContext=__esm({"src/context/overlayContext.tsx"(){import_react47=__toESM(require_react());init_instances();init_AppState();NON_MODAL_OVERLAYS=new Set(["autocomplete"]);__name(useRegisterOverlay,"useRegisterOverlay");__name(useIsOverlayActive,"useIsOverlayActive");__name(useIsModalOverlayActive,"useIsModalOverlayActive")}});var OptionMap,init_option_map=__esm({"src/components/CustomSelect/option-map.ts"(){OptionMap=class extends Map{static{__name(this,"OptionMap")}first;last;constructor(options){let items=[],firstItem,lastItem,previous,index=0;for(let option of options){let item={label:option.label,value:option.value,description:option.description,previous,next:void 0,index};previous&&(previous.next=item),firstItem||=item,lastItem=item,items.push([option.value,item]),index++,previous=item}super(items),this.first=firstItem,this.last=lastItem}}}});import{isDeepStrictEqual}from"util";function useSelectNavigation({visibleOptionCount=5,options,initialFocusValue,onFocus,focusValue}){let[state2,dispatch]=(0,import_react48.useReducer)(reducer,{visibleOptionCount,options,initialFocusValue:focusValue||initialFocusValue},createDefaultState),onFocusRef=(0,import_react48.useRef)(onFocus);onFocusRef.current=onFocus;let[lastOptions,setLastOptions]=(0,import_react48.useState)(options);options!==lastOptions&&!isDeepStrictEqual(options,lastOptions)&&(dispatch({type:"reset",state:createDefaultState({visibleOptionCount,options,initialFocusValue:focusValue??state2.focusedValue??initialFocusValue,currentViewport:{visibleFromIndex:state2.visibleFromIndex,visibleToIndex:state2.visibleToIndex}})}),setLastOptions(options));let focusNextOption=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-next-option"})},[]),focusPreviousOption=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-previous-option"})},[]),focusNextPage=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-next-page"})},[]),focusPreviousPage=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-previous-page"})},[]),focusOption=(0,import_react48.useCallback)(value=>{value!==void 0&&dispatch({type:"set-focus",value})},[]),visibleOptions=(0,import_react48.useMemo)(()=>options.map((option,index)=>({...option,index})).slice(state2.visibleFromIndex,state2.visibleToIndex),[options,state2.visibleFromIndex,state2.visibleToIndex]),validatedFocusedValue=(0,import_react48.useMemo)(()=>state2.focusedValue===void 0?void 0:options.some(opt=>opt.value===state2.focusedValue)?state2.focusedValue:options[0]?.value,[state2.focusedValue,options]),isInInput=(0,import_react48.useMemo)(()=>options.find(opt=>opt.value===validatedFocusedValue)?.type==="input",[validatedFocusedValue,options]);(0,import_react48.useEffect)(()=>{validatedFocusedValue!==void 0&&onFocusRef.current?.(validatedFocusedValue)},[validatedFocusedValue]),(0,import_react48.useEffect)(()=>{focusValue!==void 0&&dispatch({type:"set-focus",value:focusValue})},[focusValue]);let focusedIndex=(0,import_react48.useMemo)(()=>{if(validatedFocusedValue===void 0)return 0;let index=options.findIndex(opt=>opt.value===validatedFocusedValue);return index>=0?index+1:0},[validatedFocusedValue,options]);return{focusedValue:validatedFocusedValue,focusedIndex,visibleFromIndex:state2.visibleFromIndex,visibleToIndex:state2.visibleToIndex,visibleOptions,isInInput:isInInput??!1,focusNextOption,focusPreviousOption,focusNextPage,focusPreviousPage,focusOption,options}}var import_react48,reducer,createDefaultState,init_use_select_navigation=__esm({"src/components/CustomSelect/use-select-navigation.ts"(){import_react48=__toESM(require_react());init_option_map();reducer=__name((state2,action)=>{switch(action.type){case"focus-next-option":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let next=item.next||state2.optionMap.first;if(!next)return state2;if(!item.next&&next===state2.optionMap.first)return{...state2,focusedValue:next.value,visibleFromIndex:0,visibleToIndex:state2.visibleOptionCount};if(!(next.index>=state2.visibleToIndex))return{...state2,focusedValue:next.value};let nextVisibleToIndex=Math.min(state2.optionMap.size,state2.visibleToIndex+1),nextVisibleFromIndex=nextVisibleToIndex-state2.visibleOptionCount;return{...state2,focusedValue:next.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"focus-previous-option":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let previous=item.previous||state2.optionMap.last;if(!previous)return state2;if(!item.previous&&previous===state2.optionMap.last){let nextVisibleToIndex2=state2.optionMap.size,nextVisibleFromIndex2=Math.max(0,nextVisibleToIndex2-state2.visibleOptionCount);return{...state2,focusedValue:previous.value,visibleFromIndex:nextVisibleFromIndex2,visibleToIndex:nextVisibleToIndex2}}if(!(previous.index<=state2.visibleFromIndex))return{...state2,focusedValue:previous.value};let nextVisibleFromIndex=Math.max(0,state2.visibleFromIndex-1),nextVisibleToIndex=nextVisibleFromIndex+state2.visibleOptionCount;return{...state2,focusedValue:previous.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"focus-next-page":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let targetIndex=Math.min(state2.optionMap.size-1,item.index+state2.visibleOptionCount),targetItem=state2.optionMap.first;for(;targetItem&&targetItem.index<targetIndex&&targetItem.next;)targetItem=targetItem.next;if(!targetItem)return state2;let nextVisibleToIndex=Math.min(state2.optionMap.size,targetItem.index+1),nextVisibleFromIndex=Math.max(0,nextVisibleToIndex-state2.visibleOptionCount);return{...state2,focusedValue:targetItem.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"focus-previous-page":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let targetIndex=Math.max(0,item.index-state2.visibleOptionCount),targetItem=state2.optionMap.first;for(;targetItem&&targetItem.index<targetIndex&&targetItem.next;)targetItem=targetItem.next;if(!targetItem)return state2;let nextVisibleFromIndex=Math.max(0,targetItem.index),nextVisibleToIndex=Math.min(state2.optionMap.size,nextVisibleFromIndex+state2.visibleOptionCount);return{...state2,focusedValue:targetItem.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"reset":return action.state;case"set-focus":{if(state2.focusedValue===action.value)return state2;let item=state2.optionMap.get(action.value);if(!item)return state2;if(item.index>=state2.visibleFromIndex&&item.index<state2.visibleToIndex)return{...state2,focusedValue:action.value};let nextVisibleFromIndex,nextVisibleToIndex;return item.index<state2.visibleFromIndex?(nextVisibleFromIndex=item.index,nextVisibleToIndex=Math.min(state2.optionMap.size,nextVisibleFromIndex+state2.visibleOptionCount)):(nextVisibleToIndex=Math.min(state2.optionMap.size,item.index+1),nextVisibleFromIndex=Math.max(0,nextVisibleToIndex-state2.visibleOptionCount)),{...state2,focusedValue:action.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}}},"reducer"),createDefaultState=__name(({visibleOptionCount:customVisibleOptionCount,options,initialFocusValue,currentViewport})=>{let visibleOptionCount=typeof customVisibleOptionCount=="number"?Math.min(customVisibleOptionCount,options.length):options.length,optionMap=new OptionMap(options),focusedItem=initialFocusValue!==void 0&&optionMap.get(initialFocusValue),focusedValue=focusedItem?initialFocusValue:optionMap.first?.value,visibleFromIndex=0,visibleToIndex=visibleOptionCount;if(focusedItem){let focusedIndex=focusedItem.index;currentViewport?focusedIndex>=currentViewport.visibleFromIndex&&focusedIndex<currentViewport.visibleToIndex?(visibleFromIndex=currentViewport.visibleFromIndex,visibleToIndex=Math.min(optionMap.size,currentViewport.visibleToIndex)):focusedIndex<currentViewport.visibleFromIndex?(visibleFromIndex=focusedIndex,visibleToIndex=Math.min(optionMap.size,visibleFromIndex+visibleOptionCount)):(visibleToIndex=Math.min(optionMap.size,focusedIndex+1),visibleFromIndex=Math.max(0,visibleToIndex-visibleOptionCount)):focusedIndex>=visibleOptionCount&&(visibleToIndex=Math.min(optionMap.size,focusedIndex+1),visibleFromIndex=Math.max(0,visibleToIndex-visibleOptionCount)),visibleFromIndex=Math.max(0,Math.min(visibleFromIndex,optionMap.size-1)),visibleToIndex=Math.min(optionMap.size,Math.max(visibleOptionCount,visibleToIndex))}return{optionMap,visibleOptionCount,focusedValue,visibleFromIndex,visibleToIndex}},"createDefaultState");__name(useSelectNavigation,"useSelectNavigation")}});import{isDeepStrictEqual as isDeepStrictEqual2}from"util";function useMultiSelectState({isDisabled=!1,visibleOptionCount=5,options,defaultValue=[],onChange,onCancel,onFocus,focusValue,submitButtonText,onSubmit,onDownFromLastItem,onUpFromFirstItem,initialFocusLast,hideIndexes=!1}){let[selectedValues,setSelectedValues]=(0,import_react49.useState)(defaultValue),[isSubmitFocused,setIsSubmitFocused]=(0,import_react49.useState)(!1),[lastOptions,setLastOptions]=(0,import_react49.useState)(options);options!==lastOptions&&!isDeepStrictEqual2(options,lastOptions)&&(setSelectedValues(defaultValue),setLastOptions(options));let[inputValues,setInputValues]=(0,import_react49.useState)(()=>{let initialMap=new Map;return options.forEach(option=>{option.type==="input"&&option.initialValue&&initialMap.set(option.value,option.initialValue)}),initialMap}),updateSelectedValues=(0,import_react49.useCallback)(values2=>{let newValues=typeof values2=="function"?values2(selectedValues):values2;setSelectedValues(newValues),onChange?.(newValues)},[selectedValues,onChange]),navigation=useSelectNavigation({visibleOptionCount,options,initialFocusValue:initialFocusLast?options[options.length-1]?.value:void 0,onFocus,focusValue});useRegisterOverlay("multi-select");let updateInputValue=(0,import_react49.useCallback)((value,inputValue)=>{setInputValues(prev=>{let next=new Map(prev);return next.set(value,inputValue),next});let option=options.find(opt=>opt.value===value);option&&option.type==="input"&&option.onChange(inputValue),updateSelectedValues(prev=>inputValue?prev.includes(value)?prev:[...prev,value]:prev.filter(v2=>v2!==value))},[options,updateSelectedValues]);return use_input_default((input,key,event)=>{let normalizedInput=normalizeFullWidthDigits(input),isInInput=options.find(opt=>opt.value===navigation.focusedValue)?.type==="input";if(isInInput&&!(key.upArrow||key.downArrow||key.escape||key.tab||key.return||key.ctrl&&(input==="n"||input==="p"||key.return)))return;let lastOptionValue=options[options.length-1]?.value;if(key.tab&&!key.shift){submitButtonText&&onSubmit&&navigation.focusedValue===lastOptionValue&&!isSubmitFocused?setIsSubmitFocused(!0):isSubmitFocused||navigation.focusNextOption();return}if(key.tab&&key.shift){submitButtonText&&onSubmit&&isSubmitFocused?(setIsSubmitFocused(!1),navigation.focusOption(lastOptionValue)):navigation.focusPreviousOption();return}if(key.downArrow||key.ctrl&&input==="n"||!key.ctrl&&!key.shift&&input==="j"){isSubmitFocused&&onDownFromLastItem?onDownFromLastItem():submitButtonText&&onSubmit&&navigation.focusedValue===lastOptionValue&&!isSubmitFocused?setIsSubmitFocused(!0):!submitButtonText&&onDownFromLastItem&&navigation.focusedValue===lastOptionValue?onDownFromLastItem():isSubmitFocused||navigation.focusNextOption();return}if(key.upArrow||key.ctrl&&input==="p"||!key.ctrl&&!key.shift&&input==="k"){submitButtonText&&onSubmit&&isSubmitFocused?(setIsSubmitFocused(!1),navigation.focusOption(lastOptionValue)):onUpFromFirstItem&&navigation.focusedValue===options[0]?.value?onUpFromFirstItem():navigation.focusPreviousOption();return}if(key.pageDown){navigation.focusNextPage();return}if(key.pageUp){navigation.focusPreviousPage();return}if(key.return||normalizeFullWidthSpace(input)===" "){if(key.ctrl&&key.return&&isInInput&&onSubmit){onSubmit(selectedValues);return}if(isSubmitFocused&&onSubmit){onSubmit(selectedValues);return}if(key.return&&!submitButtonText&&onSubmit){onSubmit(selectedValues);return}if(navigation.focusedValue!==void 0){let newValues=selectedValues.includes(navigation.focusedValue)?selectedValues.filter(v2=>v2!==navigation.focusedValue):[...selectedValues,navigation.focusedValue];updateSelectedValues(newValues)}return}if(!hideIndexes&&/^[0-9]+$/.test(normalizedInput)){let index=parseInt(normalizedInput)-1;if(index>=0&&index<options.length){let value=options[index].value,newValues=selectedValues.includes(value)?selectedValues.filter(v2=>v2!==value):[...selectedValues,value];updateSelectedValues(newValues)}return}key.escape&&(onCancel(),event.stopImmediatePropagation())},{isActive:!isDisabled}),{...navigation,selectedValues,inputValues,isSubmitFocused,updateInputValue,onCancel}}var import_react49,init_use_multi_select_state=__esm({"src/components/CustomSelect/use-multi-select-state.ts"(){import_react49=__toESM(require_react());init_overlayContext();init_ink2();init_stringUtils();init_use_select_navigation();__name(useMultiSelectState,"useMultiSelectState")}});function SelectMulti({isDisabled=!1,visibleOptionCount=5,options,defaultValue=[],onCancel,onChange,onFocus,focusValue,submitButtonText,onSubmit,onDownFromLastItem,onUpFromFirstItem,initialFocusLast,onOpenEditor,hideIndexes=!1,onImagePaste,pastedContents,onRemoveImage}){let state2=useMultiSelectState({isDisabled,visibleOptionCount,options,defaultValue,onChange,onCancel,onFocus,focusValue,submitButtonText,onSubmit,onDownFromLastItem,onUpFromFirstItem,initialFocusLast,hideIndexes}),maxIndexWidth=options.length.toString().length;return(0,import_jsx_runtime54.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime54.jsx)(ThemedBox_default,{flexDirection:"column",children:state2.visibleOptions.map((option,index)=>{let isOptionFocused=!isDisabled&&state2.focusedValue===option.value&&!state2.isSubmitFocused,isSelected=state2.selectedValues.includes(option.value),isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1;if(option.type==="input"){let inputValue=state2.inputValues.get(option.value)||"";return(0,import_jsx_runtime54.jsx)(ThemedBox_default,{gap:1,children:(0,import_jsx_runtime54.jsx)(SelectInputOption,{option,isFocused:isOptionFocused,isSelected:!1,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,maxIndexWidth,index:i3,inputValue,onInputChange:value=>{state2.updateInputValue(option.value,value)},onSubmit:()=>{},onExit:()=>{onCancel()},layout:"compact",onOpenEditor,onImagePaste,pastedContents,onRemoveImage,children:(0,import_jsx_runtime54.jsxs)(ThemedText,{color:isSelected?"success":void 0,children:["[",isSelected?figures_default.tick:" ","]"," "]})})},String(option.value))}return(0,import_jsx_runtime54.jsx)(ThemedBox_default,{gap:1,children:(0,import_jsx_runtime54.jsxs)(SelectOption,{isFocused:isOptionFocused,isSelected:!1,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,description:option.description,children:[!hideIndexes&&(0,import_jsx_runtime54.jsx)(ThemedText,{dimColor:!0,children:`${i3}.`.padEnd(maxIndexWidth)}),(0,import_jsx_runtime54.jsxs)(ThemedText,{color:isSelected?"success":void 0,children:["[",isSelected?figures_default.tick:" ","]"]}),(0,import_jsx_runtime54.jsx)(ThemedText,{color:isOptionFocused?"suggestion":void 0,children:option.label})]})},String(option.value))})}),submitButtonText&&onSubmit&&(0,import_jsx_runtime54.jsxs)(ThemedBox_default,{marginTop:0,gap:1,children:[state2.isSubmitFocused?(0,import_jsx_runtime54.jsx)(ThemedText,{color:"suggestion",children:figures_default.pointer}):(0,import_jsx_runtime54.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime54.jsx)(ThemedBox_default,{marginLeft:3,children:(0,import_jsx_runtime54.jsx)(ThemedText,{color:state2.isSubmitFocused?"suggestion":void 0,bold:!0,children:submitButtonText})})]})]})}var import_jsx_runtime54,init_SelectMulti=__esm({"src/components/CustomSelect/SelectMulti.tsx"(){init_figures();init_ink2();init_select_input_option();init_select_option();init_use_multi_select_state();import_jsx_runtime54=__toESM(require_jsx_runtime());__name(SelectMulti,"SelectMulti")}});var import_react50,useSelectInput,init_use_select_input=__esm({"src/components/CustomSelect/use-select-input.ts"(){import_react50=__toESM(require_react());init_overlayContext();init_ink2();init_useKeybinding();init_stringUtils();useSelectInput=__name(({isDisabled=!1,disableSelection=!1,state:state2,options,isMultiSelect=!1,onUpFromFirstItem,onDownFromLastItem,onInputModeToggle,inputValues,imagesSelected=!1,onEnterImageSelection})=>{useRegisterOverlay("select",!!state2.onCancel);let isInInput=(0,import_react50.useMemo)(()=>options.find(opt=>opt.value===state2.focusedValue)?.type==="input",[options,state2.focusedValue]),keybindingHandlers=(0,import_react50.useMemo)(()=>{let handlers={};if(isInInput||(handlers["select:next"]=()=>{if(onDownFromLastItem){let lastOption=options[options.length-1];if(lastOption&&state2.focusedValue===lastOption.value){onDownFromLastItem();return}}state2.focusNextOption()},handlers["select:previous"]=()=>{if(onUpFromFirstItem&&state2.visibleFromIndex===0){let firstOption=options[0];if(firstOption&&state2.focusedValue===firstOption.value){onUpFromFirstItem();return}}state2.focusPreviousOption()},handlers["select:accept"]=()=>{disableSelection===!0||state2.focusedValue===void 0||options.find(opt=>opt.value===state2.focusedValue)?.disabled===!0||(state2.selectFocusedOption?.(),state2.onChange?.(state2.focusedValue))}),state2.onCancel){let handleCancel=__name(()=>{state2.onCancel()},"handleCancel");handlers["select:cancel"]=handleCancel,handlers["app:interrupt"]=handleCancel}return handlers},[options,state2,onDownFromLastItem,onUpFromFirstItem,isInInput,disableSelection]);useKeybindings(keybindingHandlers,{context:"Select",isActive:!isDisabled}),use_input_default((input,key,event)=>{let normalizedInput=normalizeFullWidthDigits(input),focusedOption=options.find(opt=>opt.value===state2.focusedValue),currentIsInInput=focusedOption?.type==="input";if(key.tab&&onInputModeToggle&&state2.focusedValue!==void 0){onInputModeToggle(state2.focusedValue);return}if(currentIsInInput){if(imagesSelected)return;if(key.downArrow&&onEnterImageSelection?.()){event.stopImmediatePropagation();return}if(key.downArrow||key.ctrl&&input==="n"){if(onDownFromLastItem){let lastOption=options[options.length-1];if(lastOption&&state2.focusedValue===lastOption.value){onDownFromLastItem(),event.stopImmediatePropagation();return}}state2.focusNextOption(),event.stopImmediatePropagation();return}if(key.upArrow||key.ctrl&&input==="p"){if(onUpFromFirstItem&&state2.visibleFromIndex===0){let firstOption=options[0];if(firstOption&&state2.focusedValue===firstOption.value){onUpFromFirstItem(),event.stopImmediatePropagation();return}}state2.focusPreviousOption(),event.stopImmediatePropagation();return}return}if(key.pageDown&&state2.focusNextPage(),key.pageUp&&state2.focusPreviousPage(),disableSelection!==!0&&(isMultiSelect&&normalizeFullWidthSpace(input)===" "&&state2.focusedValue!==void 0&&(focusedOption?.disabled===!0||(state2.selectFocusedOption?.(),state2.onChange?.(state2.focusedValue))),disableSelection!=="numeric"&&/^[0-9]+$/.test(normalizedInput))){let index=parseInt(normalizedInput)-1;if(index>=0&&index<state2.options.length){let selectedOption=state2.options[index];if(selectedOption.disabled===!0)return;if(selectedOption.type==="input"){if((inputValues?.get(selectedOption.value)??"").trim()){state2.onChange?.(selectedOption.value);return}if(selectedOption.allowEmptySubmitToCancel){state2.onChange?.(selectedOption.value);return}state2.focusOption(selectedOption.value);return}state2.onChange?.(selectedOption.value);return}}},{isActive:!isDisabled})},"useSelectInput")}});function useSelectState({visibleOptionCount=5,options,defaultValue,onChange,onCancel,onFocus,focusValue}){let[value,setValue]=(0,import_react51.useState)(defaultValue),navigation=useSelectNavigation({visibleOptionCount,options,initialFocusValue:void 0,onFocus,focusValue}),selectFocusedOption=(0,import_react51.useCallback)(()=>{setValue(navigation.focusedValue)},[navigation.focusedValue]);return{...navigation,value,selectFocusedOption,onChange,onCancel}}var import_react51,init_use_select_state=__esm({"src/components/CustomSelect/use-select-state.ts"(){import_react51=__toESM(require_react());init_use_select_navigation();__name(useSelectState,"useSelectState")}});function getTextContent2(node){return typeof node=="string"?node:typeof node=="number"?String(node):node?Array.isArray(node)?node.map(getTextContent2).join(""):import_react52.default.isValidElement(node)?getTextContent2(node.props.children):"":""}function Select({isDisabled=!1,hideIndexes=!1,visibleOptionCount=5,highlightText,options,defaultValue,onCancel,onChange,onFocus,defaultFocusValue,layout="compact",disableSelection=!1,inlineDescriptions=!1,onUpFromFirstItem,onDownFromLastItem,onInputModeToggle,onOpenEditor,onImagePaste,pastedContents,onRemoveImage}){let[imagesSelected,setImagesSelected]=(0,import_react52.useState)(!1),[selectedImageIndex,setSelectedImageIndex]=(0,import_react52.useState)(0),[inputValues,setInputValues]=(0,import_react52.useState)(()=>{let initialMap=new Map;return options.forEach(option=>{option.type==="input"&&option.initialValue&&initialMap.set(option.value,option.initialValue)}),initialMap}),lastInitialValues=(0,import_react52.useRef)(new Map);(0,import_react52.useEffect)(()=>{for(let option of options)if(option.type==="input"&&option.initialValue!==void 0){let lastInitial=lastInitialValues.current.get(option.value)??"",currentValue=inputValues.get(option.value)??"",newInitial=option.initialValue;newInitial!==lastInitial&¤tValue===lastInitial&&setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,newInitial),next}),lastInitialValues.current.set(option.value,newInitial)}},[options,inputValues]);let state2=useSelectState({visibleOptionCount,options,defaultValue,onChange,onCancel,onFocus,focusValue:defaultFocusValue});useSelectInput({isDisabled,disableSelection:disableSelection||(hideIndexes?"numeric":!1),state:state2,options,isMultiSelect:!1,onUpFromFirstItem,onDownFromLastItem,onInputModeToggle,inputValues,imagesSelected,onEnterImageSelection:__name(()=>{if(pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image")){let imageCount=count2(Object.values(pastedContents),c4=>c4.type==="image");return setImagesSelected(!0),setSelectedImageIndex(imageCount-1),!0}return!1},"onEnterImageSelection")});let styles5={container:__name(()=>({flexDirection:"column"}),"container"),highlightedText:__name(()=>({bold:!0}),"highlightedText")};if(layout==="expanded"){let maxIndexWidth2=state2.options.length.toString().length;return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:state2.visibleOptions.map((option,index)=>{let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value;if(option.type==="input"){let inputValue=inputValues.has(option.value)?inputValues.get(option.value):option.initialValue||"";return(0,import_jsx_runtime55.jsx)(SelectInputOption,{option,isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,maxIndexWidth:maxIndexWidth2,index:i3,inputValue,onInputChange:value=>{setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,value),next})},onSubmit:value=>{let hasImageAttachments=pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image");value.trim()||hasImageAttachments||option.allowEmptySubmitToCancel?onChange?.(option.value):onCancel?.()},onExit:onCancel,layout:"expanded",showLabel:inlineDescriptions,onOpenEditor,resetCursorOnUpdate:option.resetCursorOnUpdate,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex,onImagesSelectedChange:setImagesSelected,onSelectedImageIndexChange:setSelectedImageIndex},String(option.value))}let label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,index2=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,index2),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(index2+highlightText.length)]})}let isOptionDisabled=option.disabled===!0,optionColor=isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0;return(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:[(0,import_jsx_runtime55.jsx)(SelectOption,{isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,children:(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled,color:optionColor,children:label})}),option.description&&(0,import_jsx_runtime55.jsx)(ThemedBox_default,{paddingLeft:2,children:(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled||option.dimDescription!==!1,color:optionColor,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:option.description})})}),(0,import_jsx_runtime55.jsx)(ThemedText,{children:" "})]},String(option.value))})})}if(layout==="compact-vertical"){let maxIndexWidth2=hideIndexes?0:state2.options.length.toString().length;return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:state2.visibleOptions.map((option,index)=>{let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value;if(option.type==="input"){let inputValue=inputValues.has(option.value)?inputValues.get(option.value):option.initialValue||"";return(0,import_jsx_runtime55.jsx)(SelectInputOption,{option,isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,maxIndexWidth:maxIndexWidth2,index:i3,inputValue,onInputChange:value=>{setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,value),next})},onSubmit:value=>{let hasImageAttachments=pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image");value.trim()||hasImageAttachments||option.allowEmptySubmitToCancel?onChange?.(option.value):onCancel?.()},onExit:onCancel,layout:"compact",showLabel:inlineDescriptions,onOpenEditor,resetCursorOnUpdate:option.resetCursorOnUpdate,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex,onImagesSelectedChange:setImagesSelected,onSelectedImageIndexChange:setSelectedImageIndex},String(option.value))}let label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,index2=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,index2),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(index2+highlightText.length)]})}let isOptionDisabled=option.disabled===!0;return(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:[(0,import_jsx_runtime55.jsx)(SelectOption,{isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,children:(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[!hideIndexes&&(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:`${i3}.`.padEnd(maxIndexWidth2+1)}),(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:label})]})}),option.description&&(0,import_jsx_runtime55.jsx)(ThemedBox_default,{paddingLeft:hideIndexes?4:maxIndexWidth2+4,children:(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled||option.dimDescription!==!1,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:option.description})})})]},String(option.value))})})}let maxIndexWidth=hideIndexes?0:state2.options.length.toString().length,hasInputOptions=state2.visibleOptions.some(opt=>opt.type==="input"),hasDescriptions=!inlineDescriptions&&!hasInputOptions&&state2.visibleOptions.some(opt=>opt.description),optionData=state2.visibleOptions.map((option,index)=>{let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value,isOptionDisabled=option.disabled===!0,label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,idx=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,idx),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(idx+highlightText.length)]})}return{option,index:i3,label,isFocused,isSelected,isOptionDisabled,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption}});if(hasDescriptions){let maxLabelWidth=Math.max(...optionData.map(data=>{if(data.option.type==="input")return 0;let labelText=getTextContent2(data.option.label),indexWidth=hideIndexes?0:maxIndexWidth+2,checkmarkWidth=data.isSelected?2:0;return 2+indexWidth+stringWidth(labelText)+checkmarkWidth}));return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:optionData.map(data=>{if(data.option.type==="input")return null;let labelText=getTextContent2(data.option.label),indexWidth=hideIndexes?0:maxIndexWidth+2,checkmarkWidth=data.isSelected?2:0,currentLabelWidth=2+indexWidth+stringWidth(labelText)+checkmarkWidth,padding=maxLabelWidth-currentLabelWidth;return(0,import_jsx_runtime55.jsxs)(TwoColumnRow,{isFocused:data.isFocused,children:[(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"row",flexShrink:0,children:[data.isFocused?(0,import_jsx_runtime55.jsx)(ThemedText,{color:"suggestion",children:figures_default.pointer}):data.shouldShowDownArrow?(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowDown}):data.shouldShowUpArrow?(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowUp}):(0,import_jsx_runtime55.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime55.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime55.jsxs)(ThemedText,{dimColor:data.isOptionDisabled,color:data.isOptionDisabled?void 0:data.isSelected?"success":data.isFocused?"suggestion":void 0,children:[!hideIndexes&&(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:`${data.index}.`.padEnd(maxIndexWidth+2)}),data.label]}),data.isSelected&&(0,import_jsx_runtime55.jsxs)(ThemedText,{color:"success",children:[" ",figures_default.tick]}),padding>0&&(0,import_jsx_runtime55.jsx)(ThemedText,{children:" ".repeat(padding)})]}),(0,import_jsx_runtime55.jsx)(ThemedBox_default,{flexGrow:1,marginLeft:2,children:(0,import_jsx_runtime55.jsx)(ThemedText,{wrap:"wrap",dimColor:data.isOptionDisabled||data.option.dimDescription!==!1,color:data.isOptionDisabled?void 0:data.isSelected?"success":data.isFocused?"suggestion":void 0,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:data.option.description||" "})})})]},String(data.option.value))})})}return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:state2.visibleOptions.map((option,index)=>{if(option.type==="input"){let inputValue=inputValues.has(option.value)?inputValues.get(option.value):option.initialValue||"",isFirstVisibleOption2=option.index===state2.visibleFromIndex,isLastVisibleOption2=option.index===state2.visibleToIndex-1,areMoreOptionsBelow2=state2.visibleToIndex<options.length,areMoreOptionsAbove2=state2.visibleFromIndex>0,i4=state2.visibleFromIndex+index+1,isFocused2=!isDisabled&&state2.focusedValue===option.value,isSelected2=state2.value===option.value;return(0,import_jsx_runtime55.jsx)(SelectInputOption,{option,isFocused:isFocused2,isSelected:isSelected2,shouldShowDownArrow:areMoreOptionsBelow2&&isLastVisibleOption2,shouldShowUpArrow:areMoreOptionsAbove2&&isFirstVisibleOption2,maxIndexWidth,index:i4,inputValue,onInputChange:value=>{setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,value),next})},onSubmit:value=>{let hasImageAttachments=pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image");value.trim()||hasImageAttachments||option.allowEmptySubmitToCancel?onChange?.(option.value):onCancel?.()},onExit:onCancel,layout:"compact",showLabel:inlineDescriptions,onOpenEditor,resetCursorOnUpdate:option.resetCursorOnUpdate,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex,onImagesSelectedChange:setImagesSelected,onSelectedImageIndexChange:setSelectedImageIndex},String(option.value))}let label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,index2=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,index2),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(index2+highlightText.length)]})}let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value,isOptionDisabled=option.disabled===!0;return(0,import_jsx_runtime55.jsxs)(SelectOption,{isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,children:[(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"row",flexShrink:0,children:[!hideIndexes&&(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:`${i3}.`.padEnd(maxIndexWidth+2)}),(0,import_jsx_runtime55.jsxs)(ThemedText,{dimColor:isOptionDisabled,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:[label,inlineDescriptions&&option.description&&(0,import_jsx_runtime55.jsxs)(ThemedText,{dimColor:isOptionDisabled||option.dimDescription!==!1,children:[" ",option.description]})]})]}),!inlineDescriptions&&option.description&&(0,import_jsx_runtime55.jsx)(ThemedBox_default,{flexShrink:99,marginLeft:2,children:(0,import_jsx_runtime55.jsx)(ThemedText,{wrap:"wrap-trim",dimColor:isOptionDisabled||option.dimDescription!==!1,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:option.description})})})]},String(option.value))})})}function TwoColumnRow({isFocused,children}){let cursorRef=useDeclaredCursor({line:0,column:0,active:isFocused});return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{ref:cursorRef,flexDirection:"row",children})}var import_react52,import_jsx_runtime55,init_select=__esm({"src/components/CustomSelect/select.tsx"(){init_figures();import_react52=__toESM(require_react());init_use_declared_cursor();init_stringWidth();init_ink2();init_array4();init_select_input_option();init_select_option();init_use_select_input();init_use_select_state();import_jsx_runtime55=__toESM(require_jsx_runtime());__name(getTextContent2,"getTextContent");__name(Select,"Select");__name(TwoColumnRow,"TwoColumnRow")}});var init_CustomSelect=__esm({"src/components/CustomSelect/index.ts"(){init_SelectMulti();init_select()}});function PermissionRequestTitle({title,subtitle,color:color3="permission",workerBadge}){return(0,import_jsx_runtime56.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime56.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[(0,import_jsx_runtime56.jsx)(ThemedText,{bold:!0,color:color3,children:title}),workerBadge&&(0,import_jsx_runtime56.jsxs)(ThemedText,{dimColor:!0,children:["\xB7 ","@",workerBadge.name]})]}),subtitle!=null&&(typeof subtitle=="string"?(0,import_jsx_runtime56.jsx)(ThemedText,{dimColor:!0,wrap:"truncate-start",children:subtitle}):subtitle)]})}var import_jsx_runtime56,init_PermissionRequestTitle=__esm({"src/components/permissions/PermissionRequestTitle.tsx"(){init_ink2();import_jsx_runtime56=__toESM(require_jsx_runtime());__name(PermissionRequestTitle,"PermissionRequestTitle")}});function PermissionDialog({title,subtitle,color:color3="permission",titleColor,innerPaddingX=1,workerBadge,titleRight,children}){return(0,import_jsx_runtime57.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:color3,borderLeft:!1,borderRight:!1,borderBottom:!1,marginTop:1,children:[(0,import_jsx_runtime57.jsx)(ThemedBox_default,{paddingX:1,flexDirection:"column",children:(0,import_jsx_runtime57.jsxs)(ThemedBox_default,{justifyContent:"space-between",children:[(0,import_jsx_runtime57.jsx)(PermissionRequestTitle,{title,subtitle,color:titleColor,workerBadge}),titleRight]})}),(0,import_jsx_runtime57.jsx)(ThemedBox_default,{flexDirection:"column",paddingX:innerPaddingX,children})]})}var import_jsx_runtime57,init_PermissionDialog=__esm({"src/components/permissions/PermissionDialog.tsx"(){init_ink2();init_PermissionRequestTitle();import_jsx_runtime57=__toESM(require_jsx_runtime());__name(PermissionDialog,"PermissionDialog")}});function isProviderManagedEnvVar(key){let upper=key.toUpperCase();return PROVIDER_MANAGED_ENV_VARS.has(upper)||PROVIDER_MANAGED_ENV_PREFIXES.some(p=>upper.startsWith(p))}var PROVIDER_MANAGED_ENV_VARS,PROVIDER_MANAGED_ENV_PREFIXES,DANGEROUS_SHELL_SETTINGS,SAFE_ENV_VARS2,init_managedEnvConstants=__esm({"src/utils/managedEnvConstants.ts"(){PROVIDER_MANAGED_ENV_VARS=new Set(["CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","ANTHROPIC_BASE_URL","ANTHROPIC_BEDROCK_BASE_URL","ANTHROPIC_VERTEX_BASE_URL","ANTHROPIC_FOUNDRY_BASE_URL","ANTHROPIC_FOUNDRY_RESOURCE","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","ANTHROPIC_API_KEY","ANTHROPIC_AUTH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","AWS_BEARER_TOKEN_BEDROCK","ANTHROPIC_FOUNDRY_API_KEY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_SMALL_FAST_MODEL","ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION","CLAUDE_CODE_SUBAGENT_MODEL"]),PROVIDER_MANAGED_ENV_PREFIXES=["VERTEX_REGION_CLAUDE_"];__name(isProviderManagedEnvVar,"isProviderManagedEnvVar");DANGEROUS_SHELL_SETTINGS=["apiKeyHelper","awsAuthRefresh","awsCredentialExport","gcpAuthRefresh","otelHeadersHelper","statusLine"],SAFE_ENV_VARS2=new Set(["ANTHROPIC_CUSTOM_HEADERS","ANTHROPIC_CUSTOM_MODEL_OPTION","ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION","ANTHROPIC_CUSTOM_MODEL_OPTION_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_FOUNDRY_API_KEY","ANTHROPIC_MODEL","ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION","ANTHROPIC_SMALL_FAST_MODEL","AWS_DEFAULT_REGION","AWS_PROFILE","AWS_REGION","BASH_DEFAULT_TIMEOUT_MS","BASH_MAX_OUTPUT_LENGTH","BASH_MAX_TIMEOUT_MS","CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR","CLAUDE_CODE_API_KEY_HELPER_TTL_MS","CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","CLAUDE_CODE_DISABLE_TERMINAL_TITLE","CLAUDE_CODE_ENABLE_TELEMETRY","CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS","CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL","CLAUDE_CODE_MAX_OUTPUT_TOKENS","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SUBAGENT_MODEL","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_USE_VERTEX","DISABLE_AUTOUPDATER","DISABLE_BUG_COMMAND","DISABLE_COST_WARNINGS","DISABLE_ERROR_REPORTING","DISABLE_FEEDBACK_COMMAND","DISABLE_TELEMETRY","ENABLE_TOOL_SEARCH","MAX_MCP_OUTPUT_TOKENS","MAX_THINKING_TOKENS","MCP_TIMEOUT","MCP_TOOL_TIMEOUT","OTEL_EXPORTER_OTLP_HEADERS","OTEL_EXPORTER_OTLP_LOGS_HEADERS","OTEL_EXPORTER_OTLP_LOGS_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY","OTEL_EXPORTER_OTLP_METRICS_HEADERS","OTEL_EXPORTER_OTLP_METRICS_PROTOCOL","OTEL_EXPORTER_OTLP_PROTOCOL","OTEL_EXPORTER_OTLP_TRACES_HEADERS","OTEL_LOG_TOOL_DETAILS","OTEL_LOG_USER_PROMPTS","OTEL_LOGS_EXPORT_INTERVAL","OTEL_LOGS_EXPORTER","OTEL_METRIC_EXPORT_INTERVAL","OTEL_METRICS_EXPORTER","OTEL_METRICS_INCLUDE_ACCOUNT_UUID","OTEL_METRICS_INCLUDE_SESSION_ID","OTEL_METRICS_INCLUDE_VERSION","OTEL_RESOURCE_ATTRIBUTES","USE_BUILTIN_RIPGREP","VERTEX_REGION_CLAUDE_3_5_HAIKU","VERTEX_REGION_CLAUDE_3_5_SONNET","VERTEX_REGION_CLAUDE_3_7_SONNET","VERTEX_REGION_CLAUDE_4_0_OPUS","VERTEX_REGION_CLAUDE_4_0_SONNET","VERTEX_REGION_CLAUDE_4_1_OPUS","VERTEX_REGION_CLAUDE_4_5_SONNET","VERTEX_REGION_CLAUDE_4_6_SONNET","VERTEX_REGION_CLAUDE_HAIKU_4_5"])}});function extractDangerousSettings(settings){if(!settings)return{shellSettings:{},envVars:{},hasHooks:!1};let shellSettings={};for(let key of DANGEROUS_SHELL_SETTINGS){let value=settings[key];typeof value=="string"&&value.length>0&&(shellSettings[key]=value)}let envVars={};if(settings.env&&typeof settings.env=="object")for(let[key,value]of Object.entries(settings.env))typeof value=="string"&&value.length>0&&(SAFE_ENV_VARS2.has(key.toUpperCase())||(envVars[key]=value));let hasHooks2=settings.hooks!==void 0&&settings.hooks!==null&&typeof settings.hooks=="object"&&Object.keys(settings.hooks).length>0;return{shellSettings,envVars,hasHooks:hasHooks2,hooks:hasHooks2?settings.hooks:void 0}}function hasDangerousSettings(dangerous){return Object.keys(dangerous.shellSettings).length>0||Object.keys(dangerous.envVars).length>0||dangerous.hasHooks}function hasDangerousSettingsChanged(oldSettings,newSettings){let oldDangerous=extractDangerousSettings(oldSettings),newDangerous=extractDangerousSettings(newSettings);if(!hasDangerousSettings(newDangerous))return!1;if(!hasDangerousSettings(oldDangerous))return!0;let oldJson=jsonStringify({shellSettings:oldDangerous.shellSettings,envVars:oldDangerous.envVars,hooks:oldDangerous.hooks}),newJson=jsonStringify({shellSettings:newDangerous.shellSettings,envVars:newDangerous.envVars,hooks:newDangerous.hooks});return oldJson!==newJson}function formatDangerousSettingsList(dangerous){let items=[];for(let key of Object.keys(dangerous.shellSettings))items.push(key);for(let key of Object.keys(dangerous.envVars))items.push(key);return dangerous.hasHooks&&items.push("hooks"),items}var init_utils5=__esm({"src/components/ManagedSettingsSecurityDialog/utils.ts"(){init_managedEnvConstants();init_slowOperations();__name(extractDangerousSettings,"extractDangerousSettings");__name(hasDangerousSettings,"hasDangerousSettings");__name(hasDangerousSettingsChanged,"hasDangerousSettingsChanged");__name(formatDangerousSettingsList,"formatDangerousSettingsList")}});function ManagedSettingsSecurityDialog({settings,onAccept,onReject}){let dangerous=extractDangerousSettings(settings),settingsList=formatDangerousSettingsList(dangerous),exitState=useExitOnCtrlCDWithKeybindings();useKeybinding("confirm:no",onReject,{context:"Confirmation"});function onChange(value){if(value==="exit"){onReject();return}onAccept()}return __name(onChange,"onChange"),(0,import_jsx_runtime58.jsx)(PermissionDialog,{color:"warning",titleColor:"warning",title:"Managed settings require approval",children:(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,paddingTop:1,children:[(0,import_jsx_runtime58.jsx)(ThemedText,{children:"Your organization has configured managed settings that could allow execution of arbitrary code or interception of your prompts and responses."}),(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"Settings requiring approval:"}),settingsList.map((item,index)=>(0,import_jsx_runtime58.jsx)(ThemedBox_default,{paddingLeft:2,children:(0,import_jsx_runtime58.jsxs)(ThemedText,{children:[(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"\xB7 "}),(0,import_jsx_runtime58.jsx)(ThemedText,{children:item})]})},index))]}),(0,import_jsx_runtime58.jsx)(ThemedText,{children:"Only accept if you trust your organization's IT administration and expect these settings to be configured."}),(0,import_jsx_runtime58.jsx)(Select,{options:[{label:"Yes, I trust these settings",value:"accept"},{label:"No, exit Clavue",value:"exit"}],onChange:value=>onChange(value),onCancel:()=>onChange("exit")}),(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:exitState.pending?(0,import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment,{children:["Press ",exitState.keyName," again to exit"]}):(0,import_jsx_runtime58.jsx)(import_jsx_runtime58.Fragment,{children:"Enter to confirm \xB7 Esc to exit"})})]})})}var import_jsx_runtime58,init_ManagedSettingsSecurityDialog=__esm({"src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx"(){init_useExitOnCtrlCDWithKeybindings();init_ink2();init_useKeybinding();init_CustomSelect();init_PermissionDialog();init_utils5();import_jsx_runtime58=__toESM(require_jsx_runtime());__name(ManagedSettingsSecurityDialog,"ManagedSettingsSecurityDialog")}});function useKeybindingWarnings(warnings,isReload){let{addNotification,removeNotification}=useNotifications();(0,import_react53.useEffect)(()=>{let notificationKey="keybinding-config-warning";if(warnings.length===0){removeNotification(notificationKey);return}let errorCount=count2(warnings,w2=>w2.severity==="error"),warnCount=count2(warnings,w2=>w2.severity==="warning"),message;errorCount>0&&warnCount>0?message=`Found ${errorCount} keybinding ${plural(errorCount,"error")} and ${warnCount} ${plural(warnCount,"warning")}`:errorCount>0?message=`Found ${errorCount} keybinding ${plural(errorCount,"error")}`:message=`Found ${warnCount} keybinding ${plural(warnCount,"warning")}`,message+=" \xB7 /doctor for details",addNotification({key:notificationKey,text:message,color:errorCount>0?"error":"warning",priority:errorCount>0?"immediate":"high",timeoutMs:6e4})},[warnings,isReload,addNotification,removeNotification])}function KeybindingSetup({children}){let[{bindings,warnings},setLoadResult]=(0,import_react53.useState)(()=>{let result2=loadKeybindingsSyncWithWarnings();return logForDebugging(`[keybindings] KeybindingSetup initialized with ${result2.bindings.length} bindings, ${result2.warnings.length} warnings`),result2}),[isReload,setIsReload]=(0,import_react53.useState)(!1);useKeybindingWarnings(warnings,isReload);let pendingChordRef=(0,import_react53.useRef)(null),[pendingChord,setPendingChordState]=(0,import_react53.useState)(null),chordTimeoutRef=(0,import_react53.useRef)(null),handlerRegistryRef=(0,import_react53.useRef)(new Map),activeContextsRef=(0,import_react53.useRef)(new Set),registerActiveContext=(0,import_react53.useCallback)(context2=>{activeContextsRef.current.add(context2)},[]),unregisterActiveContext=(0,import_react53.useCallback)(context2=>{activeContextsRef.current.delete(context2)},[]),clearChordTimeout=(0,import_react53.useCallback)(()=>{chordTimeoutRef.current&&(clearTimeout(chordTimeoutRef.current),chordTimeoutRef.current=null)},[]),setPendingChord=(0,import_react53.useCallback)(pending=>{clearChordTimeout(),pending!==null&&(chordTimeoutRef.current=setTimeout((pendingChordRef2,setPendingChordState2)=>{logForDebugging("[keybindings] Chord timeout - cancelling"),pendingChordRef2.current=null,setPendingChordState2(null)},CHORD_TIMEOUT_MS,pendingChordRef,setPendingChordState)),pendingChordRef.current=pending,setPendingChordState(pending)},[clearChordTimeout]);return(0,import_react53.useEffect)(()=>{initializeKeybindingWatcher();let unsubscribe2=subscribeToKeybindingChanges(result2=>{setIsReload(!0),setLoadResult(result2),logForDebugging(`[keybindings] Reloaded: ${result2.bindings.length} bindings, ${result2.warnings.length} warnings`)});return()=>{unsubscribe2(),clearChordTimeout()}},[clearChordTimeout]),(0,import_jsx_runtime59.jsxs)(KeybindingProvider,{bindings,pendingChordRef,pendingChord,setPendingChord,activeContexts:activeContextsRef.current,registerActiveContext,unregisterActiveContext,handlerRegistryRef,children:[(0,import_jsx_runtime59.jsx)(ChordInterceptor,{bindings,pendingChordRef,setPendingChord,activeContexts:activeContextsRef.current,handlerRegistryRef}),children]})}function ChordInterceptor({bindings,pendingChordRef,setPendingChord,activeContexts,handlerRegistryRef}){let handleInput=(0,import_react53.useCallback)((input,key,event)=>{if((key.wheelUp||key.wheelDown)&&pendingChordRef.current===null)return;let registry2=handlerRegistryRef.current,handlerContexts=new Set;if(registry2)for(let handlers of registry2.values())for(let registration of handlers)handlerContexts.add(registration.context);let contexts=[...handlerContexts,...activeContexts,"Global"],wasInChord=pendingChordRef.current!==null,result2=resolveKeyWithChordState(input,key,contexts,bindings,pendingChordRef.current);switch(result2.type){case"chord_started":setPendingChord(result2.pending),event.stopImmediatePropagation();break;case"match":{if(setPendingChord(null),wasInChord){let contextsSet=new Set(contexts);if(registry2){let handlers=registry2.get(result2.action);if(handlers&&handlers.size>0){for(let registration of handlers)if(contextsSet.has(registration.context)){registration.handler(),event.stopImmediatePropagation();break}}}}break}case"chord_cancelled":setPendingChord(null),event.stopImmediatePropagation();break;case"unbound":setPendingChord(null),event.stopImmediatePropagation();break;case"none":break}},[bindings,pendingChordRef,setPendingChord,activeContexts,handlerRegistryRef]);return use_input_default(handleInput),null}var import_react53,import_jsx_runtime59,CHORD_TIMEOUT_MS,init_KeybindingProviderSetup=__esm({"src/keybindings/KeybindingProviderSetup.tsx"(){import_react53=__toESM(require_react());init_notifications();init_ink2();init_array4();init_debug();init_stringUtils();init_KeybindingContext();init_loadUserBindings();init_resolver();import_jsx_runtime59=__toESM(require_jsx_runtime()),CHORD_TIMEOUT_MS=1e3;__name(useKeybindingWarnings,"useKeybindingWarnings");__name(KeybindingSetup,"KeybindingSetup");__name(ChordInterceptor,"ChordInterceptor")}});function quoteResumeTarget(target){return`"${target.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function shellQuote(value){return SAFE_SHELL_TOKEN.test(value)?value:`'${value.replace(/'/g,`'"'"'`)}'`}function getResumeCommand(target){return`${CLI_COMMAND_NAME} --resume ${target}`}function getSessionResumeCommand({sessionId,customTitle}){let trimmedTitle=customTitle?.trim();return getResumeCommand(trimmedTitle?quoteResumeTarget(trimmedTitle):sessionId)}function getCrossProjectResumeCommand(projectPath,sessionId){return`cd ${shellQuote(projectPath)} && ${getResumeCommand(sessionId)}`}var SAFE_SHELL_TOKEN,init_resumeCommand=__esm({"src/utils/resumeCommand.ts"(){init_branding();SAFE_SHELL_TOKEN=/^[A-Za-z0-9_./:@%+=,-]+$/;__name(quoteResumeTarget,"quoteResumeTarget");__name(shellQuote,"shellQuote");__name(getResumeCommand,"getResumeCommand");__name(getSessionResumeCommand,"getSessionResumeCommand");__name(getCrossProjectResumeCommand,"getCrossProjectResumeCommand")}});import{writeSync as writeSync2}from"fs";function cleanupTerminalModes(){if(process.stdout.isTTY)try{writeSync2(1,DISABLE_MOUSE_TRACKING);let inst=instances_default.get(process.stdout);if(inst?.isAltScreenActive)try{inst.unmount()}catch{writeSync2(1,EXIT_ALT_SCREEN)}inst?.drainStdin(),inst?.detachForShutdown(),writeSync2(1,DISABLE_MODIFY_OTHER_KEYS),writeSync2(1,DISABLE_KITTY_KEYBOARD),writeSync2(1,DFE),writeSync2(1,DBP),writeSync2(1,SHOW_CURSOR),writeSync2(1,CLEAR_ITERM2_PROGRESS),supportsTabStatus()&&writeSync2(1,wrapForMultiplexer(CLEAR_TAB_STATUS)),isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE)||(process.platform==="win32"?process.title="":writeSync2(1,CLEAR_TERMINAL_TITLE))}catch{}}function printResumeHint(){if(!resumeHintPrinted&&process.stdout.isTTY&&getIsInteractive()&&!isSessionPersistenceDisabled())try{let sessionId=getSessionId();if(!sessionIdExists(sessionId))return;let customTitle=getCurrentSessionTitle(sessionId),resumeCommand=getSessionResumeCommand({sessionId,customTitle});writeSync2(1,source_default.dim(`
|
|
1730
|
+
`}function formatBackupTimestamp(date5=new Date){let pad2=__name(value=>value.toString().padStart(2,"0"),"pad");return[date5.getFullYear(),"-",pad2(date5.getMonth()+1),"-",pad2(date5.getDate()),"_",pad2(date5.getHours()),"-",pad2(date5.getMinutes()),"-",pad2(date5.getSeconds())].join("")}function createBackup(configPath){if(!existsSync5(configPath))return;let backupPath=join56(dirname27(configPath),`config.backup.${formatBackupTimestamp()}.toml`);return copyFileSync2(configPath,backupPath),backupPath}function writeCcjkProviderConfig(config3,configPath=getCcjkProviderConfigPath()){mkdirSync4(dirname27(configPath),{recursive:!0});let backupPath=createBackup(configPath);return writeFileSync4(configPath,serializeCcjkProviderConfig(config3),"utf8"),{backupPath}}var init_ccjkProviderConfig=__esm({"src/utils/ccjkProviderConfig.ts"(){__name(getCcjkProviderConfigPath,"getCcjkProviderConfigPath");__name(stripTomlComment2,"stripTomlComment");__name(parseTomlPathSegments2,"parseTomlPathSegments");__name(parseTomlStringValue2,"parseTomlStringValue");__name(normalizeAuthType2,"normalizeAuthType");__name(normalizeProfile,"normalizeProfile");__name(readCcjkProviderConfig,"readCcjkProviderConfig");__name(escapeTomlBasicString2,"escapeTomlBasicString");__name(formatTomlPathSegment,"formatTomlPathSegment");__name(serializeCcjkProviderConfig,"serializeCcjkProviderConfig");__name(formatBackupTimestamp,"formatBackupTimestamp");__name(createBackup,"createBackup");__name(writeCcjkProviderConfig,"writeCcjkProviderConfig")}});function getAuthTypeLabel(authType){return authType==="auth_token"?"Auth Token":"API Key"}function getManageActionLabel(action){return MANAGE_ACTION_OPTIONS.find(option=>option.value===action)?.label??""}function getModelModeOptionLabel(modelMode){return MODEL_MODE_OPTIONS.find(option=>option.value===modelMode)?.label??getProviderModelModeLabel(modelMode)}function getChooseProfileQuestion(action){return action==="edit"?"\u9009\u62E9\u8981\u7F16\u8F91\u7684\u914D\u7F6E":action==="copy"?"\u9009\u62E9\u8981\u590D\u5236\u7684\u914D\u7F6E":"\u9009\u62E9\u8981\u5220\u9664\u7684\u914D\u7F6E"}function getProfileOptionLabel(profile,index){return`${index+1}. ${profile.name} (${getAuthTypeLabel(profile.authType)})`}function getProviderProfileKey(profile){return profile.id.trim()||profile.name.trim().toLowerCase()}function getCcjkProfileFromProviderProfile(profile){let slots=getProviderModelSlotDefaults(profile.modelRouting);return{id:profile.id,name:profile.name,authType:profile.authType,apiKey:profile.credential,baseUrl:profile.baseUrl,primaryModel:profile.modelRouting.primaryModel,defaultHaikuModel:slots.haikuModel,defaultSonnetModel:slots.sonnetModel,defaultOpusModel:slots.opusModel}}function loadManagerProfiles(){let ccjkConfig=readCcjkProviderConfig(),providerProfiles=getProviderProfiles(),providerProfileByKey=new Map(providerProfiles.map(profile=>[getProviderProfileKey(profile),profile])),merged=new Map;for(let profile of ccjkConfig.profiles){let key=profile.id.trim();merged.set(key,{...profile,providerProfile:providerProfileByKey.get(key)})}for(let profile of providerProfiles){let key=getProviderProfileKey(profile);merged.has(key)||merged.set(key,{...getCcjkProfileFromProviderProfile(profile),providerProfile:profile})}return[...merged.values()]}function getManagerProfileModelMode(profile){if(profile.providerProfile?.modelMode)return profile.providerProfile.modelMode;let modelRouting=createCustomProviderModelRouting({primaryModel:profile.primaryModel,haikuModel:profile.defaultHaikuModel,sonnetModel:profile.defaultSonnetModel,opusModel:profile.defaultOpusModel}),providerId=inferProviderPresetId(profile.baseUrl)??"custom";return getProviderModelModeForProfile({providerId,modelRouting})}function createDraft(profile,modelMode="openai_native"){let existingModelMode=profile?getManagerProfileModelMode(profile):modelMode,shouldUseModeDefaults=!profile||existingModelMode!==modelMode,defaults3=createDefaultProviderModeSlotValues(modelMode);return{name:profile?.name??"",authType:profile?.authType??"api_key",apiKey:profile?.apiKey??"",baseUrl:profile?.baseUrl??"",modelMode,primaryModel:shouldUseModeDefaults?defaults3.primaryModel:profile?.primaryModel??defaults3.primaryModel,defaultHaikuModel:shouldUseModeDefaults?defaults3.haikuModel:profile?.defaultHaikuModel??defaults3.haikuModel,defaultSonnetModel:shouldUseModeDefaults?defaults3.sonnetModel:profile?.defaultSonnetModel??defaults3.sonnetModel,defaultOpusModel:shouldUseModeDefaults?defaults3.opusModel:profile?.defaultOpusModel??defaults3.opusModel}}function createCopyDraft(profile,modelMode){return{...createDraft(profile,modelMode),name:`${profile.name} Copy`}}function normalizeProfileId(value){return value.trim().replace(/[^A-Za-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"")||"custom"}function createUniqueProfileId(name,profiles,allowedExistingId){let baseId=normalizeProfileId(name),existingIds=new Set(profiles.map(profile=>profile.id.trim()).filter(id=>id&&id!==allowedExistingId));if(!existingIds.has(baseId))return baseId;for(let index=2;;index+=1){let candidate=`${baseId}-${index}`;if(!existingIds.has(candidate))return candidate}}function validateDraft(draft,profiles,originalProfile){let name=draft.name.trim(),baseUrl=draft.baseUrl.trim(),apiKey=draft.apiKey.trim();if(!name)return{message:"\u914D\u7F6E\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\u3002",focusField:"name"};if(!/^[A-Za-z0-9 ._-]+$/u.test(name))return{message:"\u914D\u7F6E\u540D\u79F0\u4EC5\u9650\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7A7A\u683C\u3001._-\u3002",focusField:"name"};if(profiles.some(profile=>profile.id!==originalProfile?.id&&profile.name.trim().toLowerCase()===name.toLowerCase()))return{message:"\u5DF2\u6709\u540C\u540D\u914D\u7F6E\uFF0C\u8BF7\u6362\u4E00\u4E2A\u914D\u7F6E\u540D\u79F0\u3002",focusField:"name"};if(!/^https?:\/\//iu.test(baseUrl))return{message:"API\u57FA\u7840URL\u5FC5\u987B\u4EE5 http:// \u6216 https:// \u5F00\u5934\u3002",focusField:"baseUrl"};if(!apiKey)return{message:"API\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A\u3002",focusField:"apiKey"};if(isPlaceholderProviderCredential(apiKey))return{message:"API\u5BC6\u94A5\u770B\u8D77\u6765\u50CF\u5360\u4F4D\u7B26\uFF0C\u8BF7\u8F93\u5165\u771F\u5B9E\u53EF\u7528\u7684\u5BC6\u94A5\u3002",focusField:"apiKey"};if(!draft.primaryModel.trim())return{message:"\u4E3B\u6A21\u578B\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u6839\u636E\u6240\u9009\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F\u586B\u5199\u53EF\u7528\u6A21\u578B\u3002",focusField:"primaryModel"};let routingIssues=validateProviderModeRouting(draft.modelMode,createCustomProviderModelRouting({primaryModel:draft.primaryModel,haikuModel:draft.defaultHaikuModel,sonnetModel:draft.defaultSonnetModel,opusModel:draft.defaultOpusModel}),{language:"zh",requireExplicitHybridSelections:draft.modelMode==="hybrid_compatible"}),firstError=routingIssues.find(issue2=>issue2.level==="error");return firstError?{message:firstError.message,focusField:getEditFieldForModeSlot(firstError.slot)}:(routingIssues.length>0&&routingIssues.every(issue2=>issue2.level==="warn"),null)}function getEditFieldForModeSlot(slot){return slot==="haiku"?"defaultHaikuModel":slot==="sonnet"?"defaultSonnetModel":slot==="opus"?"defaultOpusModel":"primaryModel"}function getDefaultValueForEditField(modelMode,field){let defaults3=createDefaultProviderModeSlotValues(modelMode);return field==="primaryModel"?defaults3.primaryModel:field==="defaultHaikuModel"?defaults3.haikuModel:field==="defaultSonnetModel"?defaults3.sonnetModel:field==="defaultOpusModel"?defaults3.opusModel:""}function resolveDraftAuthType(profile){let inferredProviderId=inferProviderPresetId(profile.baseUrl);return!inferredProviderId||inferredProviderId==="custom"?profile.authType:getProviderPreset(inferredProviderId).authType}function createProviderProfileFromDraft(profile,modelMode,originalProviderProfile){let now2=Date.now(),modelRouting=createCustomProviderModelRouting({primaryModel:profile.primaryModel,haikuModel:profile.defaultHaikuModel,sonnetModel:profile.defaultSonnetModel,opusModel:profile.defaultOpusModel}),providerId=inferProviderPresetId(profile.baseUrl)??"custom",authType=resolveDraftAuthType(profile);return{id:profile.id,name:profile.name,providerId,modelMode,baseUrl:profile.baseUrl,authType,credential:profile.apiKey,modelRouting,provenance:originalProviderProfile?.provenance??{kind:"manual"},createdAt:originalProviderProfile?.createdAt??now2,updatedAt:now2}}function saveDraft(draft,action,originalProfile){let profiles=loadManagerProfiles(),originalId=action==="edit"?originalProfile?.id:void 0,nextProfileId=createUniqueProfileId(draft.name,profiles,originalId),inferredProviderId=inferProviderPresetId(draft.baseUrl),authType=!inferredProviderId||inferredProviderId==="custom"?draft.authType:getProviderPreset(inferredProviderId).authType,nextProfile={id:nextProfileId,name:draft.name.trim(),authType,apiKey:draft.apiKey.trim(),baseUrl:draft.baseUrl.trim(),primaryModel:draft.primaryModel.trim(),defaultHaikuModel:draft.defaultHaikuModel.trim(),defaultSonnetModel:draft.defaultSonnetModel.trim(),defaultOpusModel:draft.defaultOpusModel.trim()},repairResult=repairProviderProfileRoutingForMode(createProviderProfileFromDraft(nextProfile,draft.modelMode,action==="edit"?originalProfile?.providerProfile:void 0)),savedProfile=repairResult.repaired?getCcjkProfileFromProviderProfile(repairResult.profile):nextProfile,nextProfiles=[...profiles],existingIndex=originalId===void 0?-1:nextProfiles.findIndex(profile=>profile.id===originalId);existingIndex>=0?nextProfiles[existingIndex]={...savedProfile,providerProfile:originalProfile?.providerProfile}:nextProfiles.push(savedProfile);let writeResult=writeCcjkProviderConfig({currentProfile:savedProfile.id,profiles:nextProfiles.map(profile=>({id:profile.id,name:profile.name,authType:profile.authType,apiKey:profile.apiKey,baseUrl:profile.baseUrl,primaryModel:profile.primaryModel,defaultHaikuModel:profile.defaultHaikuModel,defaultSonnetModel:profile.defaultSonnetModel,defaultOpusModel:profile.defaultOpusModel}))});return originalId&&originalId!==nextProfile.id&&deleteProviderProfile(originalId),saveProviderProfile(repairResult.profile,{activate:!0}),markProviderOnboardingComplete(),{profile:savedProfile,backupPath:writeResult.backupPath,repairMessages:repairResult.repaired?repairResult.messages:[]}}function deleteManagerProfile(profile){let profiles=loadManagerProfiles().filter(candidate=>candidate.id!==profile.id),currentProfile=readCcjkProviderConfig().currentProfile?.trim(),nextCurrentProfile=currentProfile&¤tProfile!==profile.id?currentProfile:void 0,writeResult=writeCcjkProviderConfig({currentProfile:nextCurrentProfile,profiles});return deleteProviderProfile(profile.id),{backupPath:writeResult.backupPath}}function PromptSelect({question,options,defaultIndex=0,onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react43.useState)(defaultIndex);return use_input_default((input,key)=>{if(key.upArrow){setSelectedIndex(index=>index<=0?options.length-1:index-1);return}if(key.downArrow){setSelectedIndex(index=>(index+1)%options.length);return}if(key.return){let option=options[selectedIndex];option&&onSelect(option.value);return}let numericIndex=Number.parseInt(input,10);Number.isInteger(numericIndex)&&numericIndex>=1&&numericIndex<=options.length&&onSelect(options[numericIndex-1].value)}),(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," ",question," ",(0,import_jsx_runtime49.jsx)(ThemedText,{dimColor:!0,children:"(Use arrow keys)"})]}),options.map((option,index)=>(0,import_jsx_runtime49.jsxs)(ThemedText,{color:index===selectedIndex?"suggestion":void 0,children:[index===selectedIndex?figures_default.pointer:" "," ",option.label]},option.value))]})}function PromptTextInput({label,value,onChange,onSubmit}){let[cursorOffset,setCursorOffset]=(0,import_react43.useState)(value.length);return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," ",label," "]}),(0,import_jsx_runtime49.jsx)(TextInput,{value,onChange,onSubmit,focus:!0,showCursor:!0,multiline:!1,columns:80,cursorOffset,onChangeCursorOffset:setCursorOffset,disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0})]})}function ReturnMainPrompt({onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react43.useState)(0);return use_input_default((input,key)=>{if(key.leftArrow||key.rightArrow||key.tab){setSelectedIndex(index=>index===0?1:0);return}if(input.toLowerCase()==="n"){onSelect(!1);return}if(input.toLowerCase()==="y"){onSelect(!0);return}key.return&&onSelect(selectedIndex===1)}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," \u8FD4\u56DE\u4E3B\u83DC\u5355\uFF1F"," ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===0?"suggestion":void 0,children:"no"})," / ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===1?"suggestion":void 0,children:"yes"})]})}function YesNoPrompt({question,defaultValue=!1,onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react43.useState)(defaultValue?1:0);return use_input_default((input,key)=>{if(key.leftArrow||key.rightArrow||key.tab){setSelectedIndex(index=>index===0?1:0);return}if(input.toLowerCase()==="n"){onSelect(!1);return}if(input.toLowerCase()==="y"){onSelect(!0);return}key.return&&onSelect(selectedIndex===1)}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{bold:!0,children:"?"})," ",question," ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===0?"suggestion":void 0,children:"no"})," / ",(0,import_jsx_runtime49.jsx)(ThemedText,{color:selectedIndex===1?"suggestion":void 0,children:"yes"})]})}function CompletedLine({question,answer}){return(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{color:"success",children:"\u2714"})," ",question," ",answer]})}function ManagerHeader({count:count4,modelMode}){return(0,import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment,{children:[(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u{1F511} API \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",answer:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E"}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F:",answer:getModelModeOptionLabel(modelMode)}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u{1F4CB} Clavue \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:["\u5F53\u524D\u914D\u7F6E\u6570\u91CF\uFF1A",count4]})]})}function renderCompletedFields(draft,untilIndex){return EDIT_FIELDS.slice(0,untilIndex).map(field=>(0,import_jsx_runtime49.jsx)(CompletedLine,{question:FIELD_LABELS[field],answer:draft[field]},field))}function getEditTitle(action){return action==="add"?"\u6DFB\u52A0\u914D\u7F6E":action==="copy"?"\u590D\u5236\u914D\u7F6E":"\u7F16\u8F91\u914D\u7F6E"}function createReturnStage(result2,lines){return{kind:"return-main",result:result2,lines}}function ProviderConfigManager({onDone}){let[stage,setStage]=(0,import_react43.useState)({kind:"mode"}),profiles=(0,import_react43.useMemo)(()=>loadManagerProfiles(),[stage]),profileOptions=profiles.map((profile,index)=>({label:getProfileOptionLabel(profile,index),value:profile.id}));function handleModeSelection(value){if(value==="custom"){setStage({kind:"model-mode"});return}if(value==="official"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u9009\u62E9\u4F7F\u7528\u5B98\u65B9\u767B\u5F55\u3002\u8BF7\u8FD0\u884C `clavue auth login` \u5B8C\u6210\u5B98\u65B9\u767B\u5F55\u3002"},["\u2714 \u5DF2\u9009\u62E9\u4F7F\u7528\u5B98\u65B9\u767B\u5F55","\u4E0B\u4E00\u6B65\uFF1A\u9000\u51FA\u540E\u8FD0\u884C `clavue auth login` \u5B8C\u6210\u5B98\u65B9\u767B\u5F55\u3002","\u5982\u9700\u81EA\u5B9A\u4E49 API\uFF0C\u8BF7\u8FD4\u56DE\u4E3B\u83DC\u5355\u9009\u62E9\u201C\u81EA\u5B9A\u4E49 API \u914D\u7F6E\u201D\u3002"]));return}if(value==="ccr"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u9009\u62E9\u4F7F\u7528 CCR \u4EE3\u7406\u3002\u8BF7\u6309 CCR \u4EE3\u7406\u8BF4\u660E\u5B8C\u6210\u914D\u7F6E\u3002"},["\u2714 \u5DF2\u9009\u62E9\u4F7F\u7528 CCR \u4EE3\u7406","\u4E0B\u4E00\u6B65\uFF1A\u6309 CCR \u4EE3\u7406\u8BF4\u660E\u5B8C\u6210\u672C\u673A\u4EE3\u7406\u914D\u7F6E\uFF0C\u7136\u540E\u91CD\u65B0\u8FD0\u884C `clavue`\u3002","\u5982\u679C\u4F60\u53EA\u60F3\u586B\u5199 API URL \u548C\u5BC6\u94A5\uFF0C\u8BF7\u8FD4\u56DE\u4E3B\u83DC\u5355\u9009\u62E9\u201C\u81EA\u5B9A\u4E49 API \u914D\u7F6E\u201D\u3002"]));return}setStage(createReturnStage({configured:!1,message:"\u5DF2\u8DF3\u8FC7 API \u914D\u7F6E\u3002"},["\u2714 \u5DF2\u8DF3\u8FC7 API \u914D\u7F6E","\u7A0D\u540E\u53EF\u8FD0\u884C `clavue provider` \u6216\u5728\u4F1A\u8BDD\u4E2D\u8F93\u5165 `/provider` \u7EE7\u7EED\u914D\u7F6E\u3002"]))}__name(handleModeSelection,"handleModeSelection");function handleModelModeSelection(modelMode){setStage({kind:"manage",modelMode})}__name(handleModelModeSelection,"handleModelModeSelection");function handleManageSelection(modelMode,value){if(value==="skip"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u8DF3\u8FC7 API \u914D\u7F6E\u3002"},["\u2714 \u5DF2\u8DF3\u8FC7 API \u914D\u7F6E","\u7A0D\u540E\u53EF\u8FD0\u884C `clavue provider` \u6216\u5728\u4F1A\u8BDD\u4E2D\u8F93\u5165 `/provider` \u7EE7\u7EED\u914D\u7F6E\u3002"]));return}if(value==="add"){setStage({kind:"edit",modelMode,action:"add",draft:createDraft(void 0,modelMode),fieldIndex:0});return}if(profiles.length===0){setStage({kind:"manage",modelMode,statusMessage:"\u5F53\u524D\u6CA1\u6709\u53EF\u64CD\u4F5C\u7684\u914D\u7F6E\uFF0C\u8BF7\u5148\u6DFB\u52A0\u914D\u7F6E\u3002"});return}setStage({kind:"choose-profile",modelMode,action:value})}__name(handleManageSelection,"handleManageSelection");function handleProfileSelection(modelMode,action,profileId){let profile=profiles.find(candidate=>candidate.id===profileId);if(!profile){setStage({kind:"manage",modelMode,statusMessage:"\u9009\u62E9\u7684\u914D\u7F6E\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002"});return}if(action==="delete"){setStage({kind:"confirm-delete",modelMode,profile});return}setStage({kind:"edit",modelMode,action,originalProfile:profile,draft:action==="copy"?createCopyDraft(profile,modelMode):createDraft(profile,modelMode),fieldIndex:0})}__name(handleProfileSelection,"handleProfileSelection");function updateDraftField(field,value){setStage(current=>current.kind==="edit"?{...current,draft:{...current.draft,[field]:value},errorMessage:void 0}:current)}__name(updateDraftField,"updateDraftField");function submitDraftField(value){setStage(current=>{if(current.kind!=="edit")return current;let field=EDIT_FIELDS[current.fieldIndex];if(!field)return current;let trimmedValue=value.trim(),fallbackValue=(field==="primaryModel"||field==="defaultHaikuModel"||field==="defaultSonnetModel"||field==="defaultOpusModel")&&!trimmedValue?current.originalProfile?.[field]||getDefaultValueForEditField(current.draft.modelMode,field):trimmedValue,nextDraft={...current.draft,[field]:fallbackValue};if(current.fieldIndex<EDIT_FIELDS.length-1)return{...current,draft:nextDraft,fieldIndex:current.fieldIndex+1,errorMessage:void 0};let errorMessage4=validateDraft(nextDraft,profiles,current.action==="edit"?current.originalProfile:void 0);if(errorMessage4){let focusIndex=EDIT_FIELDS.findIndex(draftField=>draftField===errorMessage4.focusField);return{...current,draft:nextDraft,fieldIndex:focusIndex>=0?focusIndex:0,errorMessage:errorMessage4.message}}try{let{profile,backupPath,repairMessages}=saveDraft(nextDraft,current.action,current.originalProfile),lines=[current.action==="edit"?`\u2714 \u5DF2\u6210\u529F\u66F4\u65B0\u914D\u7F6E\uFF1A${profile.name}`:`\u2714 \u5DF2\u6210\u529F\u4FDD\u5B58\u914D\u7F6E\uFF1A${profile.name}`,...repairMessages.map(message=>`\u26A0 ${message}`),...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],`\u2714 \u5DF2\u5C06\u914D\u7F6E ${profile.name} \u8BBE\u4E3A\u9ED8\u8BA4`,"\u2714 \u8BBE\u7F6E\u5DF2\u751F\u6548"];return{kind:"return-main",result:{configured:!0},lines}}catch(error40){return{...current,draft:nextDraft,errorMessage:error40 instanceof Error?error40.message:"\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"}}})}__name(submitDraftField,"submitDraftField");function confirmDelete(confirmed){if(stage.kind==="confirm-delete"){if(!confirmed){setStage({kind:"manage",modelMode:stage.modelMode});return}try{let{backupPath}=deleteManagerProfile(stage.profile);setStage({kind:"return-main",result:{configured:!0},lines:[`\u2714 \u5DF2\u5220\u9664\u914D\u7F6E\uFF1A${stage.profile.name}`,...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],"\u2714 \u8BBE\u7F6E\u5DF2\u751F\u6548"]})}catch(error40){setStage({kind:"manage",modelMode:stage.modelMode,statusMessage:error40 instanceof Error?error40.message:"\u5220\u9664\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"})}}}__name(confirmDelete,"confirmDelete");function handleReturnMain(returnToMain){if(stage.kind==="return-main"){if(returnToMain){setStage({kind:"mode"});return}onDone(stage.result.configured,stage.result.message)}}if(__name(handleReturnMain,"handleReturnMain"),stage.kind==="mode")return(0,import_jsx_runtime49.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",options:API_MODE_OPTIONS,defaultIndex:1,onSelect:handleModeSelection});if(stage.kind==="model-mode")return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u{1F511} API \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",answer:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E"}),(0,import_jsx_runtime49.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F:",options:MODEL_MODE_OPTIONS,onSelect:handleModelModeSelection})]});if(stage.kind==="manage")return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),stage.statusMessage?(0,import_jsx_runtime49.jsx)(ThemedText,{color:"warning",children:stage.statusMessage}):null,(0,import_jsx_runtime49.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",options:MANAGE_ACTION_OPTIONS,onSelect:value=>handleManageSelection(stage.modelMode,value)})]});if(stage.kind==="choose-profile")return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),(0,import_jsx_runtime49.jsx)(PromptSelect,{question:getChooseProfileQuestion(stage.action),options:profileOptions,onSelect:profileId=>handleProfileSelection(stage.modelMode,stage.action,profileId)})]});if(stage.kind==="confirm-delete"){let selectedProfileIndex=profiles.findIndex(profile=>profile.id===stage.profile.id);return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel("delete")}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:getChooseProfileQuestion("delete"),answer:getProfileOptionLabel(stage.profile,selectedProfileIndex)}),(0,import_jsx_runtime49.jsx)(YesNoPrompt,{question:`\u786E\u8BA4\u5220\u9664\u914D\u7F6E ${stage.profile.name}\uFF1F`,onSelect:confirmDelete})]})}if(stage.kind==="edit"){let currentField=EDIT_FIELDS[stage.fieldIndex]??"name",selectedProfileIndex=stage.originalProfile?profiles.findIndex(profile=>profile.id===stage.originalProfile?.id):-1;return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime49.jsx)(ManagerHeader,{count:profiles.length,modelMode:stage.modelMode}),(0,import_jsx_runtime49.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),stage.originalProfile?(0,import_jsx_runtime49.jsx)(CompletedLine,{question:getChooseProfileQuestion(stage.action==="add"?"edit":stage.action),answer:getProfileOptionLabel(stage.originalProfile,selectedProfileIndex)}):null,(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsxs)(ThemedText,{children:[getEditTitle(stage.action),"\uFF1A",stage.originalProfile?.name??stage.draft.name]}),renderCompletedFields(stage.draft,stage.fieldIndex),stage.errorMessage?(0,import_jsx_runtime49.jsx)(ThemedText,{color:"error",children:stage.errorMessage}):null,(0,import_jsx_runtime49.jsx)(PromptTextInput,{label:FIELD_LABELS[currentField],value:stage.draft[currentField],onChange:value=>updateDraftField(currentField,value),onSubmit:submitDraftField},currentField)]})}return(0,import_jsx_runtime49.jsxs)(ThemedBox_default,{flexDirection:"column",children:[stage.lines.map(line=>(0,import_jsx_runtime49.jsx)(ThemedText,{children:line},line)),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"}),(0,import_jsx_runtime49.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime49.jsx)(ReturnMainPrompt,{onSelect:handleReturnMain})]})}var import_react43,import_jsx_runtime49,API_MODE_OPTIONS,MODEL_MODE_OPTIONS,MANAGE_ACTION_OPTIONS,EDIT_FIELDS,FIELD_LABELS,init_ProviderConfigManager=__esm({"src/components/ProviderConfigManager.tsx"(){init_figures();import_react43=__toESM(require_react());init_TextInput();init_ink2();init_ccjkProviderConfig();init_providerCredentials();init_providerModes();init_providerProfiles();import_jsx_runtime49=__toESM(require_jsx_runtime()),API_MODE_OPTIONS=[{label:"\u4F7F\u7528\u5B98\u65B9\u767B\u5F55",value:"official"},{label:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E",value:"custom"},{label:"\u4F7F\u7528 CCR \u4EE3\u7406",value:"ccr"},{label:"\u8DF3\u8FC7\uFF08\u7A0D\u540E\u624B\u52A8\u914D\u7F6E\uFF09",value:"skip"}],MODEL_MODE_OPTIONS=[{label:"OpenAI / GPT \u6A21\u578B\uFF08GPT-5.x\u3001Codex\uFF09",value:"openai_native"},{label:"Claude \u6A21\u578B\uFF08Anthropic / Claude \u517C\u5BB9\uFF09",value:"anthropic_native"},{label:"\u6DF7\u5408\u6A21\u578B\uFF08OpenAI + Claude \u5206\u69FD\uFF09",value:"hybrid_compatible"}],MANAGE_ACTION_OPTIONS=[{label:"1. \u6DFB\u52A0\u914D\u7F6E",value:"add"},{label:"2. \u7F16\u8F91\u914D\u7F6E",value:"edit"},{label:"3. \u590D\u5236\u914D\u7F6E",value:"copy"},{label:"4. \u5220\u9664\u914D\u7F6E",value:"delete"},{label:"5. \u8DF3\u8FC7",value:"skip"}],EDIT_FIELDS=["name","baseUrl","apiKey","primaryModel","defaultHaikuModel","defaultSonnetModel","defaultOpusModel"],FIELD_LABELS={name:"\u914D\u7F6E\u540D\u79F0\uFF08\u4EC5\u9650\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7A7A\u683C\u3001._-\uFF09",baseUrl:"\u8BF7\u8F93\u5165API\u57FA\u7840URL",apiKey:"\u8BF7\u8F93\u5165API\u5BC6\u94A5",primaryModel:"\u4E3B\u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09",defaultHaikuModel:"Haiku \u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09",defaultSonnetModel:"Sonnet \u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09",defaultOpusModel:"Opus \u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09"};__name(getAuthTypeLabel,"getAuthTypeLabel");__name(getManageActionLabel,"getManageActionLabel");__name(getModelModeOptionLabel,"getModelModeOptionLabel");__name(getChooseProfileQuestion,"getChooseProfileQuestion");__name(getProfileOptionLabel,"getProfileOptionLabel");__name(getProviderProfileKey,"getProviderProfileKey");__name(getCcjkProfileFromProviderProfile,"getCcjkProfileFromProviderProfile");__name(loadManagerProfiles,"loadManagerProfiles");__name(getManagerProfileModelMode,"getManagerProfileModelMode");__name(createDraft,"createDraft");__name(createCopyDraft,"createCopyDraft");__name(normalizeProfileId,"normalizeProfileId");__name(createUniqueProfileId,"createUniqueProfileId");__name(validateDraft,"validateDraft");__name(getEditFieldForModeSlot,"getEditFieldForModeSlot");__name(getDefaultValueForEditField,"getDefaultValueForEditField");__name(resolveDraftAuthType,"resolveDraftAuthType");__name(createProviderProfileFromDraft,"createProviderProfileFromDraft");__name(saveDraft,"saveDraft");__name(deleteManagerProfile,"deleteManagerProfile");__name(PromptSelect,"PromptSelect");__name(PromptTextInput,"PromptTextInput");__name(ReturnMainPrompt,"ReturnMainPrompt");__name(YesNoPrompt,"YesNoPrompt");__name(CompletedLine,"CompletedLine");__name(ManagerHeader,"ManagerHeader");__name(renderCompletedFields,"renderCompletedFields");__name(getEditTitle,"getEditTitle");__name(createReturnStage,"createReturnStage");__name(ProviderConfigManager,"ProviderConfigManager")}});function useMainLoopModel(){let mainLoopModel=useAppState(s2=>s2.mainLoopModel),mainLoopModelForSession=useAppState(s2=>s2.mainLoopModelForSession),[,forceRerender]=(0,import_react44.useReducer)(x3=>x3+1,0);return(0,import_react44.useEffect)(()=>onGrowthBookRefresh(forceRerender),[]),parseUserSpecifiedModel(mainLoopModelForSession??mainLoopModel??getDefaultMainLoopModelSetting())}var import_react44,init_useMainLoopModel=__esm({"src/hooks/useMainLoopModel.ts"(){import_react44=__toESM(require_react());init_growthbook();init_AppState();init_model();__name(useMainLoopModel,"useMainLoopModel")}});var trustedDevice_exports={};__export(trustedDevice_exports,{clearTrustedDeviceToken:()=>clearTrustedDeviceToken,clearTrustedDeviceTokenCache:()=>clearTrustedDeviceTokenCache,enrollTrustedDevice:()=>enrollTrustedDevice,getTrustedDeviceToken:()=>getTrustedDeviceToken});import{hostname as hostname2}from"os";function isGateEnabled(){return getFeatureValue_CACHED_MAY_BE_STALE(TRUSTED_DEVICE_GATE,!1)}function getTrustedDeviceToken(){if(isGateEnabled())return readStoredToken()}function clearTrustedDeviceTokenCache(){readStoredToken.cache?.clear?.()}function clearTrustedDeviceToken(){if(!isGateEnabled())return;let secureStorage=getSecureStorage();try{let data=secureStorage.read();data?.trustedDeviceToken&&(delete data.trustedDeviceToken,secureStorage.update(data))}catch{}readStoredToken.cache?.clear?.()}async function enrollTrustedDevice(){try{if(!await checkGate_CACHED_OR_BLOCKING(TRUSTED_DEVICE_GATE)){logForDebugging(`[trusted-device] Gate ${TRUSTED_DEVICE_GATE} is off, skipping enrollment`);return}if(process.env.CLAUDE_TRUSTED_DEVICE_TOKEN){logForDebugging("[trusted-device] CLAUDE_TRUSTED_DEVICE_TOKEN env var is set, skipping enrollment (env var takes precedence)");return}let{getClaudeAIOAuthTokens:getClaudeAIOAuthTokens3}=(init_auth(),__toCommonJS(auth_exports)),accessToken=getClaudeAIOAuthTokens3()?.accessToken;if(!accessToken){logForDebugging("[trusted-device] No OAuth token, skipping enrollment");return}let secureStorage=getSecureStorage();if(isEssentialTrafficOnly()){logForDebugging("[trusted-device] Essential traffic only, skipping enrollment");return}let baseUrl=getOauthConfig().BASE_API_URL,response;try{response=await axios_default.post(`${baseUrl}/api/auth/trusted_devices`,{display_name:`Clavue on ${hostname2()} \xB7 ${process.platform}`},{headers:{Authorization:`Bearer ${accessToken}`,"Content-Type":"application/json"},timeout:1e4,validateStatus:__name(s2=>s2<500,"validateStatus")})}catch(err2){logForDebugging(`[trusted-device] Enrollment request failed: ${errorMessage(err2)}`);return}if(response.status!==200&&response.status!==201){logForDebugging(`[trusted-device] Enrollment failed ${response.status}: ${jsonStringify(response.data).slice(0,200)}`);return}let token=response.data?.device_token;if(!token||typeof token!="string"){logForDebugging("[trusted-device] Enrollment response missing device_token field");return}try{let storageData=secureStorage.read();if(!storageData){logForDebugging("[trusted-device] Cannot read storage, skipping token persist");return}storageData.trustedDeviceToken=token;let result2=secureStorage.update(storageData);if(!result2.success){logForDebugging(`[trusted-device] Failed to persist token: ${result2.warning??"unknown"}`);return}readStoredToken.cache?.clear?.(),logForDebugging(`[trusted-device] Enrolled device_id=${response.data.device_id??"unknown"}`)}catch(err2){logForDebugging(`[trusted-device] Storage write failed: ${errorMessage(err2)}`)}}catch(err2){logForDebugging(`[trusted-device] Enrollment error: ${errorMessage(err2)}`)}}var TRUSTED_DEVICE_GATE,readStoredToken,init_trustedDevice=__esm({"src/bridge/trustedDevice.ts"(){init_axios2();init_memoize();init_oauth();init_growthbook();init_debug();init_errors2();init_privacyLevel();init_secureStorage();init_slowOperations();TRUSTED_DEVICE_GATE="tengu_sessions_elevated_auth_enforcement";__name(isGateEnabled,"isGateEnabled");readStoredToken=memoize_default(()=>{let envToken=process.env.CLAUDE_TRUSTED_DEVICE_TOKEN;return envToken||getSecureStorage().read()?.trustedDeviceToken});__name(getTrustedDeviceToken,"getTrustedDeviceToken");__name(clearTrustedDeviceTokenCache,"clearTrustedDeviceTokenCache");__name(clearTrustedDeviceToken,"clearTrustedDeviceToken");__name(enrollTrustedDevice,"enrollTrustedDevice")}});var PolicyLimitsResponseSchema,init_types7=__esm({"src/services/policyLimits/types.ts"(){init_v4();init_lazySchema();PolicyLimitsResponseSchema=lazySchema(()=>external_exports.object({restrictions:external_exports.record(external_exports.string(),external_exports.object({allowed:external_exports.boolean()}))}))}});import{createHash as createHash10}from"crypto";import{readFileSync as fsReadFileSync}from"fs";import{unlink as unlink5,writeFile as writeFile9}from"fs/promises";import{join as join57}from"path";function isNodeError(e2){return e2 instanceof Error}function initializePolicyLimitsLoadingPromise(){loadingCompletePromise||isPolicyLimitsEligible()&&(loadingCompletePromise=new Promise(resolve44=>{loadingCompleteResolve=resolve44,setTimeout(()=>{loadingCompleteResolve&&(logForDebugging("Policy limits: Loading promise timed out, resolving anyway"),loadingCompleteResolve(),loadingCompleteResolve=null)},LOADING_PROMISE_TIMEOUT_MS)}))}function getCachePath2(){return join57(getClaudeConfigHomeDir(),CACHE_FILENAME)}function getPolicyLimitsEndpoint(){return`${getOauthConfig().BASE_API_URL}/api/claude_code/policy_limits`}function sortKeysDeep(obj){if(Array.isArray(obj))return obj.map(sortKeysDeep);if(obj!==null&&typeof obj=="object"){let sorted={};for(let[key,value]of Object.entries(obj).sort(([a2],[b3])=>a2.localeCompare(b3)))sorted[key]=sortKeysDeep(value);return sorted}return obj}function computeChecksum(restrictions){let sorted=sortKeysDeep(restrictions),normalized=jsonStringify(sorted);return`sha256:${createHash10("sha256").update(normalized).digest("hex")}`}function isPolicyLimitsEligible(){if(getAPIProvider()!=="firstParty"||!isFirstPartyAnthropicBaseUrl())return!1;try{let{key:apiKey}=getAnthropicApiKeyWithSource({skipRetrievingKeyFromApiKeyHelper:!0});if(apiKey)return!0}catch{}let tokens=getClaudeAIOAuthTokens2();return!(!tokens?.accessToken||!tokens.scopes?.includes(CLAUDE_AI_INFERENCE_SCOPE)||tokens.subscriptionType!=="enterprise"&&tokens.subscriptionType!=="team")}async function waitForPolicyLimitsToLoad(){loadingCompletePromise&&await loadingCompletePromise}function getAuthHeaders2(){try{let{key:apiKey}=getAnthropicApiKeyWithSource({skipRetrievingKeyFromApiKeyHelper:!0});if(apiKey)return{headers:{"x-api-key":apiKey}}}catch{}let oauthTokens=getClaudeAIOAuthTokens2();return oauthTokens?.accessToken?{headers:{Authorization:`Bearer ${oauthTokens.accessToken}`,"anthropic-beta":OAUTH_BETA_HEADER}}:{headers:{},error:"No authentication available"}}async function fetchWithRetry(cachedChecksum){let lastResult2=null;for(let attempt2=1;attempt2<=DEFAULT_MAX_RETRIES2+1;attempt2++){if(lastResult2=await fetchPolicyLimits(cachedChecksum),lastResult2.success||lastResult2.skipRetry||attempt2>DEFAULT_MAX_RETRIES2)return lastResult2;let delayMs=getRetryDelay(attempt2);logForDebugging(`Policy limits: Retry ${attempt2}/${DEFAULT_MAX_RETRIES2} after ${delayMs}ms`),await sleep2(delayMs)}return lastResult2}async function fetchPolicyLimits(cachedChecksum){try{await checkAndRefreshOAuthTokenIfNeeded();let authHeaders=getAuthHeaders2();if(authHeaders.error)return{success:!1,error:"Authentication required for policy limits",skipRetry:!0};let endpoint=getPolicyLimitsEndpoint(),headers={...authHeaders.headers,"User-Agent":getClaudeCodeUserAgent()};cachedChecksum&&(headers["If-None-Match"]=`"${cachedChecksum}"`);let response=await axios_default.get(endpoint,{headers,timeout:FETCH_TIMEOUT_MS2,validateStatus:__name(status2=>status2===200||status2===304||status2===404,"validateStatus")});if(response.status===304)return logForDebugging("Policy limits: Using cached restrictions (304)"),{success:!0,restrictions:null,etag:cachedChecksum};if(response.status===404)return logForDebugging("Policy limits: No restrictions found (404)"),{success:!0,restrictions:{},etag:void 0};let parsed=PolicyLimitsResponseSchema().safeParse(response.data);return parsed.success?(logForDebugging("Policy limits: Fetched successfully"),{success:!0,restrictions:parsed.data.restrictions}):(logForDebugging(`Policy limits: Invalid response format - ${parsed.error.message}`),{success:!1,error:"Invalid policy limits format"})}catch(error40){let{kind,message}=classifyAxiosError(error40);switch(kind){case"auth":return{success:!1,error:"Not authorized for policy limits",skipRetry:!0};case"timeout":return{success:!1,error:"Policy limits request timeout"};case"network":return{success:!1,error:"Cannot connect to server"};default:return{success:!1,error:message}}}}function loadCachedRestrictions(){try{let content=fsReadFileSync(getCachePath2(),"utf-8"),data=safeParseJSON(content,!1),parsed=PolicyLimitsResponseSchema().safeParse(data);return parsed.success?parsed.data.restrictions:null}catch{return null}}async function saveCachedRestrictions(restrictions){try{let path25=getCachePath2();await writeFile9(path25,jsonStringify({restrictions},null,2),{encoding:"utf-8",mode:384}),logForDebugging(`Policy limits: Saved to ${path25}`)}catch(error40){logForDebugging(`Policy limits: Failed to save - ${error40 instanceof Error?error40.message:"unknown error"}`)}}async function fetchAndLoadPolicyLimits(){if(!isPolicyLimitsEligible())return null;let cachedRestrictions=loadCachedRestrictions(),cachedChecksum=cachedRestrictions?computeChecksum(cachedRestrictions):void 0;try{let result2=await fetchWithRetry(cachedChecksum);if(!result2.success)return cachedRestrictions?(logForDebugging("Policy limits: Using stale cache after fetch failure"),sessionCache2=cachedRestrictions,cachedRestrictions):null;if(result2.restrictions===null&&cachedRestrictions)return logForDebugging("Policy limits: Cache still valid (304 Not Modified)"),sessionCache2=cachedRestrictions,cachedRestrictions;let newRestrictions=result2.restrictions||{};if(Object.keys(newRestrictions).length>0)return sessionCache2=newRestrictions,await saveCachedRestrictions(newRestrictions),logForDebugging("Policy limits: Applied new restrictions successfully"),newRestrictions;sessionCache2=newRestrictions;try{await unlink5(getCachePath2()),logForDebugging("Policy limits: Deleted cached file (404 response)")}catch(e2){isNodeError(e2)&&e2.code!=="ENOENT"&&logForDebugging(`Policy limits: Failed to delete cached file - ${e2.message}`)}return newRestrictions}catch{return cachedRestrictions?(logForDebugging("Policy limits: Using stale cache after error"),sessionCache2=cachedRestrictions,cachedRestrictions):null}}function isPolicyAllowed(policy){let restrictions=getRestrictionsFromCache();if(!restrictions)return!(isEssentialTrafficOnly()&&ESSENTIAL_TRAFFIC_DENY_ON_MISS.has(policy));let restriction=restrictions[policy];return restriction?restriction.allowed:!0}function isPolicyAllowedForCommandFiltering(policy){let restrictions=sessionCache2??loadCachedRestrictions();if(!restrictions)return!(isEssentialTrafficOnly()&&ESSENTIAL_TRAFFIC_DENY_ON_MISS.has(policy));let restriction=restrictions[policy];return restriction?restriction.allowed:!0}function getRestrictionsFromCache(){if(!isPolicyLimitsEligible())return null;if(sessionCache2)return sessionCache2;let cachedRestrictions=loadCachedRestrictions();return cachedRestrictions?(sessionCache2=cachedRestrictions,cachedRestrictions):null}async function loadPolicyLimits(){isPolicyLimitsEligible()&&!loadingCompletePromise&&(loadingCompletePromise=new Promise(resolve44=>{loadingCompleteResolve=resolve44}));try{await fetchAndLoadPolicyLimits(),isPolicyLimitsEligible()&&startBackgroundPolling()}finally{loadingCompleteResolve&&(loadingCompleteResolve(),loadingCompleteResolve=null)}}async function refreshPolicyLimits(){await clearPolicyLimitsCache(),isPolicyLimitsEligible()&&(await fetchAndLoadPolicyLimits(),logForDebugging("Policy limits: Refreshed after auth change"))}async function clearPolicyLimitsCache(){stopBackgroundPolling(),sessionCache2=null,loadingCompletePromise=null,loadingCompleteResolve=null;try{await unlink5(getCachePath2())}catch{}}async function pollPolicyLimits(){if(!isPolicyLimitsEligible())return;let previousCache=sessionCache2?jsonStringify(sessionCache2):null;try{await fetchAndLoadPolicyLimits(),(sessionCache2?jsonStringify(sessionCache2):null)!==previousCache&&logForDebugging("Policy limits: Changed during background poll")}catch{}}function startBackgroundPolling(){pollingIntervalId===null&&isPolicyLimitsEligible()&&(pollingIntervalId=setInterval(()=>{pollPolicyLimits()},POLLING_INTERVAL_MS),pollingIntervalId.unref(),cleanupRegistered||(cleanupRegistered=!0,registerCleanup(async()=>stopBackgroundPolling())))}function stopBackgroundPolling(){pollingIntervalId!==null&&(clearInterval(pollingIntervalId),pollingIntervalId=null)}var CACHE_FILENAME,FETCH_TIMEOUT_MS2,DEFAULT_MAX_RETRIES2,POLLING_INTERVAL_MS,pollingIntervalId,cleanupRegistered,loadingCompletePromise,loadingCompleteResolve,LOADING_PROMISE_TIMEOUT_MS,sessionCache2,ESSENTIAL_TRAFFIC_DENY_ON_MISS,init_policyLimits=__esm({"src/services/policyLimits/index.ts"(){init_axios2();init_oauth();init_auth();init_cleanupRegistry();init_debug();init_envUtils();init_errors2();init_json();init_providers();init_privacyLevel();init_sleep2();init_slowOperations();init_userAgent();init_withRetry();init_types7();__name(isNodeError,"isNodeError");CACHE_FILENAME="policy-limits.json",FETCH_TIMEOUT_MS2=1e4,DEFAULT_MAX_RETRIES2=5,POLLING_INTERVAL_MS=3600*1e3,pollingIntervalId=null,cleanupRegistered=!1,loadingCompletePromise=null,loadingCompleteResolve=null,LOADING_PROMISE_TIMEOUT_MS=3e4,sessionCache2=null;__name(initializePolicyLimitsLoadingPromise,"initializePolicyLimitsLoadingPromise");__name(getCachePath2,"getCachePath");__name(getPolicyLimitsEndpoint,"getPolicyLimitsEndpoint");__name(sortKeysDeep,"sortKeysDeep");__name(computeChecksum,"computeChecksum");__name(isPolicyLimitsEligible,"isPolicyLimitsEligible");__name(waitForPolicyLimitsToLoad,"waitForPolicyLimitsToLoad");__name(getAuthHeaders2,"getAuthHeaders");__name(fetchWithRetry,"fetchWithRetry");__name(fetchPolicyLimits,"fetchPolicyLimits");__name(loadCachedRestrictions,"loadCachedRestrictions");__name(saveCachedRestrictions,"saveCachedRestrictions");__name(fetchAndLoadPolicyLimits,"fetchAndLoadPolicyLimits");ESSENTIAL_TRAFFIC_DENY_ON_MISS=new Set(["allow_product_feedback"]);__name(isPolicyAllowed,"isPolicyAllowed");__name(isPolicyAllowedForCommandFiltering,"isPolicyAllowedForCommandFiltering");__name(getRestrictionsFromCache,"getRestrictionsFromCache");__name(loadPolicyLimits,"loadPolicyLimits");__name(refreshPolicyLimits,"refreshPolicyLimits");__name(clearPolicyLimitsCache,"clearPolicyLimitsCache");__name(pollPolicyLimits,"pollPolicyLimits");__name(startBackgroundPolling,"startBackgroundPolling");__name(stopBackgroundPolling,"stopBackgroundPolling")}});function buildMacClipboardImageJxa(mode,outputPath=""){let script=["ObjC.import('AppKit')","const pasteboard = $.NSPasteboard.generalPasteboard","const image = $.NSImage.alloc.initWithPasteboard(pasteboard)","if (!image) { throw new Error('NO_IMAGE') }"];if(mode==="check")return script;if(mode!=="save")throw new Error(`Unsupported macOS clipboard image mode: ${mode}`);return[...script,"const tiffData = image.TIFFRepresentation","if (!tiffData) { throw new Error('NO_TIFF_REPRESENTATION') }","const bitmap = $.NSBitmapImageRep.imageRepWithData(tiffData)","if (!bitmap) { throw new Error('NO_BITMAP_REP') }","const pngData = bitmap.representationUsingTypeProperties($.NSBitmapImageFileTypePNG, $.NSDictionary.dictionary)","if (!pngData) { throw new Error('NO_PNG_DATA') }",`const outputPath = ${JSON.stringify(outputPath)}`,"const wrote = pngData.writeToFileAtomically($(outputPath), true)","if (!wrote) { throw new Error('WRITE_FAILED') }"]}var init_imagePasteDarwin=__esm({"src/utils/imagePasteDarwin.ts"(){__name(buildMacClipboardImageJxa,"buildMacClipboardImageJxa")}});import{randomBytes as randomBytes6}from"crypto";import{basename as basename13,extname as extname7,isAbsolute as isAbsolute12,join as join58}from"path";async function runMacClipboardImageScript(mode,screenshotPath){let args=["-l","JavaScript"];for(let line of buildMacClipboardImageJxa(mode,screenshotPath))args.push("-e",line);return(await execa("osascript",args,{reject:!1})).exitCode===0}function getClipboardCommands(){let platform6=process.platform,baseTmpDir=process.env.CLAUDE_CODE_TMPDIR||(platform6==="win32"?process.env.TEMP||"C:\\Temp":"/tmp"),screenshotFilename="claude_cli_latest_screenshot.png",tempPaths={darwin:join58(baseTmpDir,screenshotFilename),linux:join58(baseTmpDir,screenshotFilename),win32:join58(baseTmpDir,screenshotFilename)},screenshotPath=tempPaths[platform6]||tempPaths.linux,commands={darwin:{checkImage:"osascript -e 'the clipboard as \xABclass PNGf\xBB'",saveImage:`osascript -e 'set png_data to (the clipboard as \xABclass PNGf\xBB)' -e 'set fp to open for access POSIX file "${screenshotPath}" with write permission' -e 'write png_data to fp' -e 'close access fp'`,getPath:"osascript -e 'get POSIX path of (the clipboard as \xABclass furl\xBB)'",deleteFile:`rm -f "${screenshotPath}"`},linux:{checkImage:'xclip -selection clipboard -t TARGETS -o 2>/dev/null | grep -E "image/(png|jpeg|jpg|gif|webp|bmp)" || wl-paste -l 2>/dev/null | grep -E "image/(png|jpeg|jpg|gif|webp|bmp)"',saveImage:`xclip -selection clipboard -t image/png -o > "${screenshotPath}" 2>/dev/null || wl-paste --type image/png > "${screenshotPath}" 2>/dev/null || xclip -selection clipboard -t image/bmp -o > "${screenshotPath}" 2>/dev/null || wl-paste --type image/bmp > "${screenshotPath}"`,getPath:"xclip -selection clipboard -t text/plain -o 2>/dev/null || wl-paste 2>/dev/null",deleteFile:`rm -f "${screenshotPath}"`},win32:{checkImage:'powershell -NoProfile -Command "(Get-Clipboard -Format Image) -ne $null"',saveImage:`powershell -NoProfile -Command "$img = Get-Clipboard -Format Image; if ($img) { $img.Save('${screenshotPath.replace(/\\/g,"\\\\")}', [System.Drawing.Imaging.ImageFormat]::Png) }"`,getPath:'powershell -NoProfile -Command "Get-Clipboard"',deleteFile:`del /f "${screenshotPath}"`}};return{commands:commands[platform6]||commands.linux,screenshotPath}}async function hasImageInClipboard(){if(process.platform==="darwin"){try{if(await runMacClipboardImageScript("check"))return!0}catch(e2){logError2(e2)}return(await execFileNoThrowWithCwd("osascript",["-e","the clipboard as \xABclass PNGf\xBB"])).code===0}let{commands}=getClipboardCommands();return(await execa(commands.checkImage,{shell:!0,reject:!1})).exitCode===0}async function getImageFromClipboard(){let{commands,screenshotPath}=getClipboardCommands();try{let savedImage=!1;if(process.platform==="darwin"){try{savedImage=await runMacClipboardImageScript("save",screenshotPath)}catch(e2){logError2(e2)}if(!savedImage){if((await execa(commands.checkImage,{shell:!0,reject:!1})).exitCode!==0||(await execa(commands.saveImage,{shell:!0,reject:!1})).exitCode!==0)return null;savedImage=!0}}else{if((await execa(commands.checkImage,{shell:!0,reject:!1})).exitCode!==0||(await execa(commands.saveImage,{shell:!0,reject:!1})).exitCode!==0)return null;savedImage=!0}if(!savedImage)return null;let imageBuffer=getFsImplementation().readFileBytesSync(screenshotPath);imageBuffer.length>=2&&imageBuffer[0]===66&&imageBuffer[1]===77&&(imageBuffer=await(await getImageProcessor())(imageBuffer).png().toBuffer());let resized=await maybeResizeAndDownsampleImageBuffer(imageBuffer,imageBuffer.length,"png"),base64Image=resized.buffer.toString("base64"),mediaType=detectImageFormatFromBase64(base64Image);return execa(commands.deleteFile,{shell:!0,reject:!1}),{base64:base64Image,mediaType,dimensions:resized.dimensions}}catch{return null}}async function getImagePathFromClipboard(){let{commands}=getClipboardCommands();try{let result2=await execa(commands.getPath,{shell:!0,reject:!1});return result2.exitCode!==0||!result2.stdout?null:result2.stdout.trim()}catch(e2){return logError2(e2),null}}function removeOuterQuotes(text){return text.startsWith('"')&&text.endsWith('"')||text.startsWith("'")&&text.endsWith("'")?text.slice(1,-1):text}function stripBackslashEscapes(path25){if(process.platform==="win32")return path25;let placeholder=`__DOUBLE_BACKSLASH_${randomBytes6(8).toString("hex")}__`;return path25.replace(/\\\\/g,placeholder).replace(/\\(.)/g,"$1").replace(new RegExp(placeholder,"g"),"\\")}function isImageFilePath(text){let cleaned=removeOuterQuotes(text.trim()),unescaped=stripBackslashEscapes(cleaned);return IMAGE_EXTENSION_REGEX.test(unescaped)}function asImageFilePath(text){let cleaned=removeOuterQuotes(text.trim()),unescaped=stripBackslashEscapes(cleaned);return IMAGE_EXTENSION_REGEX.test(unescaped)?unescaped:null}async function tryReadImageFromPath(text){let cleanedPath=asImageFilePath(text);if(!cleanedPath)return null;let imagePath=cleanedPath,imageBuffer;try{if(isAbsolute12(imagePath))imageBuffer=getFsImplementation().readFileBytesSync(imagePath);else{let clipboardPath=await getImagePathFromClipboard();clipboardPath&&imagePath===basename13(clipboardPath)&&(imageBuffer=getFsImplementation().readFileBytesSync(clipboardPath))}}catch(e2){return logError2(e2),null}if(!imageBuffer)return null;if(imageBuffer.length===0)return logForDebugging(`Image file is empty: ${imagePath}`,{level:"warn"}),null;imageBuffer.length>=2&&imageBuffer[0]===66&&imageBuffer[1]===77&&(imageBuffer=await(await getImageProcessor())(imageBuffer).png().toBuffer());let ext=extname7(imagePath).slice(1).toLowerCase()||"png",resized=await maybeResizeAndDownsampleImageBuffer(imageBuffer,imageBuffer.length,ext),base64Image=resized.buffer.toString("base64"),mediaType=detectImageFormatFromBase64(base64Image);return{path:imagePath,base64:base64Image,mediaType,dimensions:resized.dimensions}}var PASTE_THRESHOLD,IMAGE_EXTENSION_REGEX,init_imagePaste=__esm({"src/utils/imagePaste.ts"(){init_execa();init_apiLimits();init_growthbook();init_imageProcessor();init_debug();init_imagePasteDarwin();init_execFileNoThrow();init_fsOperations();init_imageResizer();init_log3();PASTE_THRESHOLD=800;__name(runMacClipboardImageScript,"runMacClipboardImageScript");__name(getClipboardCommands,"getClipboardCommands");__name(hasImageInClipboard,"hasImageInClipboard");__name(getImageFromClipboard,"getImageFromClipboard");__name(getImagePathFromClipboard,"getImagePathFromClipboard");IMAGE_EXTENSION_REGEX=/\.(png|jpe?g|gif|webp)$/i;__name(removeOuterQuotes,"removeOuterQuotes");__name(stripBackslashEscapes,"stripBackslashEscapes");__name(isImageFilePath,"isImageFilePath");__name(asImageFilePath,"asImageFilePath");__name(tryReadImageFromPath,"tryReadImageFromPath")}});import{mkdir as mkdir11,open as open6}from"fs/promises";import{join as join59}from"path";function getImageStoreDir(){return join59(getClaudeConfigHomeDir(),IMAGE_STORE_DIR,getSessionId())}async function ensureImageStoreDir(){let dir=getImageStoreDir();await mkdir11(dir,{recursive:!0})}function getImagePath(imageId,mediaType){let extension2=mediaType.split("/")[1]||"png";return join59(getImageStoreDir(),`${imageId}.${extension2}`)}function cacheImagePath(content){if(content.type!=="image")return null;let imagePath=getImagePath(content.id,content.mediaType||"image/png");return evictOldestIfAtCap(),storedImagePaths.set(content.id,imagePath),imagePath}async function storeImage(content){if(content.type!=="image")return null;try{await ensureImageStoreDir();let imagePath=getImagePath(content.id,content.mediaType||"image/png"),fh=await open6(imagePath,"w",384);try{await fh.writeFile(content.content,{encoding:"base64"}),await fh.datasync()}finally{await fh.close()}return evictOldestIfAtCap(),storedImagePaths.set(content.id,imagePath),logForDebugging(`Stored image ${content.id} to ${imagePath}`),imagePath}catch(error40){return logForDebugging(`Failed to store image: ${error40}`),null}}async function storeImages(pastedContents){let pathMap=new Map;for(let[id,content]of Object.entries(pastedContents))if(content.type==="image"){let path25=await storeImage(content);path25&&pathMap.set(Number(id),path25)}return pathMap}function getStoredImagePath(imageId){return storedImagePaths.get(imageId)??null}function clearStoredImagePaths(){storedImagePaths.clear()}function evictOldestIfAtCap(){for(;storedImagePaths.size>=MAX_STORED_IMAGE_PATHS;){let oldest=storedImagePaths.keys().next().value;if(oldest!==void 0)storedImagePaths.delete(oldest);else break}}async function cleanupOldImageCaches(){let fsImpl=getFsImplementation(),baseDir=join59(getClaudeConfigHomeDir(),IMAGE_STORE_DIR),currentSessionId=getSessionId();try{let sessionDirs;try{sessionDirs=await fsImpl.readdir(baseDir)}catch{return}for(let sessionDir of sessionDirs){if(sessionDir.name===currentSessionId)continue;let sessionPath=join59(baseDir,sessionDir.name);try{await fsImpl.rm(sessionPath,{recursive:!0,force:!0}),logForDebugging(`Cleaned up old image cache: ${sessionPath}`)}catch{}}try{(await fsImpl.readdir(baseDir)).length===0&&await fsImpl.rmdir(baseDir)}catch{}}catch{}}var IMAGE_STORE_DIR,MAX_STORED_IMAGE_PATHS,storedImagePaths,init_imageStore=__esm({"src/utils/imageStore.ts"(){init_state();init_debug();init_envUtils();init_fsOperations();IMAGE_STORE_DIR="image-cache",MAX_STORED_IMAGE_PATHS=200,storedImagePaths=new Map;__name(getImageStoreDir,"getImageStoreDir");__name(ensureImageStoreDir,"ensureImageStoreDir");__name(getImagePath,"getImagePath");__name(cacheImagePath,"cacheImagePath");__name(storeImage,"storeImage");__name(storeImages,"storeImages");__name(getStoredImagePath,"getStoredImagePath");__name(clearStoredImagePaths,"clearStoredImagePaths");__name(evictOldestIfAtCap,"evictOldestIfAtCap");__name(cleanupOldImageCaches,"cleanupOldImageCaches")}});import{pathToFileURL}from"url";function ClickableImageRef({imageId,backgroundColor,isSelected=!1}){let imagePath=getStoredImagePath(imageId),displayText=`[Image #${imageId}]`;if(imagePath&&supportsHyperlinks2()){let fileUrl=pathToFileURL(imagePath).href;return(0,import_jsx_runtime50.jsx)(Link,{url:fileUrl,fallback:(0,import_jsx_runtime50.jsx)(ThemedText,{backgroundColor,inverse:isSelected,children:displayText}),children:(0,import_jsx_runtime50.jsx)(ThemedText,{backgroundColor,inverse:isSelected,bold:isSelected,children:displayText})})}return(0,import_jsx_runtime50.jsx)(ThemedText,{backgroundColor,inverse:isSelected,children:displayText})}var import_jsx_runtime50,init_ClickableImageRef=__esm({"src/components/ClickableImageRef.tsx"(){init_Link();init_supports_hyperlinks2();init_ink2();init_imageStore();import_jsx_runtime50=__toESM(require_jsx_runtime());__name(ClickableImageRef,"ClickableImageRef")}});function useDeclaredCursor({line,column,active}){let setCursorDeclaration=(0,import_react45.useContext)(CursorDeclarationContext_default),nodeRef=(0,import_react45.useRef)(null),setNode=(0,import_react45.useCallback)(node=>{nodeRef.current=node},[]);return(0,import_react45.useLayoutEffect)(()=>{let node=nodeRef.current;active&&node?setCursorDeclaration({relativeX:column,relativeY:line,node}):setCursorDeclaration(null,node)}),(0,import_react45.useLayoutEffect)(()=>()=>{setCursorDeclaration(null,nodeRef.current)},[setCursorDeclaration]),setNode}var import_react45,init_use_declared_cursor=__esm({"src/ink/hooks/use-declared-cursor.ts"(){import_react45=__toESM(require_react());init_CursorDeclarationContext();__name(useDeclaredCursor,"useDeclaredCursor")}});function ListItem({isFocused,isSelected=!1,children,description,showScrollDown,showScrollUp,styled=!0,disabled=!1,declareCursor}){function renderIndicator(){return disabled?(0,import_jsx_runtime51.jsx)(ThemedText,{children:" "}):isFocused?(0,import_jsx_runtime51.jsx)(ThemedText,{color:"suggestion",children:figures_default.pointer}):showScrollDown?(0,import_jsx_runtime51.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowDown}):showScrollUp?(0,import_jsx_runtime51.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowUp}):(0,import_jsx_runtime51.jsx)(ThemedText,{children:" "})}__name(renderIndicator,"renderIndicator");function getTextColor(){if(disabled)return"inactive";if(styled){if(isSelected)return"success";if(isFocused)return"suggestion"}}__name(getTextColor,"getTextColor");let textColor=getTextColor(),cursorRef=useDeclaredCursor({line:0,column:0,active:isFocused&&!disabled&&declareCursor!==!1});return(0,import_jsx_runtime51.jsxs)(ThemedBox_default,{ref:cursorRef,flexDirection:"column",children:[(0,import_jsx_runtime51.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[renderIndicator(),styled?(0,import_jsx_runtime51.jsx)(ThemedText,{color:textColor,dimColor:disabled,children}):children,isSelected&&!disabled&&(0,import_jsx_runtime51.jsx)(ThemedText,{color:"success",children:figures_default.tick})]}),description&&(0,import_jsx_runtime51.jsx)(ThemedBox_default,{paddingLeft:2,children:(0,import_jsx_runtime51.jsx)(ThemedText,{color:"inactive",children:description})})]})}var import_jsx_runtime51,init_ListItem=__esm({"src/components/design-system/ListItem.tsx"(){init_figures();init_use_declared_cursor();init_ink2();import_jsx_runtime51=__toESM(require_jsx_runtime());__name(ListItem,"ListItem")}});function SelectOption({isFocused,isSelected,children,description,shouldShowDownArrow,shouldShowUpArrow,declareCursor}){return(0,import_jsx_runtime52.jsx)(ListItem,{isFocused,isSelected,description,showScrollDown:shouldShowDownArrow,showScrollUp:shouldShowUpArrow,styled:!1,declareCursor,children})}var import_jsx_runtime52,init_select_option=__esm({"src/components/CustomSelect/select-option.tsx"(){init_ListItem();import_jsx_runtime52=__toESM(require_jsx_runtime());__name(SelectOption,"SelectOption")}});function SelectInputOption({option,isFocused,isSelected,shouldShowDownArrow,shouldShowUpArrow,maxIndexWidth,index,inputValue,onInputChange,onSubmit,onExit:onExit2,layout,children,showLabel:showLabelProp=!1,onOpenEditor,resetCursorOnUpdate=!1,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex=0,onImagesSelectedChange,onSelectedImageIndexChange}){let imageAttachments=pastedContents?Object.values(pastedContents).filter(c4=>c4.type==="image"):[],showLabel=showLabelProp||option.showLabelWithValue===!0,[cursorOffset,setCursorOffset]=(0,import_react46.useState)(inputValue.length),isUserEditing=(0,import_react46.useRef)(!1);(0,import_react46.useEffect)(()=>{resetCursorOnUpdate&&isFocused&&(isUserEditing.current?isUserEditing.current=!1:setCursorOffset(inputValue.length))},[resetCursorOnUpdate,isFocused,inputValue]),useKeybinding("chat:externalEditor",()=>{onOpenEditor?.(inputValue,onInputChange)},{context:"Chat",isActive:isFocused&&!!onOpenEditor}),useKeybinding("chat:imagePaste",()=>{onImagePaste&&getImageFromClipboard().then(imageData=>{imageData&&onImagePaste(imageData.base64,imageData.mediaType,void 0,imageData.dimensions)})},{context:"Chat",isActive:isFocused&&!!onImagePaste}),useKeybinding("attachments:remove",()=>{imageAttachments.length>0&&onRemoveImage&&onRemoveImage(imageAttachments.at(-1).id)},{context:"Attachments",isActive:isFocused&&!imagesSelected&&inputValue===""&&imageAttachments.length>0&&!!onRemoveImage}),useKeybindings({"attachments:next":__name(()=>{imageAttachments.length>1&&onSelectedImageIndexChange?.((selectedImageIndex+1)%imageAttachments.length)},"attachments:next"),"attachments:previous":__name(()=>{imageAttachments.length>1&&onSelectedImageIndexChange?.((selectedImageIndex-1+imageAttachments.length)%imageAttachments.length)},"attachments:previous"),"attachments:remove":__name(()=>{let img=imageAttachments[selectedImageIndex];img&&onRemoveImage&&(onRemoveImage(img.id),imageAttachments.length<=1?onImagesSelectedChange?.(!1):onSelectedImageIndexChange?.(Math.min(selectedImageIndex,imageAttachments.length-2)))},"attachments:remove"),"attachments:exit":__name(()=>{onImagesSelectedChange?.(!1)},"attachments:exit")},{context:"Attachments",isActive:isFocused&&!!imagesSelected}),use_input_default((_input,key)=>{key.upArrow&&onImagesSelectedChange?.(!1)},{isActive:isFocused&&!!imagesSelected}),(0,import_react46.useEffect)(()=>{!isFocused&&imagesSelected&&onImagesSelectedChange?.(!1)},[isFocused,imagesSelected,onImagesSelectedChange]);let descriptionPaddingLeft=layout==="expanded"?maxIndexWidth+3:maxIndexWidth+4;return(0,import_jsx_runtime53.jsxs)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:[(0,import_jsx_runtime53.jsx)(SelectOption,{isFocused,isSelected,shouldShowDownArrow,shouldShowUpArrow,declareCursor:!1,children:(0,import_jsx_runtime53.jsxs)(ThemedBox_default,{flexDirection:"row",flexShrink:layout==="compact"?0:void 0,children:[(0,import_jsx_runtime53.jsx)(ThemedText,{dimColor:!0,children:`${index}.`.padEnd(maxIndexWidth+2)}),children,showLabel?(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[(0,import_jsx_runtime53.jsx)(ThemedText,{color:isFocused?"suggestion":void 0,children:option.label}),isFocused?(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[(0,import_jsx_runtime53.jsx)(ThemedText,{color:"suggestion",children:option.labelValueSeparator??", "}),(0,import_jsx_runtime53.jsx)(TextInput,{value:inputValue,onChange:value=>{isUserEditing.current=!0,onInputChange(value),option.onChange(value)},onSubmit,onExit:onExit2,placeholder:option.placeholder,focus:!imagesSelected,showCursor:!0,multiline:!0,disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0,cursorOffset,onChangeCursorOffset:setCursorOffset,columns:80,onImagePaste,onPaste:pastedText=>{isUserEditing.current=!0;let before2=inputValue.slice(0,cursorOffset),after2=inputValue.slice(cursorOffset),newValue=before2+pastedText+after2;onInputChange(newValue),option.onChange(newValue),setCursorOffset(before2.length+pastedText.length)}})]}):inputValue&&(0,import_jsx_runtime53.jsxs)(ThemedText,{children:[option.labelValueSeparator??", ",inputValue]})]}):isFocused?(0,import_jsx_runtime53.jsx)(TextInput,{value:inputValue,onChange:value=>{isUserEditing.current=!0,onInputChange(value),option.onChange(value)},onSubmit,onExit:onExit2,placeholder:option.placeholder||(typeof option.label=="string"?option.label:void 0),focus:!imagesSelected,showCursor:!0,multiline:!0,disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0,cursorOffset,onChangeCursorOffset:setCursorOffset,columns:80,onImagePaste,onPaste:pastedText=>{isUserEditing.current=!0;let before2=inputValue.slice(0,cursorOffset),after2=inputValue.slice(cursorOffset),newValue=before2+pastedText+after2;onInputChange(newValue),option.onChange(newValue),setCursorOffset(before2.length+pastedText.length)}}):(0,import_jsx_runtime53.jsx)(ThemedText,{color:inputValue?void 0:"inactive",children:inputValue||option.placeholder||option.label})]})}),option.description&&(0,import_jsx_runtime53.jsx)(ThemedBox_default,{paddingLeft:descriptionPaddingLeft,children:(0,import_jsx_runtime53.jsx)(ThemedText,{dimColor:option.dimDescription!==!1,color:isSelected?"success":isFocused?"suggestion":void 0,children:option.description})}),imageAttachments.length>0&&(0,import_jsx_runtime53.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,paddingLeft:descriptionPaddingLeft,children:[imageAttachments.map((img,idx)=>(0,import_jsx_runtime53.jsx)(ClickableImageRef,{imageId:img.id,isSelected:!!imagesSelected&&idx===selectedImageIndex},img.id)),(0,import_jsx_runtime53.jsx)(ThemedBox_default,{flexGrow:1,justifyContent:"flex-start",flexDirection:"row",children:(0,import_jsx_runtime53.jsx)(ThemedText,{dimColor:!0,children:imagesSelected?(0,import_jsx_runtime53.jsxs)(Byline,{children:[imageAttachments.length>1&&(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:next",context:"Attachments",fallback:"\u2192",description:"next"}),(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:previous",context:"Attachments",fallback:"\u2190",description:"prev"})]}),(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:remove",context:"Attachments",fallback:"backspace",description:"remove"}),(0,import_jsx_runtime53.jsx)(ConfigurableShortcutHint,{action:"attachments:exit",context:"Attachments",fallback:"esc",description:"cancel"})]}):isFocused?"(\u2193 to select)":null})})]}),layout==="expanded"&&(0,import_jsx_runtime53.jsx)(ThemedText,{children:" "})]})}var import_react46,import_jsx_runtime53,init_select_input_option=__esm({"src/components/CustomSelect/select-input-option.tsx"(){import_react46=__toESM(require_react());init_ink2();init_useKeybinding();init_imagePaste();init_ClickableImageRef();init_ConfigurableShortcutHint();init_Byline();init_TextInput();init_select_option();import_jsx_runtime53=__toESM(require_jsx_runtime());__name(SelectInputOption,"SelectInputOption")}});function useRegisterOverlay(id,enabled=!0){let setAppState=(0,import_react47.useContext)(AppStoreContext)?.setState;(0,import_react47.useEffect)(()=>{if(!(!enabled||!setAppState))return setAppState(prev=>{if(prev.activeOverlays.has(id))return prev;let next=new Set(prev.activeOverlays);return next.add(id),{...prev,activeOverlays:next}}),()=>{setAppState(prev=>{if(!prev.activeOverlays.has(id))return prev;let next=new Set(prev.activeOverlays);return next.delete(id),{...prev,activeOverlays:next}})}},[id,enabled,setAppState]),(0,import_react47.useLayoutEffect)(()=>{if(enabled)return()=>instances_default.get(process.stdout)?.invalidatePrevFrame()},[enabled])}function useIsOverlayActive(){return useAppState(s2=>s2.activeOverlays.size>0)}function useIsModalOverlayActive(){return useAppState(s2=>{for(let id of s2.activeOverlays)if(!NON_MODAL_OVERLAYS.has(id))return!0;return!1})}var import_react47,NON_MODAL_OVERLAYS,init_overlayContext=__esm({"src/context/overlayContext.tsx"(){import_react47=__toESM(require_react());init_instances();init_AppState();NON_MODAL_OVERLAYS=new Set(["autocomplete"]);__name(useRegisterOverlay,"useRegisterOverlay");__name(useIsOverlayActive,"useIsOverlayActive");__name(useIsModalOverlayActive,"useIsModalOverlayActive")}});var OptionMap,init_option_map=__esm({"src/components/CustomSelect/option-map.ts"(){OptionMap=class extends Map{static{__name(this,"OptionMap")}first;last;constructor(options){let items=[],firstItem,lastItem,previous,index=0;for(let option of options){let item={label:option.label,value:option.value,description:option.description,previous,next:void 0,index};previous&&(previous.next=item),firstItem||=item,lastItem=item,items.push([option.value,item]),index++,previous=item}super(items),this.first=firstItem,this.last=lastItem}}}});import{isDeepStrictEqual}from"util";function useSelectNavigation({visibleOptionCount=5,options,initialFocusValue,onFocus,focusValue}){let[state2,dispatch]=(0,import_react48.useReducer)(reducer,{visibleOptionCount,options,initialFocusValue:focusValue||initialFocusValue},createDefaultState),onFocusRef=(0,import_react48.useRef)(onFocus);onFocusRef.current=onFocus;let[lastOptions,setLastOptions]=(0,import_react48.useState)(options);options!==lastOptions&&!isDeepStrictEqual(options,lastOptions)&&(dispatch({type:"reset",state:createDefaultState({visibleOptionCount,options,initialFocusValue:focusValue??state2.focusedValue??initialFocusValue,currentViewport:{visibleFromIndex:state2.visibleFromIndex,visibleToIndex:state2.visibleToIndex}})}),setLastOptions(options));let focusNextOption=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-next-option"})},[]),focusPreviousOption=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-previous-option"})},[]),focusNextPage=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-next-page"})},[]),focusPreviousPage=(0,import_react48.useCallback)(()=>{dispatch({type:"focus-previous-page"})},[]),focusOption=(0,import_react48.useCallback)(value=>{value!==void 0&&dispatch({type:"set-focus",value})},[]),visibleOptions=(0,import_react48.useMemo)(()=>options.map((option,index)=>({...option,index})).slice(state2.visibleFromIndex,state2.visibleToIndex),[options,state2.visibleFromIndex,state2.visibleToIndex]),validatedFocusedValue=(0,import_react48.useMemo)(()=>state2.focusedValue===void 0?void 0:options.some(opt=>opt.value===state2.focusedValue)?state2.focusedValue:options[0]?.value,[state2.focusedValue,options]),isInInput=(0,import_react48.useMemo)(()=>options.find(opt=>opt.value===validatedFocusedValue)?.type==="input",[validatedFocusedValue,options]);(0,import_react48.useEffect)(()=>{validatedFocusedValue!==void 0&&onFocusRef.current?.(validatedFocusedValue)},[validatedFocusedValue]),(0,import_react48.useEffect)(()=>{focusValue!==void 0&&dispatch({type:"set-focus",value:focusValue})},[focusValue]);let focusedIndex=(0,import_react48.useMemo)(()=>{if(validatedFocusedValue===void 0)return 0;let index=options.findIndex(opt=>opt.value===validatedFocusedValue);return index>=0?index+1:0},[validatedFocusedValue,options]);return{focusedValue:validatedFocusedValue,focusedIndex,visibleFromIndex:state2.visibleFromIndex,visibleToIndex:state2.visibleToIndex,visibleOptions,isInInput:isInInput??!1,focusNextOption,focusPreviousOption,focusNextPage,focusPreviousPage,focusOption,options}}var import_react48,reducer,createDefaultState,init_use_select_navigation=__esm({"src/components/CustomSelect/use-select-navigation.ts"(){import_react48=__toESM(require_react());init_option_map();reducer=__name((state2,action)=>{switch(action.type){case"focus-next-option":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let next=item.next||state2.optionMap.first;if(!next)return state2;if(!item.next&&next===state2.optionMap.first)return{...state2,focusedValue:next.value,visibleFromIndex:0,visibleToIndex:state2.visibleOptionCount};if(!(next.index>=state2.visibleToIndex))return{...state2,focusedValue:next.value};let nextVisibleToIndex=Math.min(state2.optionMap.size,state2.visibleToIndex+1),nextVisibleFromIndex=nextVisibleToIndex-state2.visibleOptionCount;return{...state2,focusedValue:next.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"focus-previous-option":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let previous=item.previous||state2.optionMap.last;if(!previous)return state2;if(!item.previous&&previous===state2.optionMap.last){let nextVisibleToIndex2=state2.optionMap.size,nextVisibleFromIndex2=Math.max(0,nextVisibleToIndex2-state2.visibleOptionCount);return{...state2,focusedValue:previous.value,visibleFromIndex:nextVisibleFromIndex2,visibleToIndex:nextVisibleToIndex2}}if(!(previous.index<=state2.visibleFromIndex))return{...state2,focusedValue:previous.value};let nextVisibleFromIndex=Math.max(0,state2.visibleFromIndex-1),nextVisibleToIndex=nextVisibleFromIndex+state2.visibleOptionCount;return{...state2,focusedValue:previous.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"focus-next-page":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let targetIndex=Math.min(state2.optionMap.size-1,item.index+state2.visibleOptionCount),targetItem=state2.optionMap.first;for(;targetItem&&targetItem.index<targetIndex&&targetItem.next;)targetItem=targetItem.next;if(!targetItem)return state2;let nextVisibleToIndex=Math.min(state2.optionMap.size,targetItem.index+1),nextVisibleFromIndex=Math.max(0,nextVisibleToIndex-state2.visibleOptionCount);return{...state2,focusedValue:targetItem.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"focus-previous-page":{if(state2.focusedValue===void 0)return state2;let item=state2.optionMap.get(state2.focusedValue);if(!item)return state2;let targetIndex=Math.max(0,item.index-state2.visibleOptionCount),targetItem=state2.optionMap.first;for(;targetItem&&targetItem.index<targetIndex&&targetItem.next;)targetItem=targetItem.next;if(!targetItem)return state2;let nextVisibleFromIndex=Math.max(0,targetItem.index),nextVisibleToIndex=Math.min(state2.optionMap.size,nextVisibleFromIndex+state2.visibleOptionCount);return{...state2,focusedValue:targetItem.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}case"reset":return action.state;case"set-focus":{if(state2.focusedValue===action.value)return state2;let item=state2.optionMap.get(action.value);if(!item)return state2;if(item.index>=state2.visibleFromIndex&&item.index<state2.visibleToIndex)return{...state2,focusedValue:action.value};let nextVisibleFromIndex,nextVisibleToIndex;return item.index<state2.visibleFromIndex?(nextVisibleFromIndex=item.index,nextVisibleToIndex=Math.min(state2.optionMap.size,nextVisibleFromIndex+state2.visibleOptionCount)):(nextVisibleToIndex=Math.min(state2.optionMap.size,item.index+1),nextVisibleFromIndex=Math.max(0,nextVisibleToIndex-state2.visibleOptionCount)),{...state2,focusedValue:action.value,visibleFromIndex:nextVisibleFromIndex,visibleToIndex:nextVisibleToIndex}}}},"reducer"),createDefaultState=__name(({visibleOptionCount:customVisibleOptionCount,options,initialFocusValue,currentViewport})=>{let visibleOptionCount=typeof customVisibleOptionCount=="number"?Math.min(customVisibleOptionCount,options.length):options.length,optionMap=new OptionMap(options),focusedItem=initialFocusValue!==void 0&&optionMap.get(initialFocusValue),focusedValue=focusedItem?initialFocusValue:optionMap.first?.value,visibleFromIndex=0,visibleToIndex=visibleOptionCount;if(focusedItem){let focusedIndex=focusedItem.index;currentViewport?focusedIndex>=currentViewport.visibleFromIndex&&focusedIndex<currentViewport.visibleToIndex?(visibleFromIndex=currentViewport.visibleFromIndex,visibleToIndex=Math.min(optionMap.size,currentViewport.visibleToIndex)):focusedIndex<currentViewport.visibleFromIndex?(visibleFromIndex=focusedIndex,visibleToIndex=Math.min(optionMap.size,visibleFromIndex+visibleOptionCount)):(visibleToIndex=Math.min(optionMap.size,focusedIndex+1),visibleFromIndex=Math.max(0,visibleToIndex-visibleOptionCount)):focusedIndex>=visibleOptionCount&&(visibleToIndex=Math.min(optionMap.size,focusedIndex+1),visibleFromIndex=Math.max(0,visibleToIndex-visibleOptionCount)),visibleFromIndex=Math.max(0,Math.min(visibleFromIndex,optionMap.size-1)),visibleToIndex=Math.min(optionMap.size,Math.max(visibleOptionCount,visibleToIndex))}return{optionMap,visibleOptionCount,focusedValue,visibleFromIndex,visibleToIndex}},"createDefaultState");__name(useSelectNavigation,"useSelectNavigation")}});import{isDeepStrictEqual as isDeepStrictEqual2}from"util";function useMultiSelectState({isDisabled=!1,visibleOptionCount=5,options,defaultValue=[],onChange,onCancel,onFocus,focusValue,submitButtonText,onSubmit,onDownFromLastItem,onUpFromFirstItem,initialFocusLast,hideIndexes=!1}){let[selectedValues,setSelectedValues]=(0,import_react49.useState)(defaultValue),[isSubmitFocused,setIsSubmitFocused]=(0,import_react49.useState)(!1),[lastOptions,setLastOptions]=(0,import_react49.useState)(options);options!==lastOptions&&!isDeepStrictEqual2(options,lastOptions)&&(setSelectedValues(defaultValue),setLastOptions(options));let[inputValues,setInputValues]=(0,import_react49.useState)(()=>{let initialMap=new Map;return options.forEach(option=>{option.type==="input"&&option.initialValue&&initialMap.set(option.value,option.initialValue)}),initialMap}),updateSelectedValues=(0,import_react49.useCallback)(values2=>{let newValues=typeof values2=="function"?values2(selectedValues):values2;setSelectedValues(newValues),onChange?.(newValues)},[selectedValues,onChange]),navigation=useSelectNavigation({visibleOptionCount,options,initialFocusValue:initialFocusLast?options[options.length-1]?.value:void 0,onFocus,focusValue});useRegisterOverlay("multi-select");let updateInputValue=(0,import_react49.useCallback)((value,inputValue)=>{setInputValues(prev=>{let next=new Map(prev);return next.set(value,inputValue),next});let option=options.find(opt=>opt.value===value);option&&option.type==="input"&&option.onChange(inputValue),updateSelectedValues(prev=>inputValue?prev.includes(value)?prev:[...prev,value]:prev.filter(v2=>v2!==value))},[options,updateSelectedValues]);return use_input_default((input,key,event)=>{let normalizedInput=normalizeFullWidthDigits(input),isInInput=options.find(opt=>opt.value===navigation.focusedValue)?.type==="input";if(isInInput&&!(key.upArrow||key.downArrow||key.escape||key.tab||key.return||key.ctrl&&(input==="n"||input==="p"||key.return)))return;let lastOptionValue=options[options.length-1]?.value;if(key.tab&&!key.shift){submitButtonText&&onSubmit&&navigation.focusedValue===lastOptionValue&&!isSubmitFocused?setIsSubmitFocused(!0):isSubmitFocused||navigation.focusNextOption();return}if(key.tab&&key.shift){submitButtonText&&onSubmit&&isSubmitFocused?(setIsSubmitFocused(!1),navigation.focusOption(lastOptionValue)):navigation.focusPreviousOption();return}if(key.downArrow||key.ctrl&&input==="n"||!key.ctrl&&!key.shift&&input==="j"){isSubmitFocused&&onDownFromLastItem?onDownFromLastItem():submitButtonText&&onSubmit&&navigation.focusedValue===lastOptionValue&&!isSubmitFocused?setIsSubmitFocused(!0):!submitButtonText&&onDownFromLastItem&&navigation.focusedValue===lastOptionValue?onDownFromLastItem():isSubmitFocused||navigation.focusNextOption();return}if(key.upArrow||key.ctrl&&input==="p"||!key.ctrl&&!key.shift&&input==="k"){submitButtonText&&onSubmit&&isSubmitFocused?(setIsSubmitFocused(!1),navigation.focusOption(lastOptionValue)):onUpFromFirstItem&&navigation.focusedValue===options[0]?.value?onUpFromFirstItem():navigation.focusPreviousOption();return}if(key.pageDown){navigation.focusNextPage();return}if(key.pageUp){navigation.focusPreviousPage();return}if(key.return||normalizeFullWidthSpace(input)===" "){if(key.ctrl&&key.return&&isInInput&&onSubmit){onSubmit(selectedValues);return}if(isSubmitFocused&&onSubmit){onSubmit(selectedValues);return}if(key.return&&!submitButtonText&&onSubmit){onSubmit(selectedValues);return}if(navigation.focusedValue!==void 0){let newValues=selectedValues.includes(navigation.focusedValue)?selectedValues.filter(v2=>v2!==navigation.focusedValue):[...selectedValues,navigation.focusedValue];updateSelectedValues(newValues)}return}if(!hideIndexes&&/^[0-9]+$/.test(normalizedInput)){let index=parseInt(normalizedInput)-1;if(index>=0&&index<options.length){let value=options[index].value,newValues=selectedValues.includes(value)?selectedValues.filter(v2=>v2!==value):[...selectedValues,value];updateSelectedValues(newValues)}return}key.escape&&(onCancel(),event.stopImmediatePropagation())},{isActive:!isDisabled}),{...navigation,selectedValues,inputValues,isSubmitFocused,updateInputValue,onCancel}}var import_react49,init_use_multi_select_state=__esm({"src/components/CustomSelect/use-multi-select-state.ts"(){import_react49=__toESM(require_react());init_overlayContext();init_ink2();init_stringUtils();init_use_select_navigation();__name(useMultiSelectState,"useMultiSelectState")}});function SelectMulti({isDisabled=!1,visibleOptionCount=5,options,defaultValue=[],onCancel,onChange,onFocus,focusValue,submitButtonText,onSubmit,onDownFromLastItem,onUpFromFirstItem,initialFocusLast,onOpenEditor,hideIndexes=!1,onImagePaste,pastedContents,onRemoveImage}){let state2=useMultiSelectState({isDisabled,visibleOptionCount,options,defaultValue,onChange,onCancel,onFocus,focusValue,submitButtonText,onSubmit,onDownFromLastItem,onUpFromFirstItem,initialFocusLast,hideIndexes}),maxIndexWidth=options.length.toString().length;return(0,import_jsx_runtime54.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime54.jsx)(ThemedBox_default,{flexDirection:"column",children:state2.visibleOptions.map((option,index)=>{let isOptionFocused=!isDisabled&&state2.focusedValue===option.value&&!state2.isSubmitFocused,isSelected=state2.selectedValues.includes(option.value),isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1;if(option.type==="input"){let inputValue=state2.inputValues.get(option.value)||"";return(0,import_jsx_runtime54.jsx)(ThemedBox_default,{gap:1,children:(0,import_jsx_runtime54.jsx)(SelectInputOption,{option,isFocused:isOptionFocused,isSelected:!1,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,maxIndexWidth,index:i3,inputValue,onInputChange:value=>{state2.updateInputValue(option.value,value)},onSubmit:()=>{},onExit:()=>{onCancel()},layout:"compact",onOpenEditor,onImagePaste,pastedContents,onRemoveImage,children:(0,import_jsx_runtime54.jsxs)(ThemedText,{color:isSelected?"success":void 0,children:["[",isSelected?figures_default.tick:" ","]"," "]})})},String(option.value))}return(0,import_jsx_runtime54.jsx)(ThemedBox_default,{gap:1,children:(0,import_jsx_runtime54.jsxs)(SelectOption,{isFocused:isOptionFocused,isSelected:!1,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,description:option.description,children:[!hideIndexes&&(0,import_jsx_runtime54.jsx)(ThemedText,{dimColor:!0,children:`${i3}.`.padEnd(maxIndexWidth)}),(0,import_jsx_runtime54.jsxs)(ThemedText,{color:isSelected?"success":void 0,children:["[",isSelected?figures_default.tick:" ","]"]}),(0,import_jsx_runtime54.jsx)(ThemedText,{color:isOptionFocused?"suggestion":void 0,children:option.label})]})},String(option.value))})}),submitButtonText&&onSubmit&&(0,import_jsx_runtime54.jsxs)(ThemedBox_default,{marginTop:0,gap:1,children:[state2.isSubmitFocused?(0,import_jsx_runtime54.jsx)(ThemedText,{color:"suggestion",children:figures_default.pointer}):(0,import_jsx_runtime54.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime54.jsx)(ThemedBox_default,{marginLeft:3,children:(0,import_jsx_runtime54.jsx)(ThemedText,{color:state2.isSubmitFocused?"suggestion":void 0,bold:!0,children:submitButtonText})})]})]})}var import_jsx_runtime54,init_SelectMulti=__esm({"src/components/CustomSelect/SelectMulti.tsx"(){init_figures();init_ink2();init_select_input_option();init_select_option();init_use_multi_select_state();import_jsx_runtime54=__toESM(require_jsx_runtime());__name(SelectMulti,"SelectMulti")}});var import_react50,useSelectInput,init_use_select_input=__esm({"src/components/CustomSelect/use-select-input.ts"(){import_react50=__toESM(require_react());init_overlayContext();init_ink2();init_useKeybinding();init_stringUtils();useSelectInput=__name(({isDisabled=!1,disableSelection=!1,state:state2,options,isMultiSelect=!1,onUpFromFirstItem,onDownFromLastItem,onInputModeToggle,inputValues,imagesSelected=!1,onEnterImageSelection})=>{useRegisterOverlay("select",!!state2.onCancel);let isInInput=(0,import_react50.useMemo)(()=>options.find(opt=>opt.value===state2.focusedValue)?.type==="input",[options,state2.focusedValue]),keybindingHandlers=(0,import_react50.useMemo)(()=>{let handlers={};if(isInInput||(handlers["select:next"]=()=>{if(onDownFromLastItem){let lastOption=options[options.length-1];if(lastOption&&state2.focusedValue===lastOption.value){onDownFromLastItem();return}}state2.focusNextOption()},handlers["select:previous"]=()=>{if(onUpFromFirstItem&&state2.visibleFromIndex===0){let firstOption=options[0];if(firstOption&&state2.focusedValue===firstOption.value){onUpFromFirstItem();return}}state2.focusPreviousOption()},handlers["select:accept"]=()=>{disableSelection===!0||state2.focusedValue===void 0||options.find(opt=>opt.value===state2.focusedValue)?.disabled===!0||(state2.selectFocusedOption?.(),state2.onChange?.(state2.focusedValue))}),state2.onCancel){let handleCancel=__name(()=>{state2.onCancel()},"handleCancel");handlers["select:cancel"]=handleCancel,handlers["app:interrupt"]=handleCancel}return handlers},[options,state2,onDownFromLastItem,onUpFromFirstItem,isInInput,disableSelection]);useKeybindings(keybindingHandlers,{context:"Select",isActive:!isDisabled}),use_input_default((input,key,event)=>{let normalizedInput=normalizeFullWidthDigits(input),focusedOption=options.find(opt=>opt.value===state2.focusedValue),currentIsInInput=focusedOption?.type==="input";if(key.tab&&onInputModeToggle&&state2.focusedValue!==void 0){onInputModeToggle(state2.focusedValue);return}if(currentIsInInput){if(imagesSelected)return;if(key.downArrow&&onEnterImageSelection?.()){event.stopImmediatePropagation();return}if(key.downArrow||key.ctrl&&input==="n"){if(onDownFromLastItem){let lastOption=options[options.length-1];if(lastOption&&state2.focusedValue===lastOption.value){onDownFromLastItem(),event.stopImmediatePropagation();return}}state2.focusNextOption(),event.stopImmediatePropagation();return}if(key.upArrow||key.ctrl&&input==="p"){if(onUpFromFirstItem&&state2.visibleFromIndex===0){let firstOption=options[0];if(firstOption&&state2.focusedValue===firstOption.value){onUpFromFirstItem(),event.stopImmediatePropagation();return}}state2.focusPreviousOption(),event.stopImmediatePropagation();return}return}if(key.pageDown&&state2.focusNextPage(),key.pageUp&&state2.focusPreviousPage(),disableSelection!==!0&&(isMultiSelect&&normalizeFullWidthSpace(input)===" "&&state2.focusedValue!==void 0&&(focusedOption?.disabled===!0||(state2.selectFocusedOption?.(),state2.onChange?.(state2.focusedValue))),disableSelection!=="numeric"&&/^[0-9]+$/.test(normalizedInput))){let index=parseInt(normalizedInput)-1;if(index>=0&&index<state2.options.length){let selectedOption=state2.options[index];if(selectedOption.disabled===!0)return;if(selectedOption.type==="input"){if((inputValues?.get(selectedOption.value)??"").trim()){state2.onChange?.(selectedOption.value);return}if(selectedOption.allowEmptySubmitToCancel){state2.onChange?.(selectedOption.value);return}state2.focusOption(selectedOption.value);return}state2.onChange?.(selectedOption.value);return}}},{isActive:!isDisabled})},"useSelectInput")}});function useSelectState({visibleOptionCount=5,options,defaultValue,onChange,onCancel,onFocus,focusValue}){let[value,setValue]=(0,import_react51.useState)(defaultValue),navigation=useSelectNavigation({visibleOptionCount,options,initialFocusValue:void 0,onFocus,focusValue}),selectFocusedOption=(0,import_react51.useCallback)(()=>{setValue(navigation.focusedValue)},[navigation.focusedValue]);return{...navigation,value,selectFocusedOption,onChange,onCancel}}var import_react51,init_use_select_state=__esm({"src/components/CustomSelect/use-select-state.ts"(){import_react51=__toESM(require_react());init_use_select_navigation();__name(useSelectState,"useSelectState")}});function getTextContent2(node){return typeof node=="string"?node:typeof node=="number"?String(node):node?Array.isArray(node)?node.map(getTextContent2).join(""):import_react52.default.isValidElement(node)?getTextContent2(node.props.children):"":""}function Select({isDisabled=!1,hideIndexes=!1,visibleOptionCount=5,highlightText,options,defaultValue,onCancel,onChange,onFocus,defaultFocusValue,layout="compact",disableSelection=!1,inlineDescriptions=!1,onUpFromFirstItem,onDownFromLastItem,onInputModeToggle,onOpenEditor,onImagePaste,pastedContents,onRemoveImage}){let[imagesSelected,setImagesSelected]=(0,import_react52.useState)(!1),[selectedImageIndex,setSelectedImageIndex]=(0,import_react52.useState)(0),[inputValues,setInputValues]=(0,import_react52.useState)(()=>{let initialMap=new Map;return options.forEach(option=>{option.type==="input"&&option.initialValue&&initialMap.set(option.value,option.initialValue)}),initialMap}),lastInitialValues=(0,import_react52.useRef)(new Map);(0,import_react52.useEffect)(()=>{for(let option of options)if(option.type==="input"&&option.initialValue!==void 0){let lastInitial=lastInitialValues.current.get(option.value)??"",currentValue=inputValues.get(option.value)??"",newInitial=option.initialValue;newInitial!==lastInitial&¤tValue===lastInitial&&setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,newInitial),next}),lastInitialValues.current.set(option.value,newInitial)}},[options,inputValues]);let state2=useSelectState({visibleOptionCount,options,defaultValue,onChange,onCancel,onFocus,focusValue:defaultFocusValue});useSelectInput({isDisabled,disableSelection:disableSelection||(hideIndexes?"numeric":!1),state:state2,options,isMultiSelect:!1,onUpFromFirstItem,onDownFromLastItem,onInputModeToggle,inputValues,imagesSelected,onEnterImageSelection:__name(()=>{if(pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image")){let imageCount=count2(Object.values(pastedContents),c4=>c4.type==="image");return setImagesSelected(!0),setSelectedImageIndex(imageCount-1),!0}return!1},"onEnterImageSelection")});let styles5={container:__name(()=>({flexDirection:"column"}),"container"),highlightedText:__name(()=>({bold:!0}),"highlightedText")};if(layout==="expanded"){let maxIndexWidth2=state2.options.length.toString().length;return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:state2.visibleOptions.map((option,index)=>{let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value;if(option.type==="input"){let inputValue=inputValues.has(option.value)?inputValues.get(option.value):option.initialValue||"";return(0,import_jsx_runtime55.jsx)(SelectInputOption,{option,isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,maxIndexWidth:maxIndexWidth2,index:i3,inputValue,onInputChange:value=>{setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,value),next})},onSubmit:value=>{let hasImageAttachments=pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image");value.trim()||hasImageAttachments||option.allowEmptySubmitToCancel?onChange?.(option.value):onCancel?.()},onExit:onCancel,layout:"expanded",showLabel:inlineDescriptions,onOpenEditor,resetCursorOnUpdate:option.resetCursorOnUpdate,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex,onImagesSelectedChange:setImagesSelected,onSelectedImageIndexChange:setSelectedImageIndex},String(option.value))}let label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,index2=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,index2),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(index2+highlightText.length)]})}let isOptionDisabled=option.disabled===!0,optionColor=isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0;return(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:[(0,import_jsx_runtime55.jsx)(SelectOption,{isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,children:(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled,color:optionColor,children:label})}),option.description&&(0,import_jsx_runtime55.jsx)(ThemedBox_default,{paddingLeft:2,children:(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled||option.dimDescription!==!1,color:optionColor,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:option.description})})}),(0,import_jsx_runtime55.jsx)(ThemedText,{children:" "})]},String(option.value))})})}if(layout==="compact-vertical"){let maxIndexWidth2=hideIndexes?0:state2.options.length.toString().length;return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:state2.visibleOptions.map((option,index)=>{let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value;if(option.type==="input"){let inputValue=inputValues.has(option.value)?inputValues.get(option.value):option.initialValue||"";return(0,import_jsx_runtime55.jsx)(SelectInputOption,{option,isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,maxIndexWidth:maxIndexWidth2,index:i3,inputValue,onInputChange:value=>{setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,value),next})},onSubmit:value=>{let hasImageAttachments=pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image");value.trim()||hasImageAttachments||option.allowEmptySubmitToCancel?onChange?.(option.value):onCancel?.()},onExit:onCancel,layout:"compact",showLabel:inlineDescriptions,onOpenEditor,resetCursorOnUpdate:option.resetCursorOnUpdate,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex,onImagesSelectedChange:setImagesSelected,onSelectedImageIndexChange:setSelectedImageIndex},String(option.value))}let label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,index2=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,index2),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(index2+highlightText.length)]})}let isOptionDisabled=option.disabled===!0;return(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:[(0,import_jsx_runtime55.jsx)(SelectOption,{isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,children:(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[!hideIndexes&&(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:`${i3}.`.padEnd(maxIndexWidth2+1)}),(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:label})]})}),option.description&&(0,import_jsx_runtime55.jsx)(ThemedBox_default,{paddingLeft:hideIndexes?4:maxIndexWidth2+4,children:(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:isOptionDisabled||option.dimDescription!==!1,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:option.description})})})]},String(option.value))})})}let maxIndexWidth=hideIndexes?0:state2.options.length.toString().length,hasInputOptions=state2.visibleOptions.some(opt=>opt.type==="input"),hasDescriptions=!inlineDescriptions&&!hasInputOptions&&state2.visibleOptions.some(opt=>opt.description),optionData=state2.visibleOptions.map((option,index)=>{let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value,isOptionDisabled=option.disabled===!0,label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,idx=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,idx),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(idx+highlightText.length)]})}return{option,index:i3,label,isFocused,isSelected,isOptionDisabled,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption}});if(hasDescriptions){let maxLabelWidth=Math.max(...optionData.map(data=>{if(data.option.type==="input")return 0;let labelText=getTextContent2(data.option.label),indexWidth=hideIndexes?0:maxIndexWidth+2,checkmarkWidth=data.isSelected?2:0;return 2+indexWidth+stringWidth(labelText)+checkmarkWidth}));return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:optionData.map(data=>{if(data.option.type==="input")return null;let labelText=getTextContent2(data.option.label),indexWidth=hideIndexes?0:maxIndexWidth+2,checkmarkWidth=data.isSelected?2:0,currentLabelWidth=2+indexWidth+stringWidth(labelText)+checkmarkWidth,padding=maxLabelWidth-currentLabelWidth;return(0,import_jsx_runtime55.jsxs)(TwoColumnRow,{isFocused:data.isFocused,children:[(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"row",flexShrink:0,children:[data.isFocused?(0,import_jsx_runtime55.jsx)(ThemedText,{color:"suggestion",children:figures_default.pointer}):data.shouldShowDownArrow?(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowDown}):data.shouldShowUpArrow?(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:figures_default.arrowUp}):(0,import_jsx_runtime55.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime55.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime55.jsxs)(ThemedText,{dimColor:data.isOptionDisabled,color:data.isOptionDisabled?void 0:data.isSelected?"success":data.isFocused?"suggestion":void 0,children:[!hideIndexes&&(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:`${data.index}.`.padEnd(maxIndexWidth+2)}),data.label]}),data.isSelected&&(0,import_jsx_runtime55.jsxs)(ThemedText,{color:"success",children:[" ",figures_default.tick]}),padding>0&&(0,import_jsx_runtime55.jsx)(ThemedText,{children:" ".repeat(padding)})]}),(0,import_jsx_runtime55.jsx)(ThemedBox_default,{flexGrow:1,marginLeft:2,children:(0,import_jsx_runtime55.jsx)(ThemedText,{wrap:"wrap",dimColor:data.isOptionDisabled||data.option.dimDescription!==!1,color:data.isOptionDisabled?void 0:data.isSelected?"success":data.isFocused?"suggestion":void 0,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:data.option.description||" "})})})]},String(data.option.value))})})}return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{...styles5.container(),children:state2.visibleOptions.map((option,index)=>{if(option.type==="input"){let inputValue=inputValues.has(option.value)?inputValues.get(option.value):option.initialValue||"",isFirstVisibleOption2=option.index===state2.visibleFromIndex,isLastVisibleOption2=option.index===state2.visibleToIndex-1,areMoreOptionsBelow2=state2.visibleToIndex<options.length,areMoreOptionsAbove2=state2.visibleFromIndex>0,i4=state2.visibleFromIndex+index+1,isFocused2=!isDisabled&&state2.focusedValue===option.value,isSelected2=state2.value===option.value;return(0,import_jsx_runtime55.jsx)(SelectInputOption,{option,isFocused:isFocused2,isSelected:isSelected2,shouldShowDownArrow:areMoreOptionsBelow2&&isLastVisibleOption2,shouldShowUpArrow:areMoreOptionsAbove2&&isFirstVisibleOption2,maxIndexWidth,index:i4,inputValue,onInputChange:value=>{setInputValues(prev=>{let next=new Map(prev);return next.set(option.value,value),next})},onSubmit:value=>{let hasImageAttachments=pastedContents&&Object.values(pastedContents).some(c4=>c4.type==="image");value.trim()||hasImageAttachments||option.allowEmptySubmitToCancel?onChange?.(option.value):onCancel?.()},onExit:onCancel,layout:"compact",showLabel:inlineDescriptions,onOpenEditor,resetCursorOnUpdate:option.resetCursorOnUpdate,onImagePaste,pastedContents,onRemoveImage,imagesSelected,selectedImageIndex,onImagesSelectedChange:setImagesSelected,onSelectedImageIndexChange:setSelectedImageIndex},String(option.value))}let label=option.label;if(typeof option.label=="string"&&highlightText&&option.label.includes(highlightText)){let labelText=option.label,index2=labelText.indexOf(highlightText);label=(0,import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment,{children:[labelText.slice(0,index2),(0,import_jsx_runtime55.jsx)(ThemedText,{...styles5.highlightedText(),children:highlightText}),labelText.slice(index2+highlightText.length)]})}let isFirstVisibleOption=option.index===state2.visibleFromIndex,isLastVisibleOption=option.index===state2.visibleToIndex-1,areMoreOptionsBelow=state2.visibleToIndex<options.length,areMoreOptionsAbove=state2.visibleFromIndex>0,i3=state2.visibleFromIndex+index+1,isFocused=!isDisabled&&state2.focusedValue===option.value,isSelected=state2.value===option.value,isOptionDisabled=option.disabled===!0;return(0,import_jsx_runtime55.jsxs)(SelectOption,{isFocused,isSelected,shouldShowDownArrow:areMoreOptionsBelow&&isLastVisibleOption,shouldShowUpArrow:areMoreOptionsAbove&&isFirstVisibleOption,children:[(0,import_jsx_runtime55.jsxs)(ThemedBox_default,{flexDirection:"row",flexShrink:0,children:[!hideIndexes&&(0,import_jsx_runtime55.jsx)(ThemedText,{dimColor:!0,children:`${i3}.`.padEnd(maxIndexWidth+2)}),(0,import_jsx_runtime55.jsxs)(ThemedText,{dimColor:isOptionDisabled,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:[label,inlineDescriptions&&option.description&&(0,import_jsx_runtime55.jsxs)(ThemedText,{dimColor:isOptionDisabled||option.dimDescription!==!1,children:[" ",option.description]})]})]}),!inlineDescriptions&&option.description&&(0,import_jsx_runtime55.jsx)(ThemedBox_default,{flexShrink:99,marginLeft:2,children:(0,import_jsx_runtime55.jsx)(ThemedText,{wrap:"wrap-trim",dimColor:isOptionDisabled||option.dimDescription!==!1,color:isOptionDisabled?void 0:isSelected?"success":isFocused?"suggestion":void 0,children:(0,import_jsx_runtime55.jsx)(Ansi,{children:option.description})})})]},String(option.value))})})}function TwoColumnRow({isFocused,children}){let cursorRef=useDeclaredCursor({line:0,column:0,active:isFocused});return(0,import_jsx_runtime55.jsx)(ThemedBox_default,{ref:cursorRef,flexDirection:"row",children})}var import_react52,import_jsx_runtime55,init_select=__esm({"src/components/CustomSelect/select.tsx"(){init_figures();import_react52=__toESM(require_react());init_use_declared_cursor();init_stringWidth();init_ink2();init_array4();init_select_input_option();init_select_option();init_use_select_input();init_use_select_state();import_jsx_runtime55=__toESM(require_jsx_runtime());__name(getTextContent2,"getTextContent");__name(Select,"Select");__name(TwoColumnRow,"TwoColumnRow")}});var init_CustomSelect=__esm({"src/components/CustomSelect/index.ts"(){init_SelectMulti();init_select()}});function PermissionRequestTitle({title,subtitle,color:color3="permission",workerBadge}){return(0,import_jsx_runtime56.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime56.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[(0,import_jsx_runtime56.jsx)(ThemedText,{bold:!0,color:color3,children:title}),workerBadge&&(0,import_jsx_runtime56.jsxs)(ThemedText,{dimColor:!0,children:["\xB7 ","@",workerBadge.name]})]}),subtitle!=null&&(typeof subtitle=="string"?(0,import_jsx_runtime56.jsx)(ThemedText,{dimColor:!0,wrap:"truncate-start",children:subtitle}):subtitle)]})}var import_jsx_runtime56,init_PermissionRequestTitle=__esm({"src/components/permissions/PermissionRequestTitle.tsx"(){init_ink2();import_jsx_runtime56=__toESM(require_jsx_runtime());__name(PermissionRequestTitle,"PermissionRequestTitle")}});function PermissionDialog({title,subtitle,color:color3="permission",titleColor,innerPaddingX=1,workerBadge,titleRight,children}){return(0,import_jsx_runtime57.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:color3,borderLeft:!1,borderRight:!1,borderBottom:!1,marginTop:1,children:[(0,import_jsx_runtime57.jsx)(ThemedBox_default,{paddingX:1,flexDirection:"column",children:(0,import_jsx_runtime57.jsxs)(ThemedBox_default,{justifyContent:"space-between",children:[(0,import_jsx_runtime57.jsx)(PermissionRequestTitle,{title,subtitle,color:titleColor,workerBadge}),titleRight]})}),(0,import_jsx_runtime57.jsx)(ThemedBox_default,{flexDirection:"column",paddingX:innerPaddingX,children})]})}var import_jsx_runtime57,init_PermissionDialog=__esm({"src/components/permissions/PermissionDialog.tsx"(){init_ink2();init_PermissionRequestTitle();import_jsx_runtime57=__toESM(require_jsx_runtime());__name(PermissionDialog,"PermissionDialog")}});function isProviderManagedEnvVar(key){let upper=key.toUpperCase();return PROVIDER_MANAGED_ENV_VARS.has(upper)||PROVIDER_MANAGED_ENV_PREFIXES.some(p=>upper.startsWith(p))}var PROVIDER_MANAGED_ENV_VARS,PROVIDER_MANAGED_ENV_PREFIXES,DANGEROUS_SHELL_SETTINGS,SAFE_ENV_VARS2,init_managedEnvConstants=__esm({"src/utils/managedEnvConstants.ts"(){PROVIDER_MANAGED_ENV_VARS=new Set(["CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","ANTHROPIC_BASE_URL","ANTHROPIC_BEDROCK_BASE_URL","ANTHROPIC_VERTEX_BASE_URL","ANTHROPIC_FOUNDRY_BASE_URL","ANTHROPIC_FOUNDRY_RESOURCE","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","ANTHROPIC_API_KEY","ANTHROPIC_AUTH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","AWS_BEARER_TOKEN_BEDROCK","ANTHROPIC_FOUNDRY_API_KEY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_SMALL_FAST_MODEL","ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION","CLAUDE_CODE_SUBAGENT_MODEL"]),PROVIDER_MANAGED_ENV_PREFIXES=["VERTEX_REGION_CLAUDE_"];__name(isProviderManagedEnvVar,"isProviderManagedEnvVar");DANGEROUS_SHELL_SETTINGS=["apiKeyHelper","awsAuthRefresh","awsCredentialExport","gcpAuthRefresh","otelHeadersHelper","statusLine"],SAFE_ENV_VARS2=new Set(["ANTHROPIC_CUSTOM_HEADERS","ANTHROPIC_CUSTOM_MODEL_OPTION","ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION","ANTHROPIC_CUSTOM_MODEL_OPTION_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES","ANTHROPIC_FOUNDRY_API_KEY","ANTHROPIC_MODEL","ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION","ANTHROPIC_SMALL_FAST_MODEL","AWS_DEFAULT_REGION","AWS_PROFILE","AWS_REGION","BASH_DEFAULT_TIMEOUT_MS","BASH_MAX_OUTPUT_LENGTH","BASH_MAX_TIMEOUT_MS","CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR","CLAUDE_CODE_API_KEY_HELPER_TTL_MS","CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","CLAUDE_CODE_DISABLE_TERMINAL_TITLE","CLAUDE_CODE_ENABLE_TELEMETRY","CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS","CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL","CLAUDE_CODE_MAX_OUTPUT_TOKENS","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SUBAGENT_MODEL","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_USE_VERTEX","DISABLE_AUTOUPDATER","DISABLE_BUG_COMMAND","DISABLE_COST_WARNINGS","DISABLE_ERROR_REPORTING","DISABLE_FEEDBACK_COMMAND","DISABLE_TELEMETRY","ENABLE_TOOL_SEARCH","MAX_MCP_OUTPUT_TOKENS","MAX_THINKING_TOKENS","MCP_TIMEOUT","MCP_TOOL_TIMEOUT","OTEL_EXPORTER_OTLP_HEADERS","OTEL_EXPORTER_OTLP_LOGS_HEADERS","OTEL_EXPORTER_OTLP_LOGS_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY","OTEL_EXPORTER_OTLP_METRICS_HEADERS","OTEL_EXPORTER_OTLP_METRICS_PROTOCOL","OTEL_EXPORTER_OTLP_PROTOCOL","OTEL_EXPORTER_OTLP_TRACES_HEADERS","OTEL_LOG_TOOL_DETAILS","OTEL_LOG_USER_PROMPTS","OTEL_LOGS_EXPORT_INTERVAL","OTEL_LOGS_EXPORTER","OTEL_METRIC_EXPORT_INTERVAL","OTEL_METRICS_EXPORTER","OTEL_METRICS_INCLUDE_ACCOUNT_UUID","OTEL_METRICS_INCLUDE_SESSION_ID","OTEL_METRICS_INCLUDE_VERSION","OTEL_RESOURCE_ATTRIBUTES","USE_BUILTIN_RIPGREP","VERTEX_REGION_CLAUDE_3_5_HAIKU","VERTEX_REGION_CLAUDE_3_5_SONNET","VERTEX_REGION_CLAUDE_3_7_SONNET","VERTEX_REGION_CLAUDE_4_0_OPUS","VERTEX_REGION_CLAUDE_4_0_SONNET","VERTEX_REGION_CLAUDE_4_1_OPUS","VERTEX_REGION_CLAUDE_4_5_SONNET","VERTEX_REGION_CLAUDE_4_6_SONNET","VERTEX_REGION_CLAUDE_HAIKU_4_5"])}});function extractDangerousSettings(settings){if(!settings)return{shellSettings:{},envVars:{},hasHooks:!1};let shellSettings={};for(let key of DANGEROUS_SHELL_SETTINGS){let value=settings[key];typeof value=="string"&&value.length>0&&(shellSettings[key]=value)}let envVars={};if(settings.env&&typeof settings.env=="object")for(let[key,value]of Object.entries(settings.env))typeof value=="string"&&value.length>0&&(SAFE_ENV_VARS2.has(key.toUpperCase())||(envVars[key]=value));let hasHooks2=settings.hooks!==void 0&&settings.hooks!==null&&typeof settings.hooks=="object"&&Object.keys(settings.hooks).length>0;return{shellSettings,envVars,hasHooks:hasHooks2,hooks:hasHooks2?settings.hooks:void 0}}function hasDangerousSettings(dangerous){return Object.keys(dangerous.shellSettings).length>0||Object.keys(dangerous.envVars).length>0||dangerous.hasHooks}function hasDangerousSettingsChanged(oldSettings,newSettings){let oldDangerous=extractDangerousSettings(oldSettings),newDangerous=extractDangerousSettings(newSettings);if(!hasDangerousSettings(newDangerous))return!1;if(!hasDangerousSettings(oldDangerous))return!0;let oldJson=jsonStringify({shellSettings:oldDangerous.shellSettings,envVars:oldDangerous.envVars,hooks:oldDangerous.hooks}),newJson=jsonStringify({shellSettings:newDangerous.shellSettings,envVars:newDangerous.envVars,hooks:newDangerous.hooks});return oldJson!==newJson}function formatDangerousSettingsList(dangerous){let items=[];for(let key of Object.keys(dangerous.shellSettings))items.push(key);for(let key of Object.keys(dangerous.envVars))items.push(key);return dangerous.hasHooks&&items.push("hooks"),items}var init_utils5=__esm({"src/components/ManagedSettingsSecurityDialog/utils.ts"(){init_managedEnvConstants();init_slowOperations();__name(extractDangerousSettings,"extractDangerousSettings");__name(hasDangerousSettings,"hasDangerousSettings");__name(hasDangerousSettingsChanged,"hasDangerousSettingsChanged");__name(formatDangerousSettingsList,"formatDangerousSettingsList")}});function ManagedSettingsSecurityDialog({settings,onAccept,onReject}){let dangerous=extractDangerousSettings(settings),settingsList=formatDangerousSettingsList(dangerous),exitState=useExitOnCtrlCDWithKeybindings();useKeybinding("confirm:no",onReject,{context:"Confirmation"});function onChange(value){if(value==="exit"){onReject();return}onAccept()}return __name(onChange,"onChange"),(0,import_jsx_runtime58.jsx)(PermissionDialog,{color:"warning",titleColor:"warning",title:"Managed settings require approval",children:(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,paddingTop:1,children:[(0,import_jsx_runtime58.jsx)(ThemedText,{children:"Your organization has configured managed settings that could allow execution of arbitrary code or interception of your prompts and responses."}),(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"Settings requiring approval:"}),settingsList.map((item,index)=>(0,import_jsx_runtime58.jsx)(ThemedBox_default,{paddingLeft:2,children:(0,import_jsx_runtime58.jsxs)(ThemedText,{children:[(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"\xB7 "}),(0,import_jsx_runtime58.jsx)(ThemedText,{children:item})]})},index))]}),(0,import_jsx_runtime58.jsx)(ThemedText,{children:"Only accept if you trust your organization's IT administration and expect these settings to be configured."}),(0,import_jsx_runtime58.jsx)(Select,{options:[{label:"Yes, I trust these settings",value:"accept"},{label:"No, exit Clavue",value:"exit"}],onChange:value=>onChange(value),onCancel:()=>onChange("exit")}),(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:exitState.pending?(0,import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment,{children:["Press ",exitState.keyName," again to exit"]}):(0,import_jsx_runtime58.jsx)(import_jsx_runtime58.Fragment,{children:"Enter to confirm \xB7 Esc to exit"})})]})})}var import_jsx_runtime58,init_ManagedSettingsSecurityDialog=__esm({"src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx"(){init_useExitOnCtrlCDWithKeybindings();init_ink2();init_useKeybinding();init_CustomSelect();init_PermissionDialog();init_utils5();import_jsx_runtime58=__toESM(require_jsx_runtime());__name(ManagedSettingsSecurityDialog,"ManagedSettingsSecurityDialog")}});function useKeybindingWarnings(warnings,isReload){let{addNotification,removeNotification}=useNotifications();(0,import_react53.useEffect)(()=>{let notificationKey="keybinding-config-warning";if(warnings.length===0){removeNotification(notificationKey);return}let errorCount=count2(warnings,w2=>w2.severity==="error"),warnCount=count2(warnings,w2=>w2.severity==="warning"),message;errorCount>0&&warnCount>0?message=`Found ${errorCount} keybinding ${plural(errorCount,"error")} and ${warnCount} ${plural(warnCount,"warning")}`:errorCount>0?message=`Found ${errorCount} keybinding ${plural(errorCount,"error")}`:message=`Found ${warnCount} keybinding ${plural(warnCount,"warning")}`,message+=" \xB7 /doctor for details",addNotification({key:notificationKey,text:message,color:errorCount>0?"error":"warning",priority:errorCount>0?"immediate":"high",timeoutMs:6e4})},[warnings,isReload,addNotification,removeNotification])}function KeybindingSetup({children}){let[{bindings,warnings},setLoadResult]=(0,import_react53.useState)(()=>{let result2=loadKeybindingsSyncWithWarnings();return logForDebugging(`[keybindings] KeybindingSetup initialized with ${result2.bindings.length} bindings, ${result2.warnings.length} warnings`),result2}),[isReload,setIsReload]=(0,import_react53.useState)(!1);useKeybindingWarnings(warnings,isReload);let pendingChordRef=(0,import_react53.useRef)(null),[pendingChord,setPendingChordState]=(0,import_react53.useState)(null),chordTimeoutRef=(0,import_react53.useRef)(null),handlerRegistryRef=(0,import_react53.useRef)(new Map),activeContextsRef=(0,import_react53.useRef)(new Set),registerActiveContext=(0,import_react53.useCallback)(context2=>{activeContextsRef.current.add(context2)},[]),unregisterActiveContext=(0,import_react53.useCallback)(context2=>{activeContextsRef.current.delete(context2)},[]),clearChordTimeout=(0,import_react53.useCallback)(()=>{chordTimeoutRef.current&&(clearTimeout(chordTimeoutRef.current),chordTimeoutRef.current=null)},[]),setPendingChord=(0,import_react53.useCallback)(pending=>{clearChordTimeout(),pending!==null&&(chordTimeoutRef.current=setTimeout((pendingChordRef2,setPendingChordState2)=>{logForDebugging("[keybindings] Chord timeout - cancelling"),pendingChordRef2.current=null,setPendingChordState2(null)},CHORD_TIMEOUT_MS,pendingChordRef,setPendingChordState)),pendingChordRef.current=pending,setPendingChordState(pending)},[clearChordTimeout]);return(0,import_react53.useEffect)(()=>{initializeKeybindingWatcher();let unsubscribe2=subscribeToKeybindingChanges(result2=>{setIsReload(!0),setLoadResult(result2),logForDebugging(`[keybindings] Reloaded: ${result2.bindings.length} bindings, ${result2.warnings.length} warnings`)});return()=>{unsubscribe2(),clearChordTimeout()}},[clearChordTimeout]),(0,import_jsx_runtime59.jsxs)(KeybindingProvider,{bindings,pendingChordRef,pendingChord,setPendingChord,activeContexts:activeContextsRef.current,registerActiveContext,unregisterActiveContext,handlerRegistryRef,children:[(0,import_jsx_runtime59.jsx)(ChordInterceptor,{bindings,pendingChordRef,setPendingChord,activeContexts:activeContextsRef.current,handlerRegistryRef}),children]})}function ChordInterceptor({bindings,pendingChordRef,setPendingChord,activeContexts,handlerRegistryRef}){let handleInput=(0,import_react53.useCallback)((input,key,event)=>{if((key.wheelUp||key.wheelDown)&&pendingChordRef.current===null)return;let registry2=handlerRegistryRef.current,handlerContexts=new Set;if(registry2)for(let handlers of registry2.values())for(let registration of handlers)handlerContexts.add(registration.context);let contexts=[...handlerContexts,...activeContexts,"Global"],wasInChord=pendingChordRef.current!==null,result2=resolveKeyWithChordState(input,key,contexts,bindings,pendingChordRef.current);switch(result2.type){case"chord_started":setPendingChord(result2.pending),event.stopImmediatePropagation();break;case"match":{if(setPendingChord(null),wasInChord){let contextsSet=new Set(contexts);if(registry2){let handlers=registry2.get(result2.action);if(handlers&&handlers.size>0){for(let registration of handlers)if(contextsSet.has(registration.context)){registration.handler(),event.stopImmediatePropagation();break}}}}break}case"chord_cancelled":setPendingChord(null),event.stopImmediatePropagation();break;case"unbound":setPendingChord(null),event.stopImmediatePropagation();break;case"none":break}},[bindings,pendingChordRef,setPendingChord,activeContexts,handlerRegistryRef]);return use_input_default(handleInput),null}var import_react53,import_jsx_runtime59,CHORD_TIMEOUT_MS,init_KeybindingProviderSetup=__esm({"src/keybindings/KeybindingProviderSetup.tsx"(){import_react53=__toESM(require_react());init_notifications();init_ink2();init_array4();init_debug();init_stringUtils();init_KeybindingContext();init_loadUserBindings();init_resolver();import_jsx_runtime59=__toESM(require_jsx_runtime()),CHORD_TIMEOUT_MS=1e3;__name(useKeybindingWarnings,"useKeybindingWarnings");__name(KeybindingSetup,"KeybindingSetup");__name(ChordInterceptor,"ChordInterceptor")}});function quoteResumeTarget(target){return`"${target.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function shellQuote(value){return SAFE_SHELL_TOKEN.test(value)?value:`'${value.replace(/'/g,`'"'"'`)}'`}function getResumeCommand(target){return`${CLI_COMMAND_NAME} --resume ${target}`}function getSessionResumeCommand({sessionId,customTitle}){let trimmedTitle=customTitle?.trim();return getResumeCommand(trimmedTitle?quoteResumeTarget(trimmedTitle):sessionId)}function getCrossProjectResumeCommand(projectPath,sessionId){return`cd ${shellQuote(projectPath)} && ${getResumeCommand(sessionId)}`}var SAFE_SHELL_TOKEN,init_resumeCommand=__esm({"src/utils/resumeCommand.ts"(){init_branding();SAFE_SHELL_TOKEN=/^[A-Za-z0-9_./:@%+=,-]+$/;__name(quoteResumeTarget,"quoteResumeTarget");__name(shellQuote,"shellQuote");__name(getResumeCommand,"getResumeCommand");__name(getSessionResumeCommand,"getSessionResumeCommand");__name(getCrossProjectResumeCommand,"getCrossProjectResumeCommand")}});import{writeSync as writeSync2}from"fs";function cleanupTerminalModes(){if(process.stdout.isTTY)try{writeSync2(1,DISABLE_MOUSE_TRACKING);let inst=instances_default.get(process.stdout);if(inst?.isAltScreenActive)try{inst.unmount()}catch{writeSync2(1,EXIT_ALT_SCREEN)}inst?.drainStdin(),inst?.detachForShutdown(),writeSync2(1,DISABLE_MODIFY_OTHER_KEYS),writeSync2(1,DISABLE_KITTY_KEYBOARD),writeSync2(1,DFE),writeSync2(1,DBP),writeSync2(1,SHOW_CURSOR),writeSync2(1,CLEAR_ITERM2_PROGRESS),supportsTabStatus()&&writeSync2(1,wrapForMultiplexer(CLEAR_TAB_STATUS)),isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE)||(process.platform==="win32"?process.title="":writeSync2(1,CLEAR_TERMINAL_TITLE))}catch{}}function printResumeHint(){if(!resumeHintPrinted&&process.stdout.isTTY&&getIsInteractive()&&!isSessionPersistenceDisabled())try{let sessionId=getSessionId();if(!sessionIdExists(sessionId))return;let customTitle=getCurrentSessionTitle(sessionId),resumeCommand=getSessionResumeCommand({sessionId,customTitle});writeSync2(1,source_default.dim(`
|
|
1731
1731
|
Resume this session with:
|
|
1732
1732
|
${resumeCommand}
|
|
1733
1733
|
`)),resumeHintPrinted=!0}catch{}}function forceExit(exitCode){failsafeTimer!==void 0&&(clearTimeout(failsafeTimer),failsafeTimer=void 0);try{instances_default.get(process.stdout)?.drainStdin()}catch{}try{process.exit(exitCode)}catch(e2){if(process.env.NODE_ENV==="test")throw e2;process.kill(process.pid,"SIGKILL")}if(process.env.NODE_ENV!=="test")throw new Error("unreachable")}function gracefulShutdownSync(exitCode=0,reason="other",options){process.exitCode=exitCode,pendingShutdown=gracefulShutdown(exitCode,reason,options).catch(error40=>{logForDebugging(`Graceful shutdown failed: ${error40}`,{level:"error"}),cleanupTerminalModes(),printResumeHint(),forceExit(exitCode)}).catch(()=>{})}function isShuttingDown(){return shutdownInProgress}async function gracefulShutdown(exitCode=0,reason="other",options){if(shutdownInProgress)return;shutdownInProgress=!0;let{executeSessionEndHooks:executeSessionEndHooks2,getSessionEndHookTimeoutMs:getSessionEndHookTimeoutMs2}=await Promise.resolve().then(()=>(init_hooks6(),hooks_exports2)),sessionEndTimeoutMs=getSessionEndHookTimeoutMs2();failsafeTimer=setTimeout(code=>{cleanupTerminalModes(),printResumeHint(),forceExit(code)},Math.max(5e3,sessionEndTimeoutMs+3500),exitCode),failsafeTimer.unref(),process.exitCode=exitCode,cleanupTerminalModes(),printResumeHint();let cleanupTimeoutId;try{let cleanupPromise=(async()=>{try{await runCleanupFunctions()}catch{}})();await Promise.race([cleanupPromise,new Promise((_2,reject2)=>{cleanupTimeoutId=setTimeout(rej=>rej(new CleanupTimeoutError),2e3,reject2)})]),clearTimeout(cleanupTimeoutId)}catch{clearTimeout(cleanupTimeoutId)}try{await executeSessionEndHooks2(reason,{...options,signal:AbortSignal.timeout(sessionEndTimeoutMs),timeoutMs:sessionEndTimeoutMs})}catch{}try{profileReport()}catch{}let lastRequestId=getLastMainRequestId();lastRequestId&&logEvent("tengu_cache_eviction_hint",{scope:"session_end",last_request_id:lastRequestId});try{await Promise.race([Promise.all([shutdown1PEventLogging(),shutdownDatadog()]),sleep2(500)])}catch{}if(options?.finalMessage)try{writeSync2(2,options.finalMessage+`
|